接上一篇,该节描述platform_driver.
1.定义platform_driver驱动gpio_led_driver
static struct platform_driver gpio_led_driver = {
.probe = gpio_led_probe,
.remove = __devexit_p(gpio_led_remove),
.driver = {
.name = "leds-gpio",
.owner = THIS_MODULE,
.of_match_table = of_gpio_leds_match,
},
};
以上代码定义了一个platform_driver
2.注册platform_driver驱动gpio_led_driver
static int __init gpio_led_init(void)
{
return platform_driver_register(&gpio_led_driver);
}
module_init(gpio_led_init);
module_init(gpio_led_init)宏展开后为:
static int (*__initcall_gpio_led_init6)(void) __used attribute((section(".initcall6.init"))) = gpio_led_init
platform_driver_register注册驱动,主要完成以下工作:
1).根据名字查找总线驱动列表,如果已经存在则返回
2).添加驱动到总线
a.创建/sys/bus/platform/drivers/name目录
b.搜寻总线的设备列表,如果和驱动匹配,则把设备添加到驱动的klist_devices列表
c.添加驱动到总线的驱动列表klist_drivers