linux 2.6设备驱动模型中,关心总线、设备、驱动这三个实体,总线将设备和驱动绑定。上面我们向内核添加了设备,下面我们来看是如何添加驱动及驱动是如何和设备绑定的。
我们来看 samsung-keypad.c samsung_keypad_init中注册了平台设备驱动 samsung_keypad_driver
static int __init samsung_keypad_init(void)
{
return platform_driver_register(&samsung_keypad_driver);
}
module_init(samsung_keypad_init);
samsung_keypad_driver定义如下,
static struct platform_driver samsung_keypad_driver = {
.probe = samsung_keypad_probe,
.remove = __devexit_p(samsung_keypad_remove),
.driver = {
.name = "samsung-keypad",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &samsung_keypad_pm_ops,
#endif
},
.id_table = samsung_keypad_driver_ids,
};
其中 .name = "samsung-keypad",必须和设备
struct platform_device samsung_device_keypad = {
.name = "samsung-keypad",
一致,这是为什么呢? 估计是 platform_driver_register 注册时查找与之匹配的设备时用到,
/**
* platform_driver_register - register a driver for platform-level devices
* @drv: platform driver structure
*/
int platform_driver_register(struct platform_driver *drv)
{
drv->driver.bus = &platform_bus_type;
if (drv->probe)
drv->driver.probe = platform_drv_probe;
if (drv->remove)
drv->driver.remove = platform_drv_remove;
if (drv->shutdown)
drv->driver.shutdown = platform_drv_shutdown;
return driver_register(&drv->driver);
}
mini6410 矩阵键盘接口驱动移植(2)
内容版权声明:除非注明,否则皆为本站原创文章。