Linux

是否有使用 udev 的替代方法?

  • November 25, 2020

雖然我了解 udev 的偉大之處並感謝開發人員的努力,但我只是想知道是否有替代方案。

例如,我可能會想應該有一種方法來製作啟動腳本,以創建大多數設備節點,這些節點在我的系統(不改變硬體)上無論如何都是一樣的。

我想跳過的好處或原因與跳過udev相同dbus,即降低複雜性並增加我的更改以更安全地設置系統。

那裡有各種各樣的選擇udev。貌似 Gentoo 可以使用一個叫做mdev. 另一種選擇是嘗試使用udev的前任devfsd。最後,您始終可以使用mknod.

請注意,對於後者,不需要在引導時創建所有內容,因為節點可以在磁碟上創建,而不是像其他選項那樣在臨時文件系統中創建。當然,當插入新硬體(例如 USB 記憶棒)時,您將失去動態創建設備文件的靈活性。我相信這個時代的標準方法是讓您可能合理需要的每個設備文件都已經創建/dev(即很多設備文件)。

當然,讓這些方法中的任何一種在現代發行版中工作的難度可能相當高。Gentoo wiki 提到了在桌面環境中工作的困難mdev(更不用說在 Gentoo 之外)。最後一個devfsd版本是 2002 年,我不知道它是否能與現代核心一起工作。手動創建節點可能是最可行的方法,但即使禁用udev也可能是一個挑戰,尤其是在 distos 中使用systemd(udev現在是 的一部分systemd,這表明存在強依賴性)。

我的建議是堅持udev;)

現代 Linux 核心支持devtmpfs文件系統(不要與 Ancient 混淆devfs),它會在核心發現所有設備節點後立即動態創建它們。(事實上,最新udev版本要這樣做;您會發現 udev 不再創建任何設備節點,僅創建符號連結。)

同樣,韌體載入也已移至核心中,因此剩下的唯一任務udev是模組載入(根據 modaliases)和應用設備權限和其他 udev 規則。

所以理論上一個完全單片的核心應該可以在沒有 udev 的情況下正常啟動。

然而,這裡真正的問題是稍後會發生什麼。

  1. 相當多的使用者空間程序依賴 udev 維護其設備數據庫,可通過libudev. 雖然列舉設備和監聽添加/刪除的事件可以直接使用核心介面(sysfs 和 netlink)來完成,但您仍然會沒有各種 udev 規則附加的所有元數據。
  2. udev 規則還在/dev/disk/by-*, /dev/mapper, /dev/input/by-path,/dev/snd/by-path等中維護各種“持久”符號連結。例如,如果您連接了兩個磁碟,則不能保證第一個磁碟始終為sdaor sdb,但 udev 確保其中的符號連結/dev/disk/by-uuid將繼續指向正確的磁碟。
  3. 雖然設備節點現在由核心創建,因此不再是您關心的問題,但仍然需要注意一些設備類型已經開始使用動態分配的主要/次要編號,因此即使您現在有/dev/fuse10,228 和/dev/hpet10,229,它們也會每次重新啟動後都有不同的數字,因此需要一個或(在舊系統上)一個監聽ueventsdevtmpfs的程序。

其中許多事情可以很容易地由其他程序完成,例如mdev,當然。我的觀點是靜態/etc/MAKEDEV腳本不再起作用……


因此,基本上,當涉及到啟動複雜性時,udev 很可能是您最不關心的問題。

引用自:https://unix.stackexchange.com/questions/161674