应用访问外设时,经常会用到 /dev/ttyS1、/dev/i2c-1、/dev/spidev0.0 这类设备节点。设备节点怎么来的、权限怎么设置、热插拔怎么处理,是 rootfs 设计的一部分。
一、/dev 是什么
/dev 下面是设备节点,不是普通文件。它们连接到内核驱动提供的字符设备或块设备。
查看:
1 | ls -l /dev |
示例:
1 | crw-rw---- 1 root root 4, 64 ttyS0 |
c 表示字符设备,b 表示块设备。
二、devtmpfs
现代内核常用 devtmpfs 自动创建设备节点。
启动脚本里挂载:
1 | mount -t devtmpfs devtmpfs /dev |
如果没有挂载,应用可能找不到设备节点。
三、mdev
BusyBox 系统常用 mdev 处理热插拔和权限。
启动:
1 | echo /sbin/mdev > /proc/sys/kernel/hotplug |
配置文件:
1 | /etc/mdev.conf |
可以设置设备权限、所属用户和触发脚本。
四、udev
完整发行版常用 udev。它功能更强,但依赖更多,精简 rootfs 不一定适合。
选择建议:
- 极简系统:devtmpfs。
- BusyBox 系统:devtmpfs + mdev。
- 复杂热插拔系统:udev。
五、常见问题
设备节点不存在:
- 驱动没有加载。
- 设备树没启用。
- devtmpfs 没挂载。
- mdev 没扫描。
权限不对:
- mdev.conf 没配置。
- 应用运行用户权限不足。
- 节点被重新生成覆盖。
热插拔无响应:
- hotplug 没设置。
- 内核事件没发出。
- 脚本路径错误。
六、排查命令
1 | mount | grep dev |
设备节点问题通常不是应用逻辑问题,而是内核、rootfs 和权限规则之间没有配好。
- 本文链接: https://blog.hansong.icu/2026/06/26/Embedded_Linux_Series_28_Device_Nodes_Hotplug/
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。