banner
NEWS LETTER

嵌入式 Linux 系列 28:设备节点、mdev/udev 和热插拔

Scroll down

应用访问外设时,经常会用到 /dev/ttyS1/dev/i2c-1/dev/spidev0.0 这类设备节点。设备节点怎么来的、权限怎么设置、热插拔怎么处理,是 rootfs 设计的一部分。

一、/dev 是什么

/dev 下面是设备节点,不是普通文件。它们连接到内核驱动提供的字符设备或块设备。

查看:

1
ls -l /dev

示例:

1
2
crw-rw---- 1 root root 4, 64 ttyS0
brw-rw---- 1 root root 179, 0 mmcblk0

c 表示字符设备,b 表示块设备。

二、devtmpfs

现代内核常用 devtmpfs 自动创建设备节点。

启动脚本里挂载:

1
mount -t devtmpfs devtmpfs /dev

如果没有挂载,应用可能找不到设备节点。

三、mdev

BusyBox 系统常用 mdev 处理热插拔和权限。

启动:

1
2
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

配置文件:

1
/etc/mdev.conf

可以设置设备权限、所属用户和触发脚本。

四、udev

完整发行版常用 udev。它功能更强,但依赖更多,精简 rootfs 不一定适合。

选择建议:

  • 极简系统:devtmpfs。
  • BusyBox 系统:devtmpfs + mdev。
  • 复杂热插拔系统:udev。

五、常见问题

设备节点不存在:

  • 驱动没有加载。
  • 设备树没启用。
  • devtmpfs 没挂载。
  • mdev 没扫描。

权限不对:

  • mdev.conf 没配置。
  • 应用运行用户权限不足。
  • 节点被重新生成覆盖。

热插拔无响应:

  • hotplug 没设置。
  • 内核事件没发出。
  • 脚本路径错误。

六、排查命令

1
2
3
4
5
mount | grep dev
ls -l /dev
dmesg
cat /proc/devices
cat /proc/sys/kernel/hotplug

设备节点问题通常不是应用逻辑问题,而是内核、rootfs 和权限规则之间没有配好。

其他文章
目录导航 置顶
  1. 1. 一、/dev 是什么
  2. 2. 二、devtmpfs
  3. 3. 三、mdev
  4. 4. 四、udev
  5. 5. 五、常见问题
  6. 6. 六、排查命令
请输入关键词进行搜索