
Linux设备模型
文章平均质量分 91
linux设备驱动模型
kobj/kset/ktype
uevent/netlink
sysfs
bus/device/device_driver
platform设备
-佩奇的爸爸
分享开发经验
展开
-
Linux设备模型(十一) - platform设备
在Linux2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个设备的时候,会寻找与之匹配的设备,而匹配由总线完成。一个现实的Linux设备和驱动通常都需要挂接在一种总线上,而对于本身依附于PCI、USB、I2C、SPI等的设备而言,这自然不是问题,但是在嵌入式系统里面,在SoC系统中集成的独立外设控制器、挂接在SoC内存空间的外设等却不依附于此类总线。基于这一背景,Linux。原创 2024-03-03 20:22:41 · 1584 阅读 · 0 评论 -
Linux设备模型(十) - bus/device/device_driver/class
在设备模型中,Bus、Device、Device driver等等,都比较好理解,因为它们对应了实实在在的东西,所有的逻辑都是围绕着这些实体展开的。而本文所要描述的Class就有些不同了,因为它是虚拟出来的,只是为了抽象设备的共性。举个例子,一些年龄相仿、需要获取的知识相似的人,聚在一起学习,就构成了一个班级(Class)。这个班级可以有自己的名称(如295),但如果离开构成它的学生(device),它就没有任何存在意义。另外,班级存在的最大意义是什么呢?是由老师讲授的每一个课程!原创 2024-03-03 19:26:15 · 1198 阅读 · 0 评论 -
Linux设备模型(九) - bus/device/device_driver/class
在Linux设备模型中,Bus(总线)是一类特殊的设备,它是连接处理器和其它设备之间的通道(channel)。当然实际中,同一总线下的设备有很多,驱动也有很多,在总线上管理着两个链表,分别管理着设备和驱动,当我们向系统注册一个驱动时,便会向驱动的管理链表插入我们的新驱动, 同样当我们向系统注册一个设备时,便会向设备的管理链表插入我们的新设备。在插入的同时总线会执行一个匹配方法对新插入的设备/驱动进行匹配,在匹配成功的时候会调用驱动中的初始化方法,在移除设备或驱动时会调用注销方法。那有没有合适的解决方案呢?原创 2024-03-03 18:39:25 · 768 阅读 · 0 评论 -
Linux设备模型(八) - sysfs
sysfs是一个基于内存的虚拟的文件系统,有kernel提供,挂载到/sys目录下,负责以设备树的形式向user space提供直观的设备和驱动信息。sysfs以不同的视角展示当前系统接入的设备:/sys/block 历史遗留问题,存放块设备,提供一设备名(如sda)到/sys/devices的符号链接;/sys/bus 按总线类型分类,在某个总线目录之下可以找到链接该总线的设备的符号链接,指向/sys/devices. 某个总线目录之下的drivers目录包含了该总线所需的所有驱动的符号链接。原创 2024-03-01 17:53:56 · 1731 阅读 · 0 评论 -
Linux设备模型(七) - Netlink
Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。Netlink 是一种特殊的 socket,它是 Linux 所特有的。Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink。原创 2024-02-29 20:44:48 · 1474 阅读 · 0 评论 -
Linux设备模型(六) - Android ueventd浅析
在linux2.6之后,udev取代了devfs,但是在android中却没有udev或者mdev[1],而是由ueventd进程实现了类似功能(管理设备节点权限、创建设备节点)。原创 2024-02-26 22:05:55 · 1884 阅读 · 0 评论 -
Linux设备模型(五) - uevent kernel实现
由此可知,Uevent的机制是比较简单的,设备模型中任何设备有事件需要上报时,会触发Uevent提供的接口。该机制通常是用来支持热拔插设备的,例如U盘插入后,USB相关的驱动软件会动态创建用于表示该U盘的device结构(相应的也包括其中的kobject),并告知用户空间程序,为该U盘动态的创建/dev/目录下的设备节点,更进一步,可以通知其它的应用程序,将该U盘设备mount到系统中,从而动态的支持该设备。用户空间程序收到这样的事件后,会做相应的处理。环境变量的作用是为执行用户空间程序指定运行环境。原创 2024-02-26 21:49:14 · 1476 阅读 · 0 评论 -
Linux设备模型(四) - uevent应用:内核发送uevent,用户空间接收uevent
kobject_uevent默认会发送”ACTION=xxx”,”DEVPATH=xxx”,”SUBSYSTEM=xxx”这三个uevent环境变量。内核发送uevent的API由lib/kobject_event.c文件实现,include/linux/kobject.h是头文件。在driver中可以调用kobject_uevent或者kobject_uevent_env来向用户空间发送uevent。kobject_uevent_env可以发送一些如”xxx=xxx”的自定义的uevent环境变量。原创 2024-02-26 21:37:49 · 2055 阅读 · 0 评论 -
Linux设备模型(三) - kset/kobj/ktype使用示例
【代码】Linux设备模型(三) - kset/kobj/ktype使用示例。原创 2024-02-26 21:34:50 · 503 阅读 · 0 评论 -
Linux设备模型(二) - kset/kobj/ktype APIs
Kobject的核心功能是:保持一个引用计数,当该计数减为0时,自动释放(由本文所讲的kobject模块负责) Kobject所占用的meomry空间。这就决定了Kobject必须是动态分配的(只有这样才能动态释放)。而Kobject大多数的使用场景,是内嵌在大型的数据结构中(如Kset、device_driver等),因此这些大型的数据结构,也必须是动态分配、动态释放的。那么释放的时机是什么呢?是内嵌的Kobject释放时。原创 2024-02-23 22:03:18 · 1231 阅读 · 3 评论 -
Linux设备模型(一) - kset/kobj/ktype结构体之间的关系
kset/kobj/ktype转载 2024-02-23 21:37:32 · 236 阅读 · 0 评论