前言
在Linux系统中,绝大多数硬件设备都有一套非常成熟的驱动框架了,驱动工程师可以使用这些驱动框架来实现板子相关的硬件支持,建立硬件与Linux内核的联系,内核再通过统一文件系统接口呈现给用户,用户则通过对应的设备文件控制硬件
- 统一文件系统接口在/sys/class下面
- 设备文件如何与硬件相关联?
-
设备文件相当于设备驱动层的函数参数一样,当每次对设备文件进行读写操作时都会触发驱动代码执行。
每次对设备文件进行写入操作时,会触发驱动代码以这次写入设备文件的内容作为参数去修改设置相应的硬件设备
每次对设备文件进行读操作时,则会触发驱动代码把当前硬件设备的参数更新到设备文件
-
LED子系统驱动框架
对于LED设备,Linux提供了LED子系统驱动框架,用户层通过sysfs文件系统(sysfs通常会自动挂载在根目录下的sys文件夹)对LED进行控制,主要控制LED不同的亮度以及触发方式
在Linux内核源码中的“Documentation/leds/leds-class.txt”有相关的描述
GPIO子系统驱动框架
与LED子系统类似,Linux提供了GPIO子系统驱动框架,使用该驱动框架把CPU的GPIO引脚导出到用户空间,用户通过访问/sys文件系统进行控制;GPIO子系统支持把引脚用于基本的输入输出功能,其中输入功能还支持中断检测。
在Linux内核源码的“Documentation/gpio”目录可找 到关于GPIO子系统的说明。
input子系统
input子系统是Linux对输入设备提供的统一驱动框架。如按键、键盘、触摸屏和鼠标等输入设备的驱动方式类似,当出现按键、触摸等操作时,硬件产生中断,然后CPU直接读取电平 或 通过SPI、I2C等通讯方式从设备的寄存器读取具体的按键值或触摸坐标,然后把这些信息交给内核。使用input子系统驱动的输入设备可以通过统一的数据结构(该数据结构包括输入的时间、类型、代号以及具体的键值或坐标)提交给内核,而内核则通过/dev/input目录下的文件接口传递给用户空间。
在Linux内核源码的“Documentation/input”目录包含了input子系统相关的说明。
tty串口通讯子系统驱动框架
tty是Linux对串口通讯提供的统一驱动框架,用于通过串口与其他终端通讯,并且提供/dev/tty* 设备文件 到用户空间,用户通过设备文件进行串口通信
-
操作设备文件
获取串口接收信息:cat /dev/tty* 用串口发送信息hello:echo hello > /dev/tty*