module_driver(__platform_driver, platform_driver_register, \ platform_driver_unregister) module_driver定义在include/linux/device/driver.h文件 /** * module_driver() - Helper macro for drivers that don't do anything * special in module init/exit. This eliminates a lot of boilerplate. * Each ...
module_driver(__platform_driver, platform_driver_register, \ platform_driver_unregister) /** * module_driver() - Helper macro for drivers that don't do anything * special in module init/exit. This eliminates a lot of boilerplate. * Each module may only use this macro once, and calling ...
先不看platform_driver_registerplatform_driver_unregister的具体实现,先看module_platform_driver,可以发现module_platform_driver依然是一个宏定义: // include/linux/device/driver.h#define module_driver(__driver, __register, __unregister, ...) \static int __init __driver##_init(void) \{ \return _...
在阅读其他人编写的Linux驱动源码发现,最后驱动注册和注销时并未使用传统的“module_init”和“module_exit”,而是使用一个宏“module_xxx_driver”代替,如module_i2c_driver、module_spi_driver、module_platform_driver等等。 Linux驱动程序模型是“总线驱动”+“设备驱动”,比如i2c总线和i2c设备,spi总...
由以上展开可以看出,module_platform_driver是由module_driver封装而来,并填充了platform_driver_register、platform_driver_unregister两个函数作为宏的参数传递给了 module_driver的宏,这样做的目的是统一了接口函数,使得所有驱动的注册、注销函数都能统一的管理。
remove,// ...};module_i2c_driver(demo_i2c_drv);// plathform 驱动staticstructplatform_driver...
module_driver(__platform_driver, platform_driver_register, \ platform_driver_unregister) 这个宏接受一个platform_driver结构体作为参数,这个结构体必须包含probe函数和remove函数。然后,该宏定义了一个platform_driver_register函数和一个platform_driver_unregister函数,它们分别用于注册和注销平台驱动程序。这两个函数都...
1)定义platform_device 2)注册platform_device 3)定义platform_driver 4)注册platform_driver ( 函数编写分步: 1)resource 2)platform_device 3)static struct platform_device *smdk6410_devices[] __initdata = {... &s3c_device_usbgadget, &s3c_device_usb, //jeff add...} platform_add...
这个init_post中的第一句就是free_initmem(),就是用来释放初始化代码和数据的。voidfree_initmem(void...
4.10 电话面 吃饭的点打的电话 大概问了问项目 还有一些简单的八股 4.24 一面 开发字符设备的流程 module_init具体的工作 init_call的作用 为什么要分级 platform_driver 和 设备树怎么匹配的? 匹配的优先级有哪些? 不用device的ma...