《深入理解Linux驱动程序设计》 02

本文介绍Linux内核中的设备管理方式,包括devfs、sysfs和udev设备文件系统的特点和作用。重点讲解了sysfs如何组织设备信息,并通过sysfs实现设备热插拔功能。同时介绍了kobject、ktype和kset等核心数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第2章 Linux内核设备管理方式

2.1 devfs设备文件系统

2.2 sysfs文件系统

sysfs虚拟文件系统将系统中的设备组织成层次结构,可解决智能电源管理和设备分类的需求。它向用户模式程序提供详细的内核数据结构信息,提供接口给用户空间对驱动和设备进行配置,实现与用户空间的通信,用户甚至可以通过echo、cat 等命令来直接操作设备的属性文件。
sysfs挂载于/sys目录下。sys目录情况如下所示:
在这里插入图片描述
sys目录下的文件反映了整个系统的情况。真正的设备信息放在devices下,classes和bus下的设备对应的是devices目录下设备文件的符号链接。

2.3 udev设备文件系统

用户空间的udev利用sysfs提供的信息实现所有devfs(运行在内核空间)的功能,udev能够根据系统中设备的状况动态更新设备文件,不看创建,删除设备文件等等。udev结合sysfs才能实现设备的热插拔功能。
udev中,namedev为设备命名子系统,为发现的设备提供默认命名规则,libsysfs是访问sysfs文件系统并从中获取设备信息的标准接口,udev是两者的桥梁,利用获取的信息完成设备节点文件的动态创建和删除。

在这里插入图片描述

2.4 主要数据结构

2.4.1 kobject

kobject主要包括对象引用计数、维护对象链表、对象上锁和在用户空间的表示4种功能。在用户空间的表示,主要是通过sysfs实现,每个在内核注册的kobject对象对应于sysfs文件系统中的一个目录,这些功能主要通过它对应结构体所包含的对象来完成。
kobject定义于文件linux/kobject.h中,结构体定义如下:
在这里插入图片描述
主要函数有:
在这里插入图片描述

2.4.2 ktype

kobj_type是指具有相同操作的kobject集合,它负责管理这一类kobject在sysfs下的操作。主要是实现show和store。此结构体定义在include/linux/kobject.h
定义如下:
在这里插入图片描述

2.4.3 kset

kset是kobject的集合。kset中的kobject可以拥有相同的ktype,也可以各自属于自己的ktype。kset最重要的是建立上层和下层的关联性。

kset数据结构
在这里插入图片描述
主要函数:
在这里插入图片描述

2.4.4 三者关系

2.5 热插拔设备管理机制

2.5.1 热插拔事件流程
2.5.2 涉及的模块

热插拔事件中主要涉及3个模块hotplug .netlink及udev。
netlink是Linux特有的socket。系统常使用netlink进行内核与用户之间的进行双向数据传输,用户态使用标准的socket API,内核态需使用专门的内核API。netlink是一种异步通信机制,消息保存在socket缓存队列中,netlink的内核部分可以使用模块实现。

2.5.3 关键驱动函数

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值