1.sys文件系统
sysfs 是 Linux 内核中一种特殊虚拟文件系统,用来向用户空间提供内核设备和驱动程序的信息。它提供了一种统一的接口,用于查看和操作设备、驱动程序、文件系统等内核对象。sysfs 存放在内存中,挂载在 /sys 目录下,文件系统中的文件不对应硬盘上任何文件。

2. sys 文件系统使用
sysfs 在驱动中的作用通常包括:
- 设备信息显示 :将内核对象(设备、驱动、总线等)的属性以文件形式展示在
/sys目录下,例如设备状态、配置参数、硬件拓扑等。用户可通过cat或者echo命令直接读取/修改这些文件,无需编写专用工具。 - 动态设备管理:实时反映系统设备变化(如热插拔),目录结构随设备增删动态更新,支持设备分类。
- 驱动调试与配置:提供寄存器访问接口,允许直接读取/写入硬件寄存器。
3. 相关函数的接口
希望通过 sys 文件系统,自动创建设备节点。当设备驱动和设备类型成功匹配后,就会自动创建设备节点。

4. 通过 sys 文件系统加入调试节点
不需要通过编程,查看 sys 下的文件,就可以获得灯、蜂鸣器的状态信息,当然也是可以写入的。
- 先把设备类、设备创建好后。
- 调用
device_create_file函数,创建设备的属性。 - 用
_ATTR填充属性结构体:属性的名字(直接写字符串,不用引号)、读写权限、读函数、写函数。 - 填入函数指针:
show(读属性)、store(写属性)。建议ioremap、寄存器的设置都建议在init中完成,有可能插入模块后,就查看设备属性了。show的返回值需要返回输出字符串的长度;store的返回值要返回该函数形参的最后一个参数,否则会阻塞。 - 插入
insmod后,会生成多个属性文件。
2. misc 设备驱动
1. 设备类型概念
我们可以在 Linux 系统中通过 cat /proc/devices 查看系统中所有加载的驱动。
2. 混杂设备操作接口

简化字符设备驱动的编写,也会自动创建设备的节点,应用层的程序不需要变化,可以不需要原来的函数。
-
alloc_chrdev_region(自动获得设备号,注册设备号)、register_chrdev_region(注册固定设备号)。文件名后缀含义:
.dts文件:一种以 ASCII 文本格式的设备树描述。.dtsi文件:与 C 语言头文件类似,允许其他的 dts 文件包含此文件。DTC:将.dts编译为.dtb的工具。dtb文件:.dts被 DTC 编译后的二进制格式的设备树描述。
-
cdev_init、cdev_alloc():初始化或申请字符设备。 -
mknod(手动创建节点)、class_create、device_create(自动创建节点方式)。
3. 设备的查看
