使用 udev 进行动态内核设备管理(转自suse文档)
第?12?章使用?udev?進(jìn)行動(dòng)態(tài)內(nèi)核設(shè)備管理?
目錄
12.1.?/dev?目錄12.2. 內(nèi)核?uevents?和?udev12.3. 驅(qū)動(dòng)程序、內(nèi)核模塊和設(shè)備12.4. 引導(dǎo)和啟動(dòng)設(shè)備設(shè)置12.5. 監(jiān)視正在運(yùn)行的?udev?守護(hù)程序12.6. 使用?udev?規(guī)則影響內(nèi)核設(shè)備事件處理12.7. 永久設(shè)備命名12.8.?udev?使用的文件12.9. 更多信息內(nèi)核幾乎可以添加或刪除運(yùn)行系統(tǒng)中的任何設(shè)備。設(shè)備狀態(tài)的更改(無論插入還是刪除設(shè)備)需要傳播給用戶空間。插入或者識(shí)別設(shè)備后需要進(jìn)行配置。某個(gè)設(shè)備已識(shí)別狀態(tài)的任何更改都需要通知給此設(shè)備的用戶。udev?可提供所需的基礎(chǔ)結(jié)構(gòu)來動(dòng)態(tài)維護(hù)?/dev?目錄中的設(shè)備節(jié)點(diǎn)文件和符號(hào)鏈接。udev?規(guī)則提供了將外部工具插入內(nèi)核設(shè)備事件處理的方式。這使您能夠自定義?udev?設(shè)備處理,例如通過添加特定腳本來作為內(nèi)核設(shè)備處理的一部分執(zhí)行,或者請(qǐng)求并導(dǎo)入額外數(shù)據(jù)以在設(shè)備處理期間評(píng)估。
12.1.?/dev?目錄?
/dev?目錄中的設(shè)備節(jié)點(diǎn)提供對(duì)相應(yīng)的內(nèi)核設(shè)備的訪問。使用?udev?時(shí),/dev?目錄反映內(nèi)核的當(dāng)前狀態(tài)。每個(gè)內(nèi)核設(shè)備都有相應(yīng)的設(shè)備文件。如果設(shè)備從系統(tǒng)斷開,則刪除此設(shè)備節(jié)點(diǎn)。
/dev?目錄的內(nèi)容保存在臨時(shí)文件系統(tǒng)中,所有文件都是在每個(gè)系統(tǒng)啟動(dòng)時(shí)提供的。手動(dòng)創(chuàng)建或修改的文件在重引導(dǎo)時(shí)是有意不保存的。無論相應(yīng)內(nèi)核設(shè)備的狀態(tài)如何都出現(xiàn)在?/dev?目錄中的靜態(tài)文件和目錄,可以放置在?/lib/udev/devices?目錄中。系統(tǒng)啟動(dòng)時(shí),此目錄的內(nèi)容復(fù)制到?/dev?目錄,它們與?/lib/udev/devices?中的文件具有相同的所有權(quán)和許可權(quán)限。
12.2.?內(nèi)核?uevents?和?udev?
必需的設(shè)備信息由?sysfs?文件系統(tǒng)導(dǎo)出。對(duì)于內(nèi)核檢測(cè)到并已初始化的設(shè)備,將創(chuàng)建一個(gè)帶有該設(shè)備名稱的目錄。它包含帶有特定于設(shè)備屬性的屬性文件。
每次添加或刪除設(shè)備時(shí),內(nèi)核都會(huì)發(fā)送 uevent 來向?udev?通知更改。一旦啟動(dòng),udev?守護(hù)程序便會(huì)讀取和分析?/etc/udev/rules.d/*.rules?文件中提供的所有規(guī)則,并將它們保留在內(nèi)存中。如果更改、添加或刪除了規(guī)則文件,則守護(hù)程序可以使用命令?udevadm control reload_rules?重新裝載所有規(guī)則在內(nèi)存中的表示形式。運(yùn)行?/etc/init.d/boot.udev reload?時(shí)也會(huì)執(zhí)行此操作。有關(guān)?udev?規(guī)則及其語法的更多細(xì)節(jié),請(qǐng)參見第?12.6?節(jié) “使用?udev?規(guī)則影響內(nèi)核設(shè)備事件處理”。
每個(gè)接收到的事件都根據(jù)所提供的規(guī)則集進(jìn)行匹配。這些規(guī)則可以增加或更改事件環(huán)境鍵、為要?jiǎng)?chuàng)建的設(shè)備節(jié)點(diǎn)請(qǐng)求特定名稱、添加指向該節(jié)點(diǎn)的符號(hào)鏈接或者添加設(shè)備節(jié)點(diǎn)創(chuàng)建后運(yùn)行的程序。從內(nèi)核 netlink 套接字接收驅(qū)動(dòng)程序核心?uevent。
12.3.?驅(qū)動(dòng)程序、內(nèi)核模塊和設(shè)備?
設(shè)備的內(nèi)核總線驅(qū)動(dòng)程序探測(cè)。對(duì)于每個(gè)檢測(cè)到的設(shè)備,內(nèi)核都會(huì)在驅(qū)動(dòng)程序核心將 uevent 發(fā)送到?udev?守護(hù)程序時(shí)創(chuàng)建內(nèi)部設(shè)備結(jié)構(gòu)。總線設(shè)備通過特殊格式的 ID 來標(biāo)識(shí)自己,這可以識(shí)別設(shè)備的類型。通常,這些 ID 由供應(yīng)商和產(chǎn)品 ID 以及其他特定于子系統(tǒng)的值組成。每個(gè)總線都有自己對(duì)于這些 ID 的方案,稱為?MODALIAS。內(nèi)核獲取設(shè)備信息,由此組成一個(gè)?MODALIAS?ID 字符串,并將該字符串與事件一起發(fā)送。對(duì)于 USB 鼠標(biāo),如下所示:
MODALIAS=usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02每個(gè)設(shè)備驅(qū)動(dòng)程序都帶有它可以處理的設(shè)備的已知?jiǎng)e名列表。這個(gè)列表包含在內(nèi)核模塊文件中。程序 depmod 讀取 ID 列表并在內(nèi)核的?/lib/modules?目錄中為所有當(dāng)前可用的模塊創(chuàng)建文件?modules.alias。使用這種基礎(chǔ)結(jié)構(gòu),模塊的裝載就如為每個(gè)帶有?MODALIAS?關(guān)鍵字的事件調(diào)用?modprobe?一樣簡(jiǎn)單。如果調(diào)用?modprobe $MODALIAS,它將組成該設(shè)備的設(shè)備別名與模塊提供的別名相匹配。如果找到匹配的項(xiàng),則裝載該模塊。所有這些操作均由?udev?自動(dòng)觸發(fā)。
12.4.?引導(dǎo)和啟動(dòng)設(shè)備設(shè)置?
在?udev?守護(hù)程序運(yùn)行之前的引導(dǎo)進(jìn)程中發(fā)生的所有設(shè)備事件都會(huì)丟失,因?yàn)樘幚磉@些事件的基礎(chǔ)結(jié)構(gòu)保存在 root 文件系統(tǒng)中,并且此時(shí)不可用。為了彌補(bǔ)此損失,內(nèi)核提供了一個(gè)?uevent?文件,該文件位于 sysfs 文件系統(tǒng)每個(gè)設(shè)備的設(shè)備目錄中。通過將?add?寫入到該文件,內(nèi)核將再次發(fā)送引導(dǎo)時(shí)丟失的相同事件。/sys?觸發(fā)器中所有?uevent?文件的簡(jiǎn)單循環(huán)將再次觸發(fā)所有事件來創(chuàng)建設(shè)備節(jié)點(diǎn)并執(zhí)行設(shè)備設(shè)置。
例如,在引導(dǎo)期間出現(xiàn)的 USB 鼠標(biāo)可能不會(huì)由早期引導(dǎo)邏輯初始化,因?yàn)轵?qū)動(dòng)程序在那時(shí)不可用。此設(shè)備發(fā)現(xiàn)的事件丟失并且不能為該設(shè)備查找內(nèi)核模塊。不用手動(dòng)搜索可能連接的設(shè)備,udev?會(huì)在 root 文件系統(tǒng)可用后直接從內(nèi)核請(qǐng)求所有設(shè)備事件,以便 USB 鼠標(biāo)設(shè)備的事件可以再次運(yùn)行。現(xiàn)在它在裝入的 root 文件系統(tǒng)上找到內(nèi)核模塊,因此可以初始化 USB 鼠標(biāo)。
在用戶空間,設(shè)備冷插入序列和運(yùn)行時(shí)期間發(fā)現(xiàn)的設(shè)備之間沒有明顯的區(qū)別。在這兩種情況下,使用相同的規(guī)則來匹配并且運(yùn)行相同的配置程序。
12.5.?監(jiān)視正在運(yùn)行的?udev?守護(hù)程序?
程序?udevadm monitor?可以用于將驅(qū)動(dòng)程序核心事件和 udev 事件處理的計(jì)時(shí)可視化。
UEVENT[1185238505.276660] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb) UDEV [1185238505.279198] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb) UEVENT[1185238505.279527] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb) UDEV [1185238505.285573] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb) UEVENT[1185238505.298878] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input) UDEV [1185238505.305026] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input) UEVENT[1185238505.305442] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input) UEVENT[1185238505.306440] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input) UDEV [1185238505.325384] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input) UDEV [1185238505.342257] add /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input)UEVENT?行顯示內(nèi)核已經(jīng)通過 netlink 發(fā)送的事件。UDEV?行顯示已經(jīng)完成的 udev 事件處理程序。計(jì)時(shí)以微秒為單位顯示。UEVENT?和?UDEV?之間的時(shí)間是 udev 用于處理此事件或者 udev 守護(hù)程序延遲執(zhí)行從而同步此事件與相關(guān)以及已運(yùn)行的事件的時(shí)間。例如,硬盤分區(qū)的事件總是等待主磁盤設(shè)備事件完成,因?yàn)榉謪^(qū)事件可能依賴于主磁盤事件從硬件查詢的數(shù)據(jù)。
udevadm monitor --env?顯示完整的事件環(huán)境:
ACTION=add DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 SUBSYSTEM=input SEQNUM=1181 NAME="Logitech USB-PS/2 Optical Mouse" PHYS="usb-0000:00:1d.2-1/input0" UNIQ="" EV=7 KEY=70000 0 0 0 0 REL=103 MODALIAS=input:b0003v046DpC03Ee0110-e0,1,2,k110,111,112,r0,1,8,amlsfwudev 也將消息發(fā)送給 syslog。用于控制將哪些消息發(fā)送到系統(tǒng)日志的默認(rèn)系統(tǒng)日志優(yōu)先級(jí)在?udev?配置文件?/etc/udev/udev.conf?中指定。可以使用?udevadm control log_priority=level/number?更改正在運(yùn)行的守護(hù)程序的日志優(yōu)先權(quán)。
12.6.?使用?udev?規(guī)則影響內(nèi)核設(shè)備事件處理?
udev?規(guī)則可以與內(nèi)核添加到事件本身的屬性或者內(nèi)核導(dǎo)出到?sysfs?的任何信息匹配。規(guī)則還可以從外部程序請(qǐng)求其他信息。根據(jù)提供的規(guī)則匹配每個(gè)事件。所有規(guī)則都位于?/etc/udev/rules.d?目錄下。
規(guī)則文件中的每一行至少包含一個(gè)關(guān)鍵字值對(duì)。有兩種類型的關(guān)鍵字,匹配關(guān)鍵字和指派關(guān)鍵字。如果所有匹配關(guān)鍵字與它們的值匹配,則應(yīng)用此規(guī)則并將指派關(guān)鍵字指派給特定的值。匹配規(guī)則可以指定設(shè)備節(jié)點(diǎn)的名稱、添加指向該節(jié)點(diǎn)的符號(hào)鏈接或者運(yùn)行作為事件處理一部分的特定程序。如果找不到匹配的規(guī)則,則使用默認(rèn)設(shè)備節(jié)點(diǎn)名來創(chuàng)建設(shè)備節(jié)點(diǎn)。udev?手冊(cè)頁中描述了有關(guān)規(guī)則語法和提供用來與數(shù)據(jù)匹配或?qū)霐?shù)據(jù)的關(guān)鍵字的詳細(xì)信息。以下示例規(guī)則提供了?udev?規(guī)則語法的基本介紹。這些示例規(guī)則全部取自?/etc/udev/rules.d/50-udev-default.rules?下的?udev?默認(rèn)規(guī)則集。
例?12.1.?示例?udev?規(guī)則?
# console KERNEL=="console", MODE="0600", OPTIONS="last_rule"# serial devices KERNEL=="ttyUSB*", ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot"# printer SUBSYSTEM=="usb", KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"# kernel firmware loader SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"console?規(guī)則由三個(gè)鍵構(gòu)成:一個(gè)匹配鍵 (KERNEL) 和兩個(gè)賦值鍵(MODE、OPTIONS)。KERNEL?匹配規(guī)則搜索設(shè)備列表以查找類型為?console?的所有項(xiàng)。只有完全匹配才有效,才能觸發(fā)執(zhí)行此規(guī)則。在這種情況下,MODE?關(guān)鍵字為設(shè)備節(jié)點(diǎn)指派特殊權(quán)限,僅為此設(shè)備的擁有者指派讀寫權(quán)限。OPTIONS?關(guān)鍵字將該規(guī)則標(biāo)記為此類型的所有設(shè)備最后采用的規(guī)則。匹配此特殊設(shè)備類型的任何后續(xù)規(guī)則都不產(chǎn)生任何影響。
50-udev-default.rules?中不再提供?serial devices?規(guī)則,但該規(guī)則仍然值得考慮。該規(guī)則由兩個(gè)匹配關(guān)鍵字(KERNEL?和?ATTRS)和一個(gè)賦值關(guān)鍵字 (SYMLINK) 構(gòu)成。KERNEL?關(guān)鍵字搜索類型為?ttyUSB?的所有設(shè)備。該關(guān)鍵字使用?*?通配符匹配這些設(shè)備中的幾個(gè)。第二個(gè)匹配關(guān)鍵字?ATTRS?檢查任何?ttyUSB?設(shè)備的?sysfs?中的?product屬性文件是否包含特定字符串。賦值關(guān)鍵字 (SYMLINK) 將符號(hào)鏈接添加至該設(shè)備的?/dev/pilot?下。此關(guān)鍵字中使用的運(yùn)算符 (+=) 告知 udev 進(jìn)一步執(zhí)行此操作,即使前面或后面的規(guī)則添加其他符號(hào)鏈接。由于此規(guī)則包含兩個(gè)匹配關(guān)鍵字,因此僅當(dāng)兩個(gè)條件都滿足時(shí),才應(yīng)用。
printer?規(guī)則處理 USB 打印機(jī),其中包含兩個(gè)匹配關(guān)鍵字(SUBSYSTEM?和?KERNEL),并且必須同時(shí)應(yīng)用這兩個(gè)關(guān)鍵字,才能應(yīng)用整個(gè)規(guī)則。三個(gè)賦值鍵處理該設(shè)備類型的命名 (NAME)、符號(hào)設(shè)備鏈接 (SYMLINK) 的創(chuàng)建,以及此設(shè)備類型的組成員資格 (GROUP)。在?KERNEL?關(guān)鍵字中使用通配符?*?將使其匹配若干?lp?打印機(jī)設(shè)備。NAME?和?SYMLINK?關(guān)鍵字中都使用了替換項(xiàng),以便按內(nèi)部設(shè)備名稱擴(kuò)展這些字符串。例如,指向第一個(gè)?lp?USB 打印機(jī)的符號(hào)鏈接為?/dev/usblp0。
kernel firmware loader?規(guī)則用于使 udev 在運(yùn)行時(shí)期間通過外部助手腳本裝載其他固件。SUBSYSTEM?匹配關(guān)鍵字搜索?firmware?子系統(tǒng)。ACTION?關(guān)鍵字檢查是否添加了屬于?firmware?子系統(tǒng)的任何設(shè)備。RUN+=?關(guān)鍵字觸發(fā)執(zhí)行?firmware.sh?腳本,以便找到應(yīng)裝載的固件。
所有規(guī)則具有一些共同的特征:
-
每個(gè)規(guī)則由一個(gè)或多個(gè)以逗號(hào)分隔的關(guān)鍵字值對(duì)構(gòu)成。
-
關(guān)鍵字的運(yùn)算由運(yùn)算符確定。udev 規(guī)則支持多個(gè)不同的運(yùn)算符。
-
每個(gè)給定值必須用引號(hào)引起來。
-
規(guī)則文件的每一行代表一個(gè)規(guī)則。如果一個(gè)規(guī)則超過一行,請(qǐng)使用?\?合并不同行,就像在殼層語法中一樣。
-
udev?規(guī)則支持與?*、??和?[]?模式匹配的外殼式模式。
-
udev 規(guī)則支持替換。
12.6.1.?在?udev?規(guī)則中使用運(yùn)算符?
創(chuàng)建可以從若干不同運(yùn)算符選擇的關(guān)鍵字,具體取決于希望創(chuàng)建的關(guān)鍵字類型。匹配關(guān)鍵字通常僅用于查找匹配或明顯不匹配搜索值的值。匹配關(guān)鍵字包含以下運(yùn)算符之一:
==比較等于性。如果關(guān)鍵字包含搜索模式,則匹配該模式的所有結(jié)果均有效。
比較不等于性。如果關(guān)鍵字包含搜索模式,則匹配該模式的所有結(jié)果均有效。
賦值關(guān)鍵字可以使用下面的任何運(yùn)算符:
=為關(guān)鍵字指派值。如果關(guān)鍵字以前由一列值構(gòu)成,關(guān)鍵字將重置,并且僅指派一個(gè)值。
為包含一列項(xiàng)的關(guān)鍵字添加一個(gè)值。
指派最終值。不允許后面的規(guī)則進(jìn)行任何后續(xù)更改。
12.6.2.?在?udev?規(guī)則中使用替換項(xiàng)?
udev 規(guī)則支持使用占位符和替換項(xiàng)。請(qǐng)按照在其他任何腳本中的相同方式使用。在?udev?規(guī)則中可使用以下替換項(xiàng):
%r、$root設(shè)備目錄?/dev(默認(rèn))。
DEVPATH?的值。
KERNEL?的值或內(nèi)部設(shè)備名稱。
設(shè)備號(hào)。
設(shè)備文件的臨時(shí)名稱。
設(shè)備的主編號(hào)。
設(shè)備的次編號(hào)。
sysfs?屬性的值(由?attribute?指定)。
環(huán)境變量的值(由?variable?指定)。
PROGRAM?的輸出。
%?字符。
$?字符。
12.6.3.?使用?udev?匹配關(guān)鍵字?
匹配關(guān)鍵字描述應(yīng)用?udev?規(guī)則之前必須滿足的條件。以下匹配關(guān)鍵字可用:
ACTION事件操作的名稱,如?add?或?remove(添加或刪除設(shè)備時(shí))。
事件設(shè)備的設(shè)備路徑,如?DEVPATH=/bus/pci/drivers/ipw3945,用于搜索與 ipw3945 驅(qū)動(dòng)程序有關(guān)的所有事件。
事件設(shè)備的內(nèi)部(內(nèi)核)名稱。
事件設(shè)備的子系統(tǒng),如?SUBSYSTEM=usb(用于與 USB 設(shè)備有關(guān)的所有事件)。
事件設(shè)備的 sysfs 屬性。例如,要匹配?vendor?屬性文件名中包含的字符串,可以使用?ATTR{vendor}=="On[sS]tream"。
讓?udev?向上搜索設(shè)備路徑以查找匹配的設(shè)備名稱。
讓?udev?向上搜索設(shè)備路徑以查找匹配的設(shè)備子系統(tǒng)名稱。
讓?udev?向上搜索設(shè)備路徑以查找匹配的設(shè)備驅(qū)動(dòng)程序名稱。
讓?udev?向上搜索設(shè)備路徑以查找具有匹配的?sysfs?屬性值的設(shè)備。
環(huán)境變量的值,如?ENV{ID_BUS}="ieee1394,用于搜索與該 FireWire 總線 ID 有關(guān)的所有事件。
讓?udev?執(zhí)行外部程序。程序必須返回退出碼零,才能成功。程序的輸出(打印到 stdout)可用于?RESULT關(guān)鍵字。
匹配上次?PROGRAM?調(diào)用的輸出字符串。在與?PROGRAM?關(guān)鍵字相同的規(guī)則中包含該關(guān)鍵字,或在后面的一個(gè)中。
12.6.4.?使用?udev?指派關(guān)鍵字?
與上述匹配鍵相比,賦值鍵未描述必須滿足的條件。它們將值、名稱和操作指派給由?udev?維護(hù)的設(shè)備節(jié)點(diǎn)。
NAME將創(chuàng)建的設(shè)備節(jié)點(diǎn)的名稱。在一個(gè)規(guī)則設(shè)置節(jié)點(diǎn)名稱之后,將對(duì)該節(jié)點(diǎn)忽略帶有?NAME?關(guān)鍵字的其他所有規(guī)則。
與要?jiǎng)?chuàng)建的節(jié)點(diǎn)有關(guān)的符號(hào)鏈接名稱。多個(gè)匹配的規(guī)則可添加要使用設(shè)備節(jié)點(diǎn)創(chuàng)建的符號(hào)鏈接。也可以通過使用空格字符分隔符號(hào)鏈接名稱,在一個(gè)規(guī)則中為一個(gè)節(jié)點(diǎn)指定多個(gè)符號(hào)鏈接。
新設(shè)備節(jié)點(diǎn)的權(quán)限。此處指定的值重寫已編譯的任何值。
指定要寫入事件設(shè)備的?sysfs?屬性的值。如果使用?==?運(yùn)算符,也將使用該關(guān)鍵字匹配 sysfs 屬性的值。
告知?udev?將變量導(dǎo)出到環(huán)境。如果使用?==?運(yùn)算符,也將使用該關(guān)鍵字匹配環(huán)境變量。
告知?udev?向程序列表添加要為該設(shè)備執(zhí)行的程序。請(qǐng)記住,將此程序限制于很短的任務(wù),以免妨礙此設(shè)備的后續(xù)事件。
添加?GOTO?可跳至的標(biāo)簽。
告知?udev?跳過一些規(guī)則,繼續(xù)執(zhí)行具有按?GOTO?關(guān)鍵字引用的標(biāo)簽的規(guī)則。
將變量裝載入外部程序輸出之類的事件環(huán)境中。udev 導(dǎo)入不同類型的若干變量。如果未指定任何類型,udev?將嘗試根據(jù)文件許可權(quán)限的可執(zhí)行位來自行確定類型。
-
program?告知 udev 執(zhí)行外部程序并導(dǎo)入其輸出。
-
file?告知 udev 導(dǎo)入文本文件。
-
parent?告知 udev 從父設(shè)備導(dǎo)入儲(chǔ)存的關(guān)鍵字。
告知?udev?等待要為某個(gè)設(shè)備創(chuàng)建的指定?sysfs?文件。例如,WAIT_FOR_SYSFS="ioerr_cnt"?通知?udev?等待?ioerr_cnt?文件創(chuàng)建完成。
OPTION?關(guān)鍵字可能有若干值:
-
last_rule?告知 udev 忽略后面的所有規(guī)則。
-
ignore_device?告知 udev 完全忽略此事件。
-
ignore_remove?告知 udev 忽略后面針對(duì)設(shè)備的所有刪除事件。
-
all_partitions?告知 udev 為塊設(shè)備上的所有可用分區(qū)創(chuàng)建設(shè)備節(jié)點(diǎn)。
12.7.?永久設(shè)備命名?
動(dòng)態(tài)設(shè)備目錄和?udev?規(guī)則基礎(chǔ)結(jié)構(gòu)可以為所有磁盤設(shè)備提供固定名稱,而不考慮它們的識(shí)別順序或設(shè)備使用的連接。內(nèi)核創(chuàng)建的每個(gè)相應(yīng)的塊設(shè)備由工具根據(jù)有關(guān)特定總線、驅(qū)動(dòng)器類型或者文件系統(tǒng)的特殊知識(shí)進(jìn)行檢查。除了動(dòng)態(tài)內(nèi)核提供的設(shè)備節(jié)點(diǎn)名,udev?還維護(hù)各種指向該設(shè)備的永久符號(hào)鏈接:
/dev/disk |-- by-id | |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B -> ../../sda | |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part1 -> ../../sda1 | |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part6 -> ../../sda6 | |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part7 -> ../../sda7 | |-- usb-Generic_STORAGE_DEVICE_02773 -> ../../sdd | `-- usb-Generic_STORAGE_DEVICE_02773-part1 -> ../../sdd1 |-- by-label | |-- Photos -> ../../sdd1 | |-- SUSE10 -> ../../sda7 | `-- devel -> ../../sda6 |-- by-path | |-- pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda | |-- pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1 | |-- pci-0000:00:1f.2-scsi-0:0:0:0-part6 -> ../../sda6 | |-- pci-0000:00:1f.2-scsi-0:0:0:0-part7 -> ../../sda7 | |-- pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sr0 | |-- usb-02773:0:0:2 -> ../../sdd | |-- usb-02773:0:0:2-part1 -> ../../sdd1 `-- by-uuid|-- 159a47a4-e6e6-40be-a757-a629991479ae -> ../../sda7|-- 3e999973-00c9-4917-9442-b7633bd95b9e -> ../../sda6`-- 4210-8F8C -> ../../sdd112.8.?udev?使用的文件?
/sys/*Linux 內(nèi)核提供的虛擬文件系統(tǒng),用于導(dǎo)出所有當(dāng)前已知設(shè)備。此信息由?udev?用于在?/dev?中創(chuàng)建設(shè)備節(jié)點(diǎn)
動(dòng)態(tài)創(chuàng)建的設(shè)備節(jié)點(diǎn)和引導(dǎo)時(shí)從?/lib/udev/devices/*?復(fù)制的靜態(tài)內(nèi)容
以下文件和目錄包含?udev?基礎(chǔ)結(jié)構(gòu)的關(guān)鍵元素:
/etc/udev/udev.conf主?udev?配置文件。
udev 事件匹配規(guī)則.
靜態(tài)?/dev?內(nèi)容。
從?udev?規(guī)則調(diào)用的幫助程序。
12.9.?更多信息?
有關(guān)?udev?基礎(chǔ)結(jié)構(gòu)的更多信息,請(qǐng)參見以下手冊(cè)頁:
udev有關(guān)?udev、關(guān)鍵字、規(guī)則和其他重要配置問題的常規(guī)信息。
udevadm?可用于控制?udev?的運(yùn)行時(shí)行為、請(qǐng)求內(nèi)核事件、管理事件隊(duì)列,以及提供簡(jiǎn)單的調(diào)試機(jī)制。
有關(guān)?udev?事件管理守護(hù)程序的信息。
轉(zhuǎn)載于:https://www.cnblogs.com/erhu-67786482/p/11204966.html
總結(jié)
以上是生活随笔為你收集整理的使用 udev 进行动态内核设备管理(转自suse文档)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebCast《实战ASP.NET AJ
- 下一篇: HihoCoder - 1175 拓扑排