udev-FAQ 中文翻譯

roninwei發表於2006-08-21
udev-FAQ 中文翻譯
原文出處 http://www.kernel.org/pub/linux/util...tplug/udev-FAQ
中文翻譯 王旭 http://gnawux.blogchina.com
本文件遵循 GPL 2 及以後版本釋出,修改、釋出請保持許可證不變

問: udev是什麼? 它的目的何在?
答: 看看那篇 OLS 2003 上的有關 udev 的文章吧,可以在 docs 目錄裡找到,也能在這
裡找到:

OLS 2003 上還有一個關於 udev 的幻燈片,可以在這裡找到:


問: udev 和 devfs 是什麼關係
答: udev 完全在使用者態 (userspace) 工作,利用裝置加入或移除時核心所傳送的
hotplug 事件 (event) 來工作。關於裝置的詳細資訊是由核心輸出 (export) 到位
於 /sys 的 sysfs 檔案系統的。所有的裝置命名策略、許可權控制和事件處理都是在
使用者態下完成的。與此相反,devfs 是作為核心的一部分工作的。

問: 如果 udev 不能完成所有 devfs 的工作的話,為什麼把 devfs 標記為
OBSOLETE/removed?
答: 引用 Al Viro (Linux VFS 核心維護者):
- devfs 所做的工作被確信可以在使用者態來完成。
- devfs 被加入核心之時,大家寄望它的質量可以迎頭趕上。
- devfs 被發現了一些可修復和無法修復的 bug。
- 對於可修復的 bug,幾個月前就已經被修復了,其維護者認為一切良好。
- 對於後者,同樣是相當常一段時間以來沒有改觀了。
- devfs 的維護者和作者對它感到失望並且已經停止了對程式碼的維護工作。

問: 但是當一個並不存在的 /dev 節點被開啟的時候,udev 並不能如 devfs 一樣自動加
載驅動程式。
答: 的確如此,但 Linux 的設計是在裝置被發現的時候載入模組,而不是當它被訪問的時
候。

問: 不過等等,我確實希望 udev 可以在不存在的節點被開啟的時候自動載入驅動。這是
我使用 devfs 的唯一原因了。給 udev 增加這個功能吧。
答: 不,udev 是用來管理 /dev 的,不是用來載入核心驅動的。

問: 嗨,求你們了。這不難做到的。
答: 這麼個功能對於一個配置正確的計算機是多餘的。系統中所有的裝置都應該產生
hotplug 事件、載入恰當的驅動,而 udev 將會注意到這點並且為它建立對應的
裝置節點。如果你不想讓所有的裝置驅動停留在記憶體之中,應該使用其它東西來
管理你的模組 (如指令碼, modules.conf, 等等) 這不是 udev 的工作。

問: 但是我真的喜歡那個功能,還是加上吧
答: devfs 用的方法導致了大量無用的 modprobe 嘗試,以此程式探測裝置是否存在。
每個試探性探測都新建一個執行 modprobe 的程式,而幾乎所有這些都是無用的。

問: 我喜歡 devfs 的裝置檔案命名方式,udev 可以這樣命名麼?
答: 可以,udev 可以使用 /dev 的命名策略來建立節點。透過一個配置檔案,可以把內
核預設的名字對映到 devfs 的名字。可以看看 udev 中帶的 udev.rules.devfs 文
件。
注意: devfs 的命名方式是不被建議並且不被官方支援的,因為它所用的簡單列舉設
備的方式在裝置可能被隨時加入或刪除的情況下確實是一個比較笨的方法。這些編號
代給你的將只有麻煩,而並不能用來確定裝置。看看那個永久性磁碟 (persistent
disk) 的規則就知道如何在使用者態下正確的做這件事,而不是傻傻地列出裝置。

問: udev 可以為哪些裝置建立節點?
答: 所有在 sysfs 中顯示的裝置都可以由 udev 來建立節點。如果核心中增加了其它設
備的支援,udev 也就自動地可以為它們工作了。現在所有的塊裝置都在被支援之列,
大部分的主字元裝置也是被支援的。核心開發者們正致力於讓所有的字元裝置都被支
持。可以到 linux-kernel 郵件列表上尋找補丁或是檢視補丁的狀態。

問: udev 是否會去掉匿名裝置數量的限制?
答: udev 完全工作於使用者態。如果核心支援了更多的匿名裝置,udev 就會支援。

問: udev 是否會支援符號連結?
答: udev 現在就支援符號連結,每個裝置節點擁有多個符號連結也是被支援的。

問: udev 如何處理 /dev 檔案系統?
答: 建議使用一個每次啟動系統的時候重新建立的 tmpfs 作為 /dev 的檔案系統。不過
實際上 udev 並不關心那種檔案系統在被使用。

問: 在 init 執行之前,udev 如何處理裝置?
答: udev 可以被放入 initramfs 之中,並在每個裝置被發現的時候執行。也可以讓
udev 工作在一個真的根分割槽被載入之後根據 /sys 的內容建立的初始 /dev 目錄
之中。

問: 我是否可以利用 udev 在一個 USB 裝置被載入的時候自動載入上這個裝置?
答: 技術上講是可以的,但是 udev 不是用於這個工作的。所有的主流釋出版 (distro)
都包含了 HAL () 用於這個工作,它
也是專門用於監視裝置變更的,並且整合進入了桌面軟體。

換個角度說,這可以簡單的透過 fstab 來實現:
/dev/disk/by-label/PENDRIVE /media/PENDRIVE vfat user,noauto 0 0

這樣,使用者可以用如下命令來訪問裝置:
$mount /media/PENDRIVE
同樣不需要管理員許可權,但卻擁有了裝置的全部訪問許可權。使用永久性磁碟連結
(label, uuid) 將可以指定同一裝置,無論其實際上的核心名字是什麼。

問: 有什麼我需要注意的安全問題麼?
答: 當使用動態裝置編號的時候,一個給定的主/從裝置號可能在不同時間對應不同的設
備,如果一個使用者擁有對這個節點的訪問許可權,並且可以建立一個到這個節點的硬鏈
接,他就可以如此得到一個這個裝置節點的複製。當裝置被移除之後,udev 刪除了
裝置節點,但硬連結依然存在。如果這個裝置節點之後被重新使用不同的訪問許可權被
建立的時候,其硬連結仍然可以使用先前的訪問許可權來訪問。
(同樣的問題也存在在使用 PAM 改變訪問許可權的 login 上。)

簡單的解決方案就是透過把 /dev 放在 tmpfs 這樣的單獨的檔案系統之上來防止建
立硬連結。

問: 我有其他的關於 udev 的問題,我應該問誰?
答: linux-hotplug-devel 正是問這些的地方。郵件列表的地址是
linux-hotplug-devel@lists.sourceforge.net
加入郵件列表的相關資訊可以在如下地址找到
[post]https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel[/post]
郵件列表的上的既往討論記錄可以在下面地址找到
[post]http://marc.theaimsgroup.com/?l=linux-hotplug-devel[/post][@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7507082/viewspace-858998/,如需轉載,請註明出處,否則將追究法律責任。

相關文章