Answers:
那里有多种选择udev
。看来Gentoo可以使用称为的东西mdev
。另一种选择是尝试使用udev
的前身devfsd
。最后,您始终可以使用创建所有设备文件mknod
。
请注意,对于后者,不需要在启动时创建所有内容,因为可以在磁盘上创建节点,而不像其他选项那样在临时文件系统中创建节点。当然,插入新硬件(例如USB记忆棒)后,您失去了动态创建设备文件的灵活性。我相信这个时代的标准方法是已经在您可能需要的情况下创建了每个设备文件/dev
(即许多设备文件)。
当然,在现代发行版中使用这些方法中的任何一种的难度可能很高。Gentoo Wiki提到了在mdev
桌面环境下工作的困难(更不用说在Gentoo之外)。最新devfsd
版本是2002年,我不知道它是否甚至可以在现代内核中使用。手动创建节点可能是最可行的方法,但是即使禁用udev
也可能是一个挑战,尤其是在使用systemd
(udev
现在是的一部分systemd
,这表明存在很强的依赖性)。
我的建议是坚持udev
;)
udev
如果没有systemd
,它们应该可以完美地工作-它们都只是在同一代码库中开发,但是udev
可以独立于其构建和运行。
udev
存在时间比systemd
任何时候都要长。问题是,systemd
没有工作就可以udev
吗?我的猜测是,您至少必须使用某种--without-udev
选项重新编译。
现代Linux内核支持devtmpfs
文件系统(不要与Ancient混淆devfs
),文件系统会在内核发现它们后立即动态创建所有设备节点。(实际上,最新udev
版本对此有所要求;您会发现udev不再创建任何设备节点,仅创建符号链接。)
同样,固件加载也已移入内核,因此剩下的唯一任务udev
是模块加载(根据模块化)以及应用设备权限和其他udev规则。
因此,从理论上讲,完全单片内核 无需udev即可正常启动。
但是,这里真正的问题是以后会发生什么。
相当多的用户空间程序依赖udev维护其设备数据库,可通过访问该数据库libudev
。虽然可以使用内核接口(sysfs和netlink)直接进行设备枚举和侦听添加/删除的事件,但您仍然会缺少各种udev规则所附加的所有元数据。
udev规则也维持在各种“执着”的符号链接/dev/disk/by-*
,/dev/mapper
,/dev/input/by-path
,/dev/snd/by-path
,等。例如,如果您连接了两个磁盘,则不能保证第一个磁盘将始终为sda
或sdb
,但是udev确保在其中的符号链接/dev/disk/by-uuid
将继续指向正确的。
虽然设备节点现在是由内核创建的,因此不再需要您担心,但是仍然需要注意,某些设备类型已经开始使用动态分配的主/次编号,因此即使您现在拥有/dev/fuse
10228和/dev/hpet
10229,它们也会每次重新启动后有不同的号码,这样无论是devtmpfs
或(在旧系统),侦听热插拔事件是一个程序需要。
当然,其中许多程序可以通过其他程序轻松完成mdev
。我的观点是,静态/etc/MAKEDEV
脚本不再起作用了...
因此,基本上,在启动复杂性方面,udev很可能是您最不关心的问题。
有几种选择:
chmod
,chown
,ln
在运行作为引导的一部分脚本,以及诸如此类的命令。systemd-udev
,它是systemd项目的一部分,即插即用管理器。eudev
,它是systemd-udev
systemd与之明显不同。vdev
,这是,它是由Jude Nelson开发的即插即用管理器。mdev
,与另一个答案相反,这不是Gentoo的事情。这是BusyBox内置的即插即用管理器。mdev
,这是Dimitris Papastamos开发的即插即用管理器。mdevd
,该配置与BusyBox的配置兼容,mdev
但是会执行自己的套接字处理,并且不了解LISTEN协议。除了第一个之外,所有这些都需要一组规则来描述如何对有关设备的内核通知事件做出反应。明显。
还有一些工具将采用专为计划的程序/proc/sys/kernel/hotplug
,例如两个mdev
,并通过侦听netlink套接字然后生成这些程序来对它们进行适配和序列化:
udev?最好的选择是不使用它。通过学习如何不使用它,Linux和* NIX世界将变得更具逻辑意义。
最好的长期替代方法是使用静态设备(请参见注释)。如果您具有驱动程序,则Linux内核将管理热插拔。我更喜欢从未运行过udevd。
dbus是另一回事。它的确会减慢您的系统速度,但是,脚本世界不断变化的世界喜欢它。因此,您习惯了很多事情,例如Web浏览器或具有脚本后端的应用程序,必须进行修复(启动或重建而没有这些东西,或者转交给其他应用程序)。
注意:如果您只是插入闪存驱动器或DVD设备,请使用dmesg|tail
来查看要挂载的设备的名称。学习设备是字符设备还是块设备是计算机硬件领域的基本系统知识。在Linux的开放源代码中,请查看有关Linux的很多内容,而不仅仅是嵌入式。这是更广泛地了解所有* NIX(例如Linux(Solaris,HPUX,AIX等))的直接逻辑(不是哲学)的最佳选择。
Udev,dbus,gconf / dconf,systemd,gnome-shell,Gnome,Glib,mono和Fedora适用于手忙脚乱而又无法进行RTFM的人,或者想要自动更新(看起来很光滑)但速度较慢的人比糖蜜,越野车,半途而废的Linux。(一个非常糟糕的地方,在网上寻找大量类似的体验)。
系统启动后运行udevd。但是,它声称udev是必需的,因为will change
重新启动时设备的次设备号是多少。乌德夫(Udev)的存在理由似乎在各个方面都自相矛盾。无论您咨询谁,文件的位置似乎总是错误的。不要相信或freedesktop.org。
除了udev陷入被称为systemd的恐怖之外,我不知道那时/ etc / udev垃圾会如何处理。而且,可以得出结论的是,编写udev规则总比什么都好。gentoo人们似乎想挂在上面,而不必进行系统化,因此他们将其分叉到eudev。
如果您想要一个速度极快,没有讨厌的惊喜系统,请使用Linux基础知识。
udev
功能中通常包含的那些任务。还可以指出这种替代方法的优势。