32 选择设备管理器

Yocto Project 提供多种管理设备目录(/dev )的方式:

  • 持久化且预先填充的 /dev:/dev 目录持久保存,所需设备节点在 构建期间创建。

  • 将 devtmpfs 与设备管理器配合使用:内核以内存文件系统的形式提供 /dev 目录,并在运行时自动填充。udev 或 busybox-mdev 等 用户空间设备管理器负责设备节点的其他配置。

32 使用持久化且预先填充的 /dev

要使用静态方式填充设备节点,需要将 USE_DEVFS 变量设为 "0":

USE_DEVFS = "0"

生成的 /dev 目录内容由设备表文件定义。IMAGE_DEVICE_TABLES 变量指定所用设备表,应在机器或发行版的 configuration file 中设置, 也可以在 build/conf/local.conf 配置文件中设置。

如果未定义 IMAGE_DEVICE_TABLES,则使用默认的 device_table-minimal.txt。自定义设置示例如下:

IMAGE_DEVICE_TABLES = "device_table-mymachine.txt"

设备节点由 makedevs 工具在创建镜像时填充。

32 使用 devtmpfs 和设备管理器

要使用动态方式填充设备节点,需要使用或确保 USE_DEVFS 变量设为 默认值 "1":

USE_DEVFS = "1"

采用此设置后,内核通过 devtmpfs 填充 /dev 目录。构建 Linux 内核时, 务必启用对应的内核配置变量 CONFIG_DEVTMPFS。

devtmpfs 创建的所有设备都归 root 所有,权限为 0600。

如果需要更细致地控制设备节点,可以使用 udev 或 busybox-mdev 等 设备管理器。在机器或发行版的 configuration file 中定义 VIRTUAL-RUNTIME_dev_manager 变量来选择设备管理器, 也可以在 build/conf/local.conf 配置文件中设置:

VIRTUAL-RUNTIME_dev_manager = "udev"

# Some alternative values
# VIRTUAL-RUNTIME_dev_manager = "busybox-mdev"
# VIRTUAL-RUNTIME_dev_manager = "systemd"