sysfs 文件系统
活动地址:CSDN21天学习挑战赛
文章目录
- 由来
- 特性
- 目录
- block
- bus
- class
- dev
- device
- firmware
- fs
- kernel
- module
- power
由来
sysfs 文件系统是 Linux 众多文件系统中的一个。在 Linux 系统中,每一个文件系统都有其特殊的用途,如 ext2 用于快速读写存储文件,ext3 用来记录日志文件。
Linux 设备驱动模型由大量的数据结构和算法组成。这些结构之间的关系非常复杂,多数结构之间通过指针互相关联,构成树型或者网状关系。显示这种关系的最好方法是利用一种树型的文件系统,但是这种文件系统需要具有其它文件系统没有的功能,例如显示内核中的一些关于设备、驱动和总线的信息。
为了达到这个目的,Linux 内核开发者创建了一种新的文件系统,这就是 sysfs 文件系统。
特性
sysfs 文件系统是 Linux 2.6 内核的一个新特性,它是一个只存在于内存中的文件系统。内核通过这个文件系统将信息导出到用户空间中。
sysfs 文件系统目录之间的关系非常复杂,各目录与文件之间既有树型关系,又有目录关系。在内核中,这种关系由设备驱动模型来表示。
在 sysfs 文件系统中产生的文件大多数是 ASCII 文件,通常每个文件有一个值,而且易于访问。
Linux 设备模型如同一栋规模宏大的建筑,为了构建它,除了基本的建筑材料(kobject、kset 等基础数据结构)外,尚需要一种机制,来向建筑外面的世界(用户空间程序)展示内部的构造,并且通过文件接口的方式实现与外界的沟通与互动。sysfs 文件系统就充当了这种角色。
透过 sysfs 文件系统可以取代 ioctl 的功能,如果想向一个设备文件发送 ioctl 命令的话,首先需要打开该设备文件,然后再通过 ioctl 函数向设备发出命令,很显然需要一个完整(虽然代码可能很简单)的应用程序来做这件事。现在有了 sysfs 文件系统,一个很简单的 shell 命令也许就可以完成前面所说的工作。
对于用户进程中的文件系统来说,sysfs 的标准挂载点是 /sys
目录,将 sysfs 文件系统挂载到用户进程的 /sys
目录的命令为 mount -t sysfs sysfs /sys
。如此,所有内核层面的对 sysfs 文件树的操作,都将一成不变地显示在用户空间的 /sys
目录下。
目录
sysfs 文件系统与其它文件系统一样,由目录、文件、链接组成。sysfs 文件系统只存在于内存中,动态的表示着内核的数据结构。
sysfs 文件系统挂接了一些子目录,这些目录代表了注册在 sysfs 中主要的子系统。
# ls /sys/
block bus class dev devices firmware fs kernel module power
block
block 目录包含了在系统中发现的每个块设备,每个块设备对应一个子目录。每个块设备的目录中有各种属性,描述了设备的各种信息。例如设备的名称、大小、设备号等。
# cat /sys/block/mmcblk1/device/name
8GTF4R
# cat /sys/block/mmcblk0/device/name
SD8GB
bus
bus 目录包含了在内核中注册而得到支持的每个物理总线的子目录,例如 ide、pci、scsi、usb、i2c、sdio 总线等。
# ls /sys/bus/
clockevents clocksource container cpu event_source hid i2c mdio_bus mmc platform rpmsg scsi sdio serio soc spi usb virtio workqueue
其中每个目录中的结构都大同小异。这里以 usb 目录为例,分析其目录结构关系。
# ls /sys/bus/usb/
devices drivers drivers_autoprobe drivers_probe uevent
usb 目录中包含了 devices 和 drivers 目录。devices 目录包含了 USB 总线下所有的设备,这些设备实际上是指向 devices 目录中相应设备的符号链接。
# ls /sys/bus/usb/devices/ -l
total 0
lrwxrwxrwx 1 root root 0 Aug 19 19:39 1-0:1.0 -> ../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Aug 19 19:39 1-1 -> ../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1
lrwxrwxrwx 1 root root 0 Aug 19 19:39 1-1:1.0 -> ../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1:1.0
lrwxrwxrwx 1 root root 0 Aug 19 19:39 usb1 -> ../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1
其中 1-0:1.0 和 1-1:1.0 是 USB 设备的名称,这些名称由 USB 协议规范来定义。链接的目的是为了构建 sysfs 文件系统的层次结构。
drivers 目录包含了 USB 总线下注册时所有驱动程序的目录。每个驱动目录中,有允许查看和操作设备参数的属性文件,和指向该设备所绑定的物理设备的符号链接。
# ls /sys/bus/usb/drivers/usb/ -lh
total 0
lrwxrwxrwx 1 root root 0 Aug 19 23:18 1-1 -> ../../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1
--w------- 1 root root 4.0K Aug 19 23:18 bind
--w------- 1 root root 4.0K Aug 19 23:18 uevent
--w------- 1 root root 4.0K Aug 19 23:18 unbind
lrwxrwxrwx 1 root root 0 Aug 19 23:18 usb1 -> ../../../../devices/platform/soc/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1
class
class 目录中的子目录表示每一个注册到内核中的设备类。例如固件类(firmware)、混杂设备类(misc)、图形类(graphics)、声音类(sound)、和输入类(input)等。
# ls /sys/class/
ata_device backlight dma gpio ieee80211 leds misc net ptp regulator scsi_device sound tty vc watchdog
ata_link bdi drm graphics input mdio_bus mmc_host power_supply pwm rfkill scsi_disk spi_master ubi video4linux
ata_port block firmware i2c-dev lcd mem mtd pps rc rtc scsi_host thermal udc vtconsole
dev
该目录下有很多以主设备号:次设备号(major:minor)
命名的文件,这些文件都链接到 /sys/devices 目录下对应的设备。
# ls /sys/dev/char/
10:130 10:237 10:61 1:11 13:64 1:8 207:16 252:0 254:0 4:10 4:14 4:18 4:21 4:25 4:29 4:32 4:36 4:4 4:43 4:47 4:50 4:54 4:58 4:61 4:8 5:2 7:129 89:0
10:183 10:58 10:62 116:33 13:65 189:0 207:18 252:1 29:0 4:11 4:15 4:19 4:22 4:26 4:3 4:33 4:37 4:40 4:44 4:48 4:51 4:55 4:59 4:62 4:9 7:0 7:130 89:1
10:229 10:59 10:63 1:3 1:5 189:1 226:0 253:0 4:0 4:12 4:16 4:2 4:23 4:27 4:30 4:34 4:38 4:41 4:45 4:49 4:52 4:56 4:6 4:63 5:0 7:1 7:2
10:235 10:60 1:1 13:63 1:7 1:9 251:0 253:1 4:1 4:13 4:17 4:20 4:24 4:28 4:31 4:35 4:39 4:42 4:46 4:5 4:53 4:57 4:60 4:7 5:1 7:128 81:0
# ls /sys/dev/block/
1:0 1:10 1:12 1:14 1:2 1:4 1:6 179:0 179:16 179:18 179:32 179:64 1:9 7:1 7:3 7:5 7:7
1:1 1:11 1:13 1:15 1:3 1:5 1:7 179:1 179:17 179:2 179:48 1:8 7:0 7:2 7:4 7:6
device
这是系统中所有设备存放的目录,也就是系统中所有设备在 sysfs 中的呈现、表达,也是 sysfs 管理设备的最重要的目录结构。
firmware
firmware 目录下有两个文件:devicetree 和 fdt。
fdt 是原始 dtb 文件,可以用 hexdump -C fdt 将其打印出来看,就会发现里面的数据和 dtb 文件时一致的。
devicetree 以目录结构呈现 dtb 文件。根节点对应 base 目录,每一个节点对应一个目录,每一个属性对应一个文件。
/proc/device-tree 指向 /sys/firmware/devicetree/base
fs
用于描述系统中的文件系统
kernel
存放内核所有可调整的参数
module
该目录下有系统中所有的模块信息,不论这些模块是静态编译进内核的还是动态加载到内核的。
power
系统中的电源选项,对正使用的 power 子系统的描述。这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机/重启等等。
sysfs 文件系统相关推荐
- Linux那些事儿之我是Sysfs(9)sysfs文件系统模型
最近Linus炮轰C++,"C++是一种糟糕的(horrible)语言.而且因为有大量不够标准的程序员在使用而使许多真正懂得底层问题,而不会折腾那些白痴'对象模型'".牛人就是牛气 ...
- Linux-2.6设备模型与sysfs文件系统
kobject对象: 它是设备模型的基本结构,对应于sysfs文件系统中的一个目录,它是一个结构体,不过在Linux中引入了面向对象的思想,从某些角度,也可以看成是一个类.kobject对象通常被嵌入 ...
- 认识 linux sysfs文件系统
先看一下相关资料的描述: 自2.6版本开始,linux内核开始使用sysfs文件系统,它的作用是将设备和驱动程序的信息导出到用户空间,方便了用户读取设备信息,同时支持修改和调整. 与ext系列和fat ...
- Linux 文件系统与设备文件系统 (二)—— sysfs 文件系统与Linux设备模型
提到 sysfs 文件系统 ,必须先需要了解的是Linux设备模型,什么是Linux设备模型呢? 一.Linux 设备模型 1.设备模型概述 从2.6版本开始,Linux开发团队便为内核建立起一个统一 ...
- 设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动
以下内容转载于微信公众号:嵌入式企鹅圈.如有侵权,请告知删除. 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动.平台设备驱动.设备驱动模型和sysfs等相关概念和技术. 对于初学者来说会非常 ...
- [中英对照]The sysfs Filesystem | sysfs文件系统
The sysfs Filesystem | sysfs文件系统 Abstract | 摘要 sysfs is a feature of the Linux 2.6 kernel that allow ...
- Linux设备模型——设备驱动模型和sysfs文件系统解读笔记
Linux设备模型--设备驱动模型和sysfs文件系统解读笔记 原文:https://blog.csdn.net/yj4231/article/details/7799245 将对Linux系统中的s ...
- 应用层操作gpio的3种方法之一:通过sysfs文件系统
通过sysfs方式访问gpio,在命令行界面进行操作. Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息.这里 ...
- SAM9X60 curiosity开发板,SYSFS文件系统控制板载三色Led
驱动位于\buildroot-external-microchip\build\linux-custom\drivers\leds 开发板使用sam9x60_curiosity 应用层控制外设的两种不 ...
- 【Linux】sysfs文件系统
[Linux]sysfs文件系统 前言 一.sysfs文件系统 1.1 sysfs系统是什么 1.2 sysfs的运行机制原理 二.sysfs中重要的结构体 2.1 kobject和kset之间的关系 ...
最新文章
- 微软回应Windows 7用户账号控制安全质疑 称将调整
- 顶级程序员的10条最佳实践
- C语言常见单链表面试题(2)
- c#扩展方法奇思妙用高级篇七:“树”通用遍历器
- Genymotion设置代理至BurpSuite和Charles
- scss-@extend
- 使用参数来防止SQL注入
- 别人在忙挖矿,京东架构师却悄悄用区块链搞了件大事
- 大学计算机基础书本里的毕业论文源稿,计算机基础毕业论文范文
- 可视化Python编译软件:GUI2Exe
- jBPM4.4之流程引擎对象ProcessEngine
- python创建文件对象的函数_Python学习笔记之—— File(文件) 对象常用函数
- IE8_XP安装包.zip
- PCB封装库命名规则
- TCP与UPD的比较
- 谷歌十年愚人节,「玩笑」背后是美好生活的企盼
- 24道互联网大厂最爱问智商题汇总|你能答对几道?(附带答案、详解)
- Python报错:‘unicodeescape‘ codec can‘t decode bytes in position 2-3: truncated \UXXXXXXXX escape
- html病毒DropFileName,王国平博客-HTML 感染 DropFileName = “svchost.exe” Ramnit 蠕虫病毒 查杀解决办法...
- VR全景城市,用720全景树立城市形象,打造3D可视化智慧城市