module_platform_driver 什么时候调用
时间: 2023-12-09 15:02:20 浏览: 226
module_platform_driver 函数是针对平台设备的驱动程序模块的入口函数,可以在模块初始化时调用。当模块被加载时,内核将自动调用该函数,初始化平台驱动程序并将其注册到内核平台设备框架中。在注册完成后,内核可以通过 platform_device_register() 函数向平台设备框架中添加新的平台设备。当平台设备被添加时,内核将自动调用平台驱动程序的 probe() 函数进行设备初始化。因此,module_platform_driver 函数通常在模块的初始化函数中被调用。
相关问题
module_platform_driver();
`module_platform_driver()`是一个函数或宏,在Linux内核中用于注册一个模块(module)作为平台驱动(platform driver)。平台驱动是一种特殊的内核驱动程序,它们通常处理系统硬件的抽象层,而不仅仅是设备驱动本身。当一个模块调用`module_platform_driver()`,它告诉内核该模块提供了一个平台相关的功能,并将这个功能添加到系统的平台驱动列表中。
调用这个函数时,通常需要传递驱动的相关数据结构和初始化函数。例如:
```c
struct platform_driver my_driver = {
.probe = my_probe_func,
.remove = my_remove_func,
.driver.name = "my_driver_name",
/* 其他成员 */
};
int __init module_platform_driver(void)
{
return platform_driver_register(&my_driver);
}
```
在这个例子中,`my_probe_func`和`my_remove_func`是驱动加载和卸载时的具体操作函数。
驱动里面有如下代码: static struct platformm_driver smb5_drriver={ .driver={ .name = "qcom,qpnp-smb5", .of_match_table = mtch_tablee, } .probe = smb5_probe, .remove = smb5_remove, .shutdown = smb5_shutdown, }; module_platform__driver(smb5_driiver); 其中,外部或者说binder是如何调用shutdown 方法的?
在Linux内核中,`struct platform_driver`结构体中的`.shutdown`函数是在系统关闭时被调用的。当用户请求关机或重启操作时,内核会向所有注册了`.shutdown`函数的驱动程序发送信号,通知它们关闭硬件设备或释放资源等操作。
在你提供的驱动程序中,`smb5_shutdown`函数被指定为`.shutdown`函数,因此当系统关闭时,内核会自动调用`smb5_shutdown`函数。该函数用于释放`smb5`驱动程序占用的资源,例如释放已经分配的内存、关闭硬件设备等。
至于外部或者说binder是如何调用`smb5_shutdown`函数的,实际上并没有外部或者binder直接调用`smb5_shutdown`函数的过程。`smb5_shutdown`函数是在Linux内核中被调用的,而binder是用户空间与内核空间之间的通信接口,不会直接调用内核中的函数。当用户空间应用程序向内核空间发起请求时,内核会根据请求的类型调用相应的函数,其中就包括了驱动程序中的`.probe`、`.remove`和`.shutdown`等函数。
阅读全文