我正在尝试为 beaglbone 创建自定义映像。其中一个功能是启用 openvpn。问题是,在第一次启动时没有 /dev/net/tun 文件,尽管我在创建 rootfs 时已经创建了该文件:
mkdir -p /dev/net
chroot rootfs/ mknod /dev/net/tun c 10 200
chmod 600 /dev/net/tun
如果我以相同的方式创建它,则登录 beaglbone 系统文件会保留下来,并且 openvpn 可以正常工作。那么问题是谁负责维护此文件以及如何使系统自动创建它(除了使用自定义 systemd 服务之外)?
谢谢你!
答案1
你的 rootfs 上的 /dev 的内容没有任何用处。在早期启动期间,开发环境虚拟文件系统被挂载到 /dev 上,使之前的内容不可见,就像任何其他挂载的文件系统一样。此后,/dev 中唯一可见的文件是 a) 由内核本身创建,或 b) 由服务在每次启动过程中创建。
kmod-static-nodes.service
在模块化内核(其中“tun”是一个模块)中,某些设备节点是通过和的组合预先创建的systemd-tmpfiles-setup-dev.service
:
- kmod-static-nodes 读取 /lib/modules 并生成要预先创建的设备节点列表;
- systemd-tmpfiles 将它们作为其“tmpfiles.d”处理的一部分来创建。