一、为什么要了解 device 在 sysfs 的位置?
学习驱动开发时,经常需要定位 “ 我的设备 ” 在 sysfs(/sys)目录树中的具体位置。 理解 device 的映射关系,有助于你:
- 观察你注册或即将调试的设备具体出现在哪里;
- 理解设备的组织、父子关系和物理/逻辑分类;
- 熟练查阅和操作各种设备属性文件。
二、设备在sysfs的主要映射入口
Linux 设备模型会自动为每个 device(设备)生成专属的 sysfs 目录和属性,主要出现在以下路径:
/sys/devices/映射真实的设备拓扑结构(树形结构,表现物理或虚拟连接关系)。
/sys/class/按功能类别划分的逻辑设备目录,比如
net(网络设备)、block(块设备)、leds(LED 灯)、input(输入设备)等等。/sys/bus/<bus-name>/devices/按所属总线分组的设备清单。例如 platform 总线下的所有设备会在
/sys/bus/platform/devices/中列出。/sys/bus/<bus-name>/drivers/按所属总线分组的已注册驱动程序。
三、实战举例说明
1、真实拓扑结构
Linux 把所有的设备按照物理或虚拟“母线关系”层层组织在
/sys/devices/树下。例如:bash/sys/devices/ platform/ soc/ 1c28000.i2c/ 1c28000.i2c:devicexx/ pci0000:00/ 0000:00:14.0/ 0000:01:00.0/ virtual/ net/ lo/1
2
3
4
5
6
7
8
9
10
11你可以递归查看所有已注册的物理(或虚拟)设备。
每个设备都是一个目录,目录下有大量属性文件(比如 uevent、power、subsystem、driver、资源寄存器等)。
2、按功能分组
/sys/class/下根据“功能类型”分门别类,比如:
bash
/sys/class/net/ # 网络设备
/sys/class/leds/ # LED灯
/sys/class/input/ # 输入设备
/sys/class/block/ # 块设备(磁盘/分区)1
2
3
4
2
3
4
- 这些目录下的“设备”往往是软连接(symlink)——指向
/sys/devices/里的真实device 目录,方便功能上统一管理。
3、按总线分组
/sys/bus/usb/devices/:所有 USB 总线下的已识别设备。/sys/bus/platform/devices/:所有 platform 总线下的设备(嵌入式 CPU/芯片内部资源等)。- 这些目录同样通常都是软连接,目标指向了
/sys/devices/下的实际设备节点。
例如:
四、快速定位你的设备
1、定位设备类型归属
- 比如开发 LED 灯驱动或想找 LED 节点,可以:
bash
ls /sys/class/leds/
# 列出所有led名字1
2
2
2、追踪软连接到物理设备
- 以 LED "work" 为例:
bash
ls -l /sys/class/leds/work1
输出:
bash
lrwxrwxrwx 1 root root 0 12月16日 18:42 /sys/class/leds/work -> ../../devices/platform/leds/leds/work1
这表示 /sys/class/leds/work 实际指向 /sys/devices/platform/leds/leds/work
- 你可以
cd进入该目录,查看所有与该物理设备绑定的详细属性、驱动、父子关系等。
3、按总线查找
- 如果你开发 I2C 设备,可用:
bash
ls /sys/bus/i2c/devices/1
- 里面每一项都是 I2C 设备节点链接,都指向
/sys/devices/中对应位置。
五、结合命令操作实例
- 查找当前所有字符设备并快速定位父设备/驱动:
bash
# 查找 /dev/tty0
udevadm info -a -p $(udevadm info -q path -n /dev/tty0)1
2
2
- 查看某设备属于哪个驱动:
bash
ls -l /sys/class/net/eth0/device/driver1
图中可以看出是
rk_gmac-dwmac驱动
六、图解
/sys- 根节点,即 sysfs 文件系统的挂载点。
/sys/devices/...- 代表“真实设备拓扑树”
- 路径:
/sys/devices/platform/soc/.../work - 这里展示了所有真实的设备及其物理/虚拟层次结构。
- 例如嵌入式设备常见的 platform 设备、SoC(片上系统)内部挂的外设等。
/sys/class/...- 代表“功能分类索引”
- 路径:
/sys/class/leds/work - 这里是按设备的“功能类型”来分类——比如所有 LED 设备、所有网络设备(net)、所有块设备(block)等等。
- 这些目录中的设备名通常是符号链接(symlink),实际指向/devices下真实设备节点。
- 方便用户根据用途查找设备。
/sys/bus/...- 代表“总线组织与设备-驱动关系”
- 路径示例:
/sys/bus/platform/devices/work - 总线是 Linux 的一种管理结构,如 platform、i2c、PCI、USB 等。
- 每条 bus 会有自己的 devices、drivers 子目录。
/bus/platform/devices/work也是符号链接,指向/devices/.../work的实际设备。
七、小结
- device 在 sysfs 下通常有多个入口路径(物理拓扑、功能类别、所属总线)。
/sys/devices/是设备的“真实物理”存在,class/bus 下是分类或索引(软链接)。- 熟练查找自己设备在 sysfs 的全路径,是驱动开发和调试的基本功。