Driver Core: devtmpfs - kernel-maintained tmpfs-based /dev
Devtmpfs lets the kernel create a tmpfs instance called devtmpfs very early at kernel initialization, before any driver-core device is registered. Every device with a major/minor will provide a device node in devtmpfs.
Devtmpfs can be changed and altered by userspace at any time, and in any way needed - just like today's udev-mounted tmpfs. Unmodified udev versions will run just fine on top of it, and will recognize an already existing kernel-created device node and use it. The default node permissions are root:root 0600. Proper permissions and user/group ownership, meaningful symlinks, all other policy still needs to be applied by userspace.
If a node is created by devtmps, devtmpfs will remove the device node when the device goes away. If the device node was created by userspace, or the devtmpfs created node was replaced by userspace, it will no longer be removed by devtmpfs.
If it is requested to auto-mount it, it makes init=/bin/sh work without any further userspace support. /dev will be fully populated and dynamic, and always reflect the current device state of the kernel. With the commonly used dynamic device numbers, it solves the problem
where static devices nodes may point to the wrong devices.
It is intended to make the initial bootup logic simpler and more robust, by de-coupling the creation of the inital environment, to reliably run userspace processes, from a complex userspace bootstrap logic to provide a working /dev.
Devtmpfs can be changed and altered by userspace at any time, and in any way needed - just like today's udev-mounted tmpfs. Unmodified udev versions will run just fine on top of it, and will recognize an already existing kernel-created device node and use it. The default node permissions are root:root 0600. Proper permissions and user/group ownership, meaningful symlinks, all other policy still needs to be applied by userspace.
If a node is created by devtmps, devtmpfs will remove the device node when the device goes away. If the device node was created by userspace, or the devtmpfs created node was replaced by userspace, it will no longer be removed by devtmpfs.
If it is requested to auto-mount it, it makes init=/bin/sh work without any further userspace support. /dev will be fully populated and dynamic, and always reflect the current device state of the kernel. With the commonly used dynamic device numbers, it solves the problem
where static devices nodes may point to the wrong devices.
It is intended to make the initial bootup logic simpler and more robust, by de-coupling the creation of the inital environment, to reliably run userspace processes, from a complex userspace bootstrap logic to provide a working /dev.
早期的作法應該是先建立一份 static /dev 提供系統 booting 時使用,當系統 booting 完成後再掛載 tmpfs 到 /dev 上.由 udevadm 重新 trigger kernel,再用 udev 動態建立相對應的 device node 在 /dev 裡
在 linux kernel 2.6.32 後使用 devtmpfs 之後. Udev 並不負責 create device node. create device node 的工作則是交由 Kernel 的 devtmpfs 負責. Udev 則是負責接收 kernel 送出的 uevent 依照相對的資訊如 device ID product ID,去載入相對應的 kernel module,device node的權限管理(參照上述藍色註記部分 device node 被 devtmpfs 建立出來的 default 屬性是 root:root 0660) 與建立相對應的 symlink file etc.
**注意舊版的 udev 會做 device node的建立,新版本的則不會只會做 symlink
http://www.freedesktop.org/software/systemd/
http://ftp.sunet.se/pub/Linux/kernel.org/linux/utils/kernel/hotplug/
**注意舊版的 udev 會做 device node的建立,新版本的則不會只會做 symlink
http://www.freedesktop.org/software/systemd/
http://ftp.sunet.se/pub/Linux/kernel.org/linux/utils/kernel/hotplug/
沒有留言:
張貼留言