Linux文件系統udev

1,什麼是udev

udev 是 Linux2.6 內核裡的一個功能,它替代了原來的 devfs,成為當前 Linux 默認的設備管理工具。udev 以守護進程的形式運行,通過偵聽內核發出來的 uevent 來管理 /dev目錄下的設備文件。不像之前的設備管理工具,udev 在用戶空間 (user space) 運行,而不在內核空間 (kernel space) 運行。

我們都知道,所有的設備在 Linux 裡都是以設備文件的形式存在。在早期的 Linux 版本中,/dev目錄包含了所有可能出現的設備的設備文件。很難想象 Linux 用戶如何在這些大量的設備文件中找到匹配條件的設備文件。現在 udev 只為那些連接到 Linux 操作系統的設備產生設備文件。並且 udev 能通過定義一個 udev 規則 (rule) 來產生匹配設備屬性的設備文件,這些設備屬性可以是內核設備名稱、總線路徑、廠商名稱、型號、序列號或者磁盤大小等等。

動態管理:當設備添加 / 刪除時,udev 的守護進程偵聽來自內核的 uevent,以此添加或者刪除 /dev下的設備文件,所以 udev 只為已經連接的設備產生設備文件,而不會在 /dev下產生大量虛無的設備文件。

2,udev的配置文件

udev是一個用戶模式程序。它的配置文件是/etc/udev/udev.conf。

3,udev的工作過程

  1. 當內核檢測到在系統中出現了新設備後,內核會在sysfs文件系統中為該新設備生成一項新的記錄,一般sysfs文件系統會被mount到 /sys目錄中。新記錄是以一個或多個文件或目錄的方式來表示。每個文件都包含有特定的信息。(信息是如何表述的,還要另外研究?)
  2. udev在系統中是以守護進程的方式在運行,檢測到新設備的出現,通過查找設備對應的sysfs中的記錄得到設備的一些信息。
  3. udev會根據/etc/udev/udev.conf文件中的udev_rules指定的目錄,逐個檢查該目錄下的文件,這個目錄下的文件都是針對某類或某個設備應該施行什麼措施的規則文件。udev讀取文件是按照文件名的ASCII字母順序來讀取的,如果udev一旦找到了與新加入的設備匹配的規則,udev就會根據規則定義的措施對新設備進行配置。同時不再讀後續的規則文件。

4,/dev目錄下節點的創建

整個/dev目錄的內容,都和內核沒有關係,你在任何地方都可以通過mkdir創建目錄,然後在裡面用mknod創建設備節點。這個目錄,在不少嵌入式系統中是手工創建的,但在大型系統中(比如一般的發行版),基本上都是用udev來創建的,udev通過uevent系統來提供服務,uevent通過kobject子系統提供功能。

內核中,很多對外的資源,都會創建kobject對象,這種對象會通過/sys文件系統暴露到用戶態,其中一個關鍵的功能是這些對象發生變化(比如創建或者刪除)的時候,一個時間會發送到uevent隊列中,uevent隊列可以通過sysfs來訪問,也可以全局性地通過netlink來接收。udev進程就是等待在這個通道上,發現有新的對象建立了,然後看看是否是新設備在內核中創建,如果是,就通過mknod為這個設備在/dev目錄下創建一個節點


分享到:


相關文章: