udev

維基百科,自由的百科全書
跳至導覽 跳至搜尋

udev
開發者Greg Kroah-HartmanKay Sievers
首次發布2003年11月,​22年前​(2003-11
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    源代碼庫
    • {{URL|example.com|可选的显示文本}}
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    編程語言C
    引擎
      Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
      操作系統Linux內核
      類型設備節點
      許可協議GPLv2
      網站官方網站

      udev 是Linux kernel的設備管理器,主要管理/dev目錄底下的設備節點。它同時也是用來接替devfshotplug的功能,這意味着它要在添加/刪除硬件時處理/dev目錄以及所有用戶空間的行為,包括加載固件時。

      udev的最新版本依賴於升級後的Linux kernel 2.6.13的uevent接口的最新版本。使用新版本udev的系統不能在2.6.13以下版本啟動,除非使用noudev參數來禁用udev並使用傳統的/dev來進行設備讀取。

      2012年4月,udev被合併至systemd

      概要[編輯]

      在傳統的Linux系統中,/dev目錄下的設備節點為一系列靜態存在的文件,而udev則動態提供了在系統中實際存在的設備節點。雖然devfs提供了類似功能,udev的支持者也給出了很多udev實現得比devfs好的理由[1]

      • udev支持設備的固定命名,而並不依賴於設備插入系統的順序。默認的udev設定提供了存儲設備的固定命名。可以使用其vid(vendor)、pid(device)、設備名稱(model)等屬性或其父設備的對應屬性來確認某一設備。
      • udev完全在用戶空間執行,而不是像devfs在內核空間一樣執行。結果就是udev將命名策略從內核中移走,並可以在節點創建前用任意程序在設備屬性中為設備命名。

      運行方式[編輯]

      udev是一個通用的內核設備管理器。它以守護進程的方式運行於Linux系統,並監聽在新設備初始化或設備從系統中移除時,內核(通過netlink socket)所發出的uevent。

      系統提供了一套規則用於匹配可發現的設備事件和屬性的導出值。匹配規則可能命名並創建設備節點,並運行配置程序來對設備進行設定。udev規則可以匹配像內核子系統、內核設備名稱、設備的物理等屬性,或設備序列號的屬性。規則也可以請求外部程序提供信息來命名設備,或指定一個永遠一樣的自定義名稱來命名設備,而不管設備什麼時候被系統發現。

      系統架構[編輯]

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

      • libudev函數庫,可以用來獲取設備的信息。
      • udevd守護進程,處於用戶空間,用於管理虛擬/dev
      • 管理命令udevadm,用來診斷出錯情況。

      系統獲取內核通過netlink socket發出的信息。早期的版本使用hotplug,並在/etc/hotplug.d/default添加一個鏈接到自身來達到目的。

      命令格式[編輯]

      BUS 總線 KERNEL 內核名如sd* ID 設備id 如總線id PLACE

      SYSFS{filename} 或 ATTR{filename}

      PROGRAM 調用外部程序 RESULT 匹配program返回的結果 NAME

      SYMLINK 連接規則

      編寫規則[編輯]

      udev配置文件是/etc/udev/udev.conf,文件內容中很重要的一項是指定udev規則存儲的目錄,形如udev_rules=「/etc/udev/rules.d」. 指定的目錄中存儲一系列以.rules結束的規則文件,每個文件處理一系列規則來幫助udev分配名字給設備文件並保證內核可以識別此名字。

      規則文件由系列鍵-值對組成,鍵值對分兩類:匹配鍵(使用操作符"==","!="等)和賦值鍵(使用"=","+=",":="等)。匹配鍵判斷規則是否應被應用,賦值鍵可以被分配一到多個值。

      有些常用的鍵已經有了固定的含義,這裡列舉出最基本的幾個。這也是基本規則之一,更多編輯規則請參見man udev頁。

      • KERNEL - 匹配設備的內核名字
      • SUBSYSTEM - 匹配設備的子系統
      • DRIVER - 匹配設備驅動名
      • NAME - 應當被採用為設備節點的名字
      • SYMLINK - 一系列被作為設備節點替補名字的符號鏈接

      常用鍵舉例:KERNEL=="hdb", DRIVER=="ide-disk", NAME="my_spare_disk", SYMLINK+="sparedisk"

      作者[編輯]

      udev由Greg Kroah-HartmanKay Sievers共同開發,並得到Dan Stekloff等人的幫助。

      參見[編輯]

      外部連結[編輯]

      參考文獻[編輯]

      1. ^ udev and devfs - The final word. 2003-12-30 [2008-01-13]. (原始內容存檔於2011-04-11) (English).  Authors list列表中的|first1=缺少|last1= (幫助)