linux内核中platform_driver里的shut_down成员什么时候调用
时间: 2023-11-14 22:06:40 浏览: 60
`shut_down`是`platform_driver`结构体中的一个函数指针,用于在从系统中卸载该驱动时执行一些清理操作。当驱动程序被卸载时,内核会调用`shut_down`函数。
具体来说,在从系统中卸载该驱动时,内核会调用`platform_driver_unregister`函数,该函数会调用`probe`函数中注册的`platform_device`的`remove`函数。而`remove`函数则会调用`platform_driver`结构体中的`remove`函数指针,该函数指针默认指向`platform_drv_remove`函数。在`platform_drv_remove`函数中,会检查`platform_driver`结构体中的`shut_down`函数指针是否为空,如果不为空,则会调用`shut_down`函数。
因此,`shut_down`函数会在从系统中卸载该驱动时调用。
相关问题
module_platform_driver 什么时候调用
module_platform_driver 函数是针对平台设备的驱动程序模块的入口函数,可以在模块初始化时调用。当模块被加载时,内核将自动调用该函数,初始化平台驱动程序并将其注册到内核平台设备框架中。在注册完成后,内核可以通过 platform_device_register() 函数向平台设备框架中添加新的平台设备。当平台设备被添加时,内核将自动调用平台驱动程序的 probe() 函数进行设备初始化。因此,module_platform_driver 函数通常在模块的初始化函数中被调用。
内核宏定义module_platform_driver展开
module_platform_driver 是一个宏定义,它主要用于注册一个平台驱动。具体来说,它会创建一个特殊的字符设备,并在内核中注册一个平台驱动程序。这个宏定义的展开大致如下:
```
#define module_platform_driver(__platform_driver) \
static int __init __platform_driver##_init(void) \
{ \
return platform_driver_register(&(__platform_driver)); \
} \
module_init(__platform_driver##_init); \
static void __exit __platform_driver##_exit(void) \
{ \
platform_driver_unregister(&(__platform_driver)); \
} \
module_exit(__platform_driver##_exit);
```
这个宏定义在内核中用来简化注册平台驱动的过程,常见的用法如下:
```
static struct platform_driver my_driver = {
.probe = my_probe,
.remove = my_remove,
.driver = {
.name = "my_driver",
.of_match_table = of_match_ptr(my_of_match),
},
};
module_platform_driver(my_driver);
```
在这段代码中,我们定义了一个平台驱动 my_driver,然后使用 module_platform_driver 宏定义注册了这个平台驱动。