static struct platform_driver xx_driver = {
.driver = {
.name = "xxx",
.owner = THIS_MODULE,
.pm = &xxx_drv_pm_ops,
},
.probe = xxx_probe,
.remove = __devexit_p(xxx_drv_remove),
};
其中,.remove一般都是直接等于函数名,如.remove = xxx_drv_remove,内核驱动中很多也用如上的形式。
__devexit_p定义如下:
#if defined(MODULE) || defined(CONFIG_HOTPLUG)
#define __devexit_p(x) x
#else
#define __devexit_p(x) NULL
#endif
那么
.remove = __devexit_p(xxx_drv_remove),
就等价于:
#if defined(MODULE) || defined(CONFIG_HOTPLUG)
.remove = xxx_drv_remove,
#else
.remove = NULL,
#endif
总结:__devexit_p的作用其实相当于加了一个开关,当符合条件时,才会在remove时执行xxx_drv_remove函数,否则是空。