udev

概述:

Linux 用戶常常會很難鑑別同一類型的設備名,比如 eth0, eth1, sda, sdb 等等。通過觀察這些設備的內核設備名稱,用戶通常能知道這些是什麼類型的設備,但是不知道哪一個設備是他們想要的。例如,在一個充斥着本地磁盤和光纖磁盤的設備名清單 (/dev/sd*) 中,用戶無法找到一個序列號爲“35000c50000a7ef67”的磁盤。在這種情況下,udev 就能動態地在 /dev目錄裏產生自己想要的、標識性強的設備文件或者設備鏈接,以此幫助用戶方便快捷地找到所需的設備文件。

udev 簡介

什麼是 udev?

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

使用 udev 的好處:

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

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

  • 自定義命名規則:通過 Linux 默認的規則文件,udev 在 /dev/ 裏爲所有的設備定義了內核設備名稱,比如 /dev/sda、/dev/hda、/dev/fd等等。由於 udev 是在用戶空間 (user space) 運行,Linux 用戶可以通過自定義的規則文件,靈活地產生標識性強的設備文件名,比如/dev/boot_disk、/dev/root_disk、/dev/color_printer等等。

  • 設定設備的權限和所有者 / 組:udev 可以按一定的條件來設置設備文件的權限和設備文件所有者 / 組。在不同的 udev 版本中,實現的方法不同,在“如何配置和使用 udev”中會詳解。

下面的流程圖顯示 udev 添加 / 刪除設備文件的過程。

圖 1. udev 工作流程圖:

圖 1. udev 工作流程圖:

udev系統可以分爲三個部分:

  • libudev函數庫,可以用來獲取設備的信息。

  • udevd守護進程,處於用戶空間,用於管理虛擬/dev

  • 管理命令udevadm,用來診斷出錯情況。

相關術語:

  • 設備文件:由於本文以較通俗的方式講解 udev,所以設備文件是泛指在 /dev/下,可被應用程序用來和設備驅動交互的文件。而不會特別地區分設備文件、設備節點或者設備特殊文件。

  • devfsdevfs是 Linux 早期的設備管理工具,已經被 udev 取代。

  • sysfssysfs是 Linux 2.6 內核裏的一個虛擬文件系統 (/sys)。它把設備和驅動的信息從內核的設備模塊導出到用戶空間 (userspace)。從該文件系統中,Linux 用戶可以獲取很多設備的屬性。

  • devpath:本文的 devpath是指一個設備在 sysfs文件系統 (/sys)下的相對路徑,該路徑包含了該設備的屬性文件。udev 裏的多數命令都是針對 devpath操作的。例如:sda的 devpath是 /block/sda,sda2 的 devpath是 /block/sda/sda2

  • 內核設備名稱:設備在 sysfs裏的名稱,是 udev 默認使用的設備文件名。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章