在內核中,對於platform的註冊有了很大變化,之前的platfrom_device全部歸於到了device tree,同時註冊的platform_driver的過程也不再需要原來的函數,而是統一用module_platform_driver,而其實它的內部還是用到了之前的函數,只是這裏統一用一個宏來表示,它的定義在是include/linux/platfrom_device.h下,如下:
#define module_platform_driver(__platform_driver) \
module_driver(__platform_driver, platform_driver_register, \
platform_driver_unregister)
#define module_driver(__driver, __register, __unregister, ...) \
static int __init __driver##_init(void) \
{ \
return __register(&(__driver) , ##__VA_ARGS__); \
} \
module_init(__driver##_init); \
static void __exit __driver##_exit(void) \
{ \
__unregister(&(__driver) , ##__VA_ARGS__); \
} \
module_exit(__driver##_exit);
從代碼看,就是把之前的module_init和module_exit全部用一個宏來代替,所以在我們的driver文件的remove函數中,就不用調用platform_driver_unregister,當然,你如果調也不會有問題。