LV12-01-sysfs
摘要:
这篇笔记主要关于sysfs
相关笔记。若笔记中有错误或者不合适的地方,欢迎批评指正😃。
【说明】
(1)使用的工具及版本如下:
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
Linux开发板 | 华清远见 底板: FS4412_DEV_V5 核心板: FS4412 V2 |
u-boot | 2013.01 |
linux内核 | linux-3.14 |
(2)下边命令中有fs4412 #
的是在Linux
开发板使用的SecureCRT
终端输入的命令,没有任何标识的是在ubuntu
中执行。
(3)本篇使用的linux
源码是已经移植过的源码。
点击查看本文更新记录
创建笔记。
点击查看本文参考资料
参考方向 | 参考原文 |
驱动开发指南 | i.MX6ULL Linux阿尔法开发板资料 |
华清远见课程 | 华清远见课程 |
驱动学习笔记 | [Linux][驱动学习笔记]--sysfs_胡萝卜1号的博客-CSDN博客_sysfs |
sysfs文件 | 一篇文章让你对sysfs文件及属性了解透彻【Linux内核】 - 知乎 (zhihu.com) |
点击查看所需文件及下载地址
文件 | 下载链接 |
暂无 | 暂无 |
1.sysfs
是什么?
sysfs
是 Linux
内核中设计较新的一种虚拟的基于内存的文件系统,sysfs
最初被称为ddfs
(设备驱动文件系统),它的产生是为了调试正在开发过程中的新的驱动模型。它在Linux2.6
内核被引入。
sysfs
的作用是将注册进系统中的设备、总线和驱动组织成一个个分级的文件,并直观地将驱动和设备的层次结构以文件的形式展示在用户空间(类似于windows
的设备管理器),通过操作这些文件,系统向用户空间导出内核数据结构以及他们的属性,这样一来用户空间可以通过修改sysfs
的文件属性来修改设备的属性值,进而改变设备的工作状态。比如通过sysfs
文件系统可以直接向指定的gpio
引脚输入和输出高低电平。
sysfs在内核中的组成要素 | 在用户空间/sys下的显示 |
---|---|
内核对象(kobject) | 目录 |
对象属性(attribute) | 文件 |
对象关系(relationship) | 链接(Symbolic Link) |
2.sysfs
的挂载
sysfs
像其它基于内存的文件系统一样可以从用户空间挂载:
1 | mount -t sysfs sysfs /sys |
sysfs
还能够在启动时用/etc/fstab
文件来自动挂载。大多数支持2.6
内核的发行版都在 /etc/fstab
有sysfs
行:
1 | sysfs /sys sysfs noauto 0 0 |
【注意】一般来讲,sysfs
被挂载的目录总是在/sys
。
3.四个基本结构
类型 | 所包含的内容 | 内核数据结构 | 对应/sys项 |
---|---|---|---|
设备(Devices) | 设备是此模型中最基本的类型,以设备本身的连接按层次组织 | struct device | /sys/devices/?/?/…/ |
驱动(Drivers) | 在一个系统中安装多个相同设备,只需要一份驱动程序的支持 | struct device_driver | /sys/bus/pci/drivers/?/ |
总线(Bus) | 在整个总线级别对此总线上连接的所有设备进行管理 | struct bus_type | /sys/bus/?/ |
类别(Classes) | 这是按照功能进行分类组织的设备层次树;如 USB 接口和 PS/2 接口的鼠标都是输入设备,都会出现在/sys/class/input/下 | struct class | /sys/class/?/ |
4./sys
目录结构
/sys目录 | 所包含的内容 |
---|---|
/sys/block | 存放块设备,提供以设备名(如sda)到/sys/devices的符号链接。 |
/sys/bus | 这是内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分。 |
/sys/class | 这是按照设备功能分类的设备模型,如系统所有输入设备都会出现在/sys/class/input 之下,而不论它们是以何种总线连接到系统。它也是构成 Linux 统一设备模型的一部分; |
/sys/dev | 这个目录下维护一个按字符设备和块设备的主次号码(major:minor)链接到真实的设备(/sys/devices下)的符号链接文件。 |
/sys/devices | 这是内核对系统中所有设备的分层次表达模型,也是/sys文件系统管理设备的最重要的目录结构。 |
/sys/firmware | 该目录下包含对固件对象(firmware object)和属性进行操作和观察的接口,即这里是系统加载固件机制的对用户空间的接口。(关于固件有专用于固件加载的一套API) |
/sys/fs | 按照设计,该目录使用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。 |
/sys/kernel | 这里是内核所有可调整参数的位置,目前只有 uevent_helper, kexec_loaded, mm, 和新式的slab 分配器等几项较新的设计在使用它,其它内核可调整参数仍然位于sysctl(/proc/sys/kernel) 接口中。 |
/sys/module | 这里有系统中所有模块的信息,不论这些模块是以内联(inlined)方式编译到内核映像文件(vmlinuz)中还是编译为外部模块(ko文件),都可能会出现在/sys/module 中。 |
/sys/power | 这里是系统中电源选项,这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机、重启等。 |