http://www.wowotech.net/device_model/13.html 1.2 Linux设备模型(2)_Kobject 由“Linux设备模型(1)_基本概念”可知,Linux设备模型的核心是使用Bus、Class、Device、Driver四个核心数据结构,将大量的、不同功能的硬件设备(以及驱动该硬件设备的方法),以树状结构的形式,进
设备设备对象在driver-model中使用struct device_driver来表示。 下列代码位于include/linux/device.h。 struct device_driver { const char *name; struct bus_type *bus; struct module *owner; const char *mod_name; /* used for built-in modules */ int (*probe) (struct device *dev); int (*remove...
本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver-model的,通过本文,也会对platform机制有个简单的了解。 内核版本:2.6.30 1. What is sy...
本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver-model的,通过本文,也会对platform机制有个简单的了解。 1. What is sysfs? 个人理解:sys...
它导致Linux内核非常臃肿、杂乱、不易维护。为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作driver Model)的概念。 设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和接口。驱动的开发,就简化为对内核基本数据结构的填充和实现。本文将会从...
本文将对Linux系统中的sysfs进行简单的分析,要分析sysfs就必须分析内核的driver-model(驱动模型),两者是紧密联系的。在分析过程中,本文将以platform总线和spi主控制器的platform驱动为例来进行讲解。其实,platform机制是基于driver-model的,通过本文,也会对platform机制有个简单的了解。
intbus_add_driver(struct device_driver*drv){struct bus_type*bus;struct driver_private*priv;int error=0;bus=bus_get(drv->bus);if(!bus)return-EINVAL;pr_debug("bus: '%s': add driver %s\n",bus->name,drv->name);priv=kzalloc(sizeof(*priv),GFP_KERNEL);//申请driver_private内存if(!priv...
需要注意的是对于compatible属性和model属性,官方给出的命名参考都是"厂商名,产品名" 2.5.4 status 用于指定设备的状态。有如下取值 可以结合status属性和节点引用实现对硬件资源的裁剪。 2.5.5 reg 表示寄存器地址,是一系列的“地址 长度“对。长度由其父节点的#address-cells和#size-cells决定。
从上面可知 platform 总线下的设备和驱动是通过名字进行匹配的,先去匹配 platform_driver 中的 id_table 表中的各个名字与 platform_device->name 名字是否相同,如果相同则匹配。 设备驱动模型的改善 相信通过上面的学习,相信对于设备、驱动通过总线来匹配的模型已经有所了解。如果写代码的话应该是下面结构图所示: ...
/* fall-back to driver name match */ return (strcmp(pdev->name, drv->name) == 0); } 从上面可知 platform 总线下的设备和驱动是通过名字进行匹配的,先去匹配 platform_driver 中的 id_table 表中的各个名字与 platform_device->name 名字是否相同,如果相同则匹配。