站长平台验证网站,wordpress着陆页,世界工厂采购网登录,建设网站详细流程加油加油坚持住#xff01;
1、
Linux驱动模型#xff1a;驱动模型即将各模型中共有的部分抽象成C结构体。Linux2.4版本前无驱动模型的概念#xff0c;每个驱动写的代码因人而异#xff0c;随后为规范书写方式#xff0c;发明了驱动模型#xff0c;即提取公共信息组成一…加油加油坚持住
1、
Linux驱动模型驱动模型即将各模型中共有的部分抽象成C结构体。Linux2.4版本前无驱动模型的概念每个驱动写的代码因人而异随后为规范书写方式发明了驱动模型即提取公共信息组成一个个类为添加设备和驱动提供统一的接口使得开发变得简单化、规范化但驱动本身仍然存在开发难度设备触摸屏、蓝牙等的最底层代码不需要驱动工程师搞Linux设备模型也不需要驱动工程师搞驱动工程师需要做的是把二者结合。早期的驱动是需要手动inmod的有驱动模型后直接注册即可。
驱动模型分为四类类、总线、设备、驱动、Kobject、sysfs、udev。
深入理解Linux设备模型与驱动开发-CSDN博客 (五星推荐)
比如led,rtc,beep,key这类结构简单的设备它们的控制不需要时序它们没有相应的物理总线。所以linux内核不会为它们创建驱动总线。为了是这部分设备的驱动开发也能够遵循设备驱动模型linux内核引入了一种虚拟的总线——平台总线platform bus。
2、Linux的底层模型主要是写内核的人写的搞驱动的一般不用
基本结构体Kobject各类对象的最小单元对象引用计数kref、维护对象链表entry、parent、对象上锁kset、对用户空间的描述ktype。
kobj_type提供在sysfs下的操作。attributesysfs下的属性sysfs_ops对象在sysfs下的操作方法。
kset描述sysfs下的目录关系。
驱动开发注意包含和引用的关系包含是结构体成员绑定是指针。如
struct kobject {const char *name;struct list_head entry; // 上下节点 包含关系struct kobject *parent; // 上下层之间 绑定关系struct kset *kset; // 上锁 绑定关系struct kobj_type *ktype;struct sysfs_dirent *sd;struct kref kref; // 对象引用计数unsigned int state_initialized:1;unsigned int state_in_sysfs:1;unsigned int state_add_uevent_sent:1;unsigned int state_remove_uevent_sent:1;unsigned int uevent_suppress:1;
};3、Linux的上层模型
device_driver是驱动程序在内核驱动框架中的抽象。
name驱动程序的名字用于驱动与对应设备的匹配。
probe用于检测此设备是否可以用本驱动毕竟不同厂家的设备对应的驱动是不同的。
内核中驱动会被类和总线双重管理。
模型思想即面向对象的思想结构体包一层结构体即类继承类有一个基类device_driver然后创建子类usb_device。驱动开发要有思想复杂度一层套一层。