Sysfs文件系统在嵌入式开发中的应用

2018-05-14 09:06刘江
丝路视野 2018年9期
关键词:嵌入式

刘江

【摘要】在嵌入式开发中我们有时需要在用户层控制内核及其驱动的一些功能。传统的方法是通过ioctl系统调用实现。而Sysfs为我们提供了一种更为方便的通过读写文件的方法。大大方便了嵌入式开发。

【关键词】嵌入式;内核驱动;Sysfs文件系统

Sysfs是一个向用户空间导出内核数据结构,对象和性质的文件系统,它不仅提供了察看内核内部数据结构的能力,还可以修改这些数据结构。Sysfs已经成为老式的IOCTL机制的一种替代品。向内核发送神秘的ioctl通常需要一个C程序。与之相比,从/向Sysfs文件读/写一个值要简单的多。一个简单的shell命令就足够了。

一、建立属性文件

Sysfs是用于表现设备驱动模型的文件系统,它基于ramfs。要使用Sysfs就需要了解Sysfs提供给外界的API。Sysfs文件系统中提供了四类文件的创建与管理,分别是目录、普通文件、软链接文件、二进制文件。目录层次往往代表着设备驱动模型的结构,软链接文件则代表着不同部分间的关系。比如某个设备的目录只出现在/sys/devices下,其他地方涉及到它时只好用软链接文件链接过去,保持了设备唯一的实例。而普通文件和二进制文件往往代表了设备的属性,读写这些文件需要调用相应的属性读写。

我们可以使用DEVICE_ATTR函数宏来建立一个属性文件。函数宏DEVICE_ATTR原型是DRIVER_ATTR(_name,_mode,_show,_store)。函数宏DEVICE_ATTR内封装的是__ATTR(_name,_mode,_show,_stroe)方法。_show:表示的是读方法,_stroe表示的是写方法。通过以下实例我们可以在Sysfs文件系统中建立一个dev_attr_watchdog的属性文件。其中wd_show和wd_store分别为读写方法。

staticDEVICE_ATTR(watchdog,S_IRUGO|S_IWUSR,wd_show,wd_store);

将_mode设置为S_IRUGO|S_IWUSR使创建的属性文件为可读可写。在驱动的初始化函数中需要调用device_create_file来使属性文件与驱动设备文件关联。函数原型为intdevice_create_file(structdevicedev,conststructdevice_attributeattr);

二、属性的读写

注意到它和虚拟字符设备或proc项的read/write的作用很类似,但有一点不同是show/store函数上的buf/count参数是在Sysfs层已作了用户区/内核区的内存复制,虚拟字符设备上常见的__user属性在这里并不需要,因而也不需要多一次copy_from_user/copy_to_user,在show/store函数参数上的buf/count参数已经是内核区的地址,可以直接操作。

使用show和store方法时的注意事项:

(1)緩冲区的大小应总是为PAGE_SIZE个字节。多数情况下PAGE_SIZE=4096。

(2)show方法应该返回放入缓冲区的字节数。

(3)store方法应该返回实际使用的字节数。

(4)show和/或者store方法可能会出错,所以当失败时,记得返回错误值。

三、用户层操作方法

建立属性文件后Sysfs会在相应的目录创建文件,通过读写此文件我们就可以直接向驱动层发送和读取数据。例如上面DEVICE_ATTR调用会创建/sys/devices/platform/omap/omap_wdt/watchdog文件,此文件就是看门狗驱动在Sysfs中的属性文件。当需要查看看门狗参数时可以使用cat命令读取watchdog文件实现。修改看门狗参数时可以使用echo命令向watchdog文件写入内容实现。

属性文件的创建使用户层通过驱动控制硬件的方式更加方便,只需使用系统自带的cat和echo命令就能实现对硬件的控制,极大地方便了嵌入式开发。

四、结语

Sysfs给应用程序提供了统一访问设备的接口。通过这一接口我们可以使用shell脚本在用户层实现对内核及其驱动的控制。这一功能极大的方便了嵌入式应用的开发。但是目前Sysfs仅仅是提供了一个可以统一访问设备的框架,但究竟是否支持Sysfs还需要各设备驱动程序的编程支持。但由于Sysfs强大的功能和用户空间友好的特性,越来越多的子系统、设备驱动程序逐渐转向Sysfs。

参考文献

[1]WolfgangMauerer深入Linux内核架构[M].北京:人民邮电出版社,2010.

[2]JonathanCorber,AlessandroRubini&GregKroan-hartman Linux设备驱动程序[M].北京:中国电力出版社,2005.

猜你喜欢
嵌入式
慕课嵌入式翻转课堂在双语教学中的应用研究
嵌入式系统技术及其应用
嵌入式计算机技术及其应用研究
JG/T136—2016单层网壳嵌入式毂节点
嵌入式LINUX操作系统的研究
嵌入式的特点及发展机遇
嵌入式组件技术的研究及应用
基于嵌入式系统的游戏程序设计
“嵌入式系统概论”课程设计
AItera推出Nios II系列软核处理器