postcore_initcall(tty_class_init); 上面代码创建了tty类,方便以后创建设备节点,然后是tty_init,tty_init函数负责初始化tty层,它是由chr_dev_init调用的(fs_initcall(chr_dev_init)),也就是说它属于字符设备一部分。 int__init tty_init(void) { cdev_init(&tty_cdev, &tty_fops);if(cdev_add(&tty_cd...
核心部分肯定是在core目录里。文件core.c里mmc_init负责初始化mmc子系统subsys_initcall(mmc_init); 主要工作是: mmc_register_bus注册mmc总线,这个总线主要是为card目录里实现的mmc设备驱动层和mmc控制器实例化一个mmc(包括sd/sdio)设备对象建立的。 sdio_register_bus这是sdio的部分,它比较特殊,需要额外的一条总...
} subsys_initcall(rtc_init); module_exit(rtc_exit); rtc_init初始化很简单: 通过class_create在/sys/class创建rtc目录来表示rtc时钟这一类设备的集合; rtc_dev_init在配置了CONFIG_RTC_INTF_DEV的情况下,会通过err = alloc_chrdev_region(&rtc_devt, 0, RTC_DEV_MAX, "rtc");来申请一个动态的字符设备...
utm_medium=distribute.pc_relevant_bbs_down.none-task--2~all~sobaiduend~default-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task--2~all~sobaiduend~default-1.nonecase
staticint__initspi_init(void);postcore_initcall(spi_init); 从这里可以知道spi_init的调用(也就是spi核心层的初始化)是在驱动加载前的。 spi_init主要工作: 分配一个buf,这个在后面的处理中会用到它 buf= kmalloc(SPI_BUFSIZ, GFP_KERNEL); 注册spi总线,这个总线前面有说过也用到过 ...
postcore_initcall(tty_class_init); 上面代码创建了tty类,方便以后创建设备节点,然后是tty_init,tty_init函数负责初始化tty层,它是由chr_dev_init调用的(fs_initcall(chr_dev_init)),也就是说它属于字符设备一部分。 int__init tty_init(void) {