输入子系统设备名称匹配过程以及probe的调用
来源:互联网 发布:淘宝买美素佳儿靠谱吗 编辑:程序博客网 时间:2024/05/21 09:32
一:
static int __init gpio_keys_init(void)
{ /* 总线-设备-驱动 模型 :向上注册一个设备模型【纯软件方面】 */
return platform_driver_register(&gpio_keys_device_driver);
}
//入口函数里面对平台设备进行注册,平台设备内容为下面这个结构体
struct platform_driver gpio_keys_device_driver = {
.probe = gpio_keys_probe,
.remove = __devexit_p(gpio_keys_remove),
.driver = { .name = "gpio-keys", }
};
二:
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;
if (drv->suspend)
drv->driver.suspend = platform_drv_suspend;
if (drv->resume)
drv->driver.resume = platform_drv_resume;
return driver_register(&drv->driver);
}
三:
struct bus_type platform_bus_type = {
.name = "platform",
.dev_attrs = platform_dev_attrs,
.match = platform_match,
.uevent = platform_uevent,
.suspend = platform_suspend,
.suspend_late = platform_suspend_late,
.resume_early = platform_resume_early,
.resume = platform_resume,
};
static int platform_match(struct device * dev, struct device_driver * drv)
{
struct platform_device *pdev = container_of(dev, struct platform_device, dev);
return (strncmp(pdev->name, drv->name, BUS_ID_SIZE) == 0);
}//通过对名称进行比较判断device.name是否与drv.name相同
注释:
在这里struct platform_device定义为:
struct platform_device {
const char * name;
u32 id;
struct device dev;
u32 num_resources;
struct resource * resource;
};
注意,在这个结构体里面包含了一个叫device的结构体,可以将struct platform_device称为父结构体,将struct device称为子结构体。
在上述函数中,传递进来的dev指针将指向platform_device这个父结构体中的dev成员,而contianer_of这个宏的作用则在于通过这个结构体成员的指针获得其父结构体的指针,在这里就是platform_device这一结构体的指针。
四:
通过比较后如果匹配就会调用gpio_keys_probe函数进行下一步的操作。操作内容自定。
- 输入子系统设备名称匹配过程以及probe的调用
- platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
- platform_driver_register,什么时候调用PROBE函数 注册后如何找到驱动匹配的设备
- 输入子系统 input_match_device 匹配过程剖析
- 设备驱动以及probe的思考
- pci设备probe函数的调用时机
- usb设备probe过程
- linux-i2c驱动 之 i2c设备层的注册过程probe函数如何被调用分析
- probe调用过程
- 设备驱动的probe、remove以及shutdown的顺序
- 输入子系统匹配过程之list_for_each_entry()函数分析
- platform设备和驱动注册调用probe的流程
- 怎么让添加的混杂设备自动调用probe函数
- Linux设备驱动子系统的构建过程
- Linux Device和Driver注册过程,以及Probe的时机
- Linux Device和Driver注册过程,以及Probe的时机。
- Linux Device和Driver注册过程,以及Probe的时机
- Linux Device和Driver注册过程,以及Probe的时机
- 初始化块
- 这是一个标题
- 将子窗口最小化后在任务栏显示
- 网络扫描技术揭秘读书笔记2--嵌入外部程序
- 【转换流】让字符流干点字节流的事
- 输入子系统设备名称匹配过程以及probe的调用
- 数据结构-队列-链式存储完整可执行代码
- linux下读写u-boot环境变量
- RegQueryInfoKey的问题
- Same Tree
- C++ 友元函数 友元类
- JDBC添加、删除、修改、查询
- 前端开发第一日
- 二叉树 递归 与 非递归 遍历