網(wǎng)站地圖制作怎么做?360網(wǎng)站排名優(yōu)化
1.udev概述
udev是 Linux2.6內核里的一個功能,它替代了原來的 devfs,成為當前 Linux 默認的設備管理工具,能夠根據(jù)系統(tǒng)中的硬件設備的狀態(tài)動態(tài)更新設備文件,包括設備文件的創(chuàng)建,刪除等。
udev以守護進程的形式運行,通過幀聽內核發(fā)出來的uevent來管理/dev目錄下的設備文件。不像之前的設備管理工具,udev在用戶空間運行,而不在內核空間運行。
udev會根據(jù)/etc/udev/udev.conf文件中的udev_rules指定的目錄,逐個檢查該目錄下的文件,這個目錄下的文件都是針對某類或某個設備應該施行什么措施的規(guī)則文件。
2.udev作用
Udev用于動態(tài)管理設備的設備管理器,主要是在設備插入或移除時,負責管理與這些事件相關聯(lián)設備節(jié)點以及執(zhí)行相應動作。
設備發(fā)現(xiàn)和管理:udev負責在 Linux 系統(tǒng)中檢測和管理設備。當新設備插入或舊設備被移除時,udev負責識別這些變化,并在 /dev 目錄下創(chuàng)建或刪除相應的設備節(jié)點。
1.設備命名:Udev為設備節(jié)點提供了一個規(guī)范的命名機制,以便用戶和應用程序能夠更容易地識別設備。這有助于確保相同類型的設備在不同系統(tǒng)上都有相似的設備節(jié)點名稱。
2.熱插拔支持:Udev支持熱插拔設備,即在系統(tǒng)運行時插入或移除設備。它可以動態(tài)地更新設備節(jié)點,而無需重新啟動系統(tǒng)。
3.規(guī)則系統(tǒng):Udev使用規(guī)則文件來定義在設備事件發(fā)生時要執(zhí)行的操作。這些規(guī)則可以基于設備屬性、類型和其他標識符來匹配。規(guī)則允許用戶執(zhí)行自定義腳本、設置環(huán)境變量、創(chuàng)建符號鏈接等操作。
4.持久化設備節(jié)點:Udev提供了機制,以確保設備節(jié)點的穩(wěn)定性。即使設備在重新啟動后未連接,Udev仍會分配相同的設備節(jié)點名稱,以便應用程序可以依賴特定的設備節(jié)點。
5.提供額外信息:Udev為每個設備節(jié)點提供了大量的額外信息,例如設備類型、設備路徑、驅動程序信息等。這些信息可用于用戶空間的應用程序,以更好地理解和利用系統(tǒng)中的設備。
所有設備在Linux是以設備文件的形式存在,在早期的Linux版本中,/dev目錄包含了所有可能出現(xiàn)的設備的設備文件。很難想想Linux用戶如何在這些大量的設備文件中找到匹配條件的設備文件?,F(xiàn)在udev只為那些連接到Linux操作系統(tǒng)的設備產生設備文件。并且udev能通過定義一個udev規(guī)則rule來產生匹配設備屬性的設備文件,這些設備屬性可以是內核設備名稱、總線路徑、廠商名稱、型號、序列號或者磁盤大小等。
1.動態(tài)管理:當設備添加/刪除時,udev守護進行幀聽來自內核的 uevent,以此添加或者刪除 /dev下的設備文件,所以udev只為已經(jīng)連接的設備產生設備文件,而不會在 /dev 下產生大量虛無的設備文件。
2.自定義命名規(guī)則:通過 Linux 默認的規(guī)則文件,udev在/dev/ 里為所有的設備定義了內核設備名稱,比如 /dev/sda、/dev/hda、/dev/fd 等等。由于udev是在用戶空間運行,Linux 用戶可以通過自定義的規(guī)則文件,靈活地產生標識性強的設備文件名,比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer 等等。
3.設定設備的權限和所有者/組:udev可以按一定的條件來設置設備文件的權限和設備文件所有者/組。在不同的udev版本中,實現(xiàn)的方法不同,在 “如何配置和使用udev” 中會詳解。
3.配置udev
配置使用udev通常涉及創(chuàng)建和編輯udev規(guī)則,這些規(guī)則定義了設備在系統(tǒng)中行為。在使用udev之前,了解一些基本概念,例如subsystem、KERNEL、ACTION等。
鍵 | 含義 |
---|---|
ACTION | 事件 (uevent) 的行為,例如:add( 添加設備 )、remove( 刪除設備 )。 |
KERNEL | 在內核里看到的設備名字,比如sd*表示任意SCSI磁盤設備 |
DEVPATH | 內核設備路徑,比如/devices/* |
SUBSYSTEM | 子系統(tǒng)名字,例如:sda 的子系統(tǒng)為 block。 |
BUS | 總線的名字,比如IDE,USB,iscsi |
DRIVER | 設備驅動的名字,比如ide-cdrom |
ID | 獨立于內核名字的設備名字 |
SYSFS{value} | sysfs屬性值,可以表示任意 |
ENV{key} | 環(huán)境變量,可以表示任意 |
PROGRAM | 可執(zhí)行的外部程序,如果程序返回0值,該鍵則認為為真(true) |
RESULT | 上一個PROGRAM調用返回的標準輸出。 |
NAME | 根據(jù)這個規(guī)則創(chuàng)建的設備文件的文件名。注意:僅僅第一行的NAME描述是有效的,后面的均忽略。如果你想使用使用兩個以上的名字來訪問一個設備的話,可以考慮SYMLINK鍵。 |
SYMLINK | 為/dev/下的設備文件產生符號鏈接。由于udev只能為某個設備產生一個設備文件,所以為了不覆蓋系統(tǒng)默認的 udev 規(guī)則所產生的文件,推薦使用符號鏈接。 |
OWNER | 設備文件的屬組 |
GROUP | 設備文件所在的組。 |
MODE | 設備文件的權限,采用8進制 |
RUN | 為設備而執(zhí)行的程序列表 |
LABEL | 在配置文件里為內部控制而采用的名字標簽(下面的GOTO服務) |
GOTO | 跳到匹配的規(guī)則(通過LABEL來標識),有點類似程序語言中的GOTO |
IMPORT{type} | 導入一個文件或者一個程序執(zhí)行后而生成的規(guī)則集到當前文件 |
WAIT_FOR_SYSFS | 等待一個特定的設備文件的創(chuàng)建。主要是用作時序和依賴問題。 |
OPTIONS | 特定的選項:last_rule 對這類設備終端規(guī)則執(zhí)行;ignore_device 忽略當前規(guī)則;ignore_remove 忽略接下來的并移走請求。all_partitions 為所有的磁盤分區(qū)創(chuàng)建設備文件。 |
在/etc/udev/rules.d/目錄下,有一些默認的udev規(guī)則文件,例如70-persistent-net.rules??赏ㄟ^創(chuàng)建新的規(guī)則文件或編輯已有的規(guī)則文件來定義udev規(guī)則。規(guī)則文件的命名約定是以數(shù)字和描述性名稱開頭,例如10-local.rules。數(shù)字決定了規(guī)則的優(yōu)先級,數(shù)字越小,規(guī)則越早被處理。
KERNEL==”*”, OWNER=”root” GROUP=”root”, MODE=”0600″
KERNEL==”tty”, NAME=”%k”, GROUP=”tty”, MODE=”0666″, OPTIONS=”last_rule”
KERNEL==”scd[0-9]*”, SYMLINK+=”cdrom cdrom-%k”
KERNEL==”hd[a-z]”, BUS==”ide”, SYSFS{removable}==”1″, SYSFS{device/media}==”cdrom”, SYMLINK+=”cdrom cdrom-%k”
ACTION==”add”, SUBSYSTEM==”scsi_device”, RUN+=”/sbin/modprobe sg”
上面的例子給出了5個規(guī)則,每一個都是KERNEL或者ACTION鍵開頭:
第一個則是缺省的,他匹配任意被內核識別到的設備,然后設定這些設備的屬組是root,組是root,訪問權限模式是0600(-rw——-)。這也是一個安全的缺省設置保證所有的設備在默認情況下只有root可以讀寫。
第二個規(guī)則也是比較典型的規(guī)則了。它匹配終端設備(tty),然后設置新的權限為0600,所在的組是tty。它也設置了一個特別的設備文件名:%K。在這里例子里,%k代表設備的內核名字。那也就意味著內核識別出這些設備是什么名字,就創(chuàng)建什么樣的設備文件名。
第三行開始的KERNEL==”scd[0-9]*”,表示 SCSI CD-ROM 驅動. 它創(chuàng)建一對設備符號連接:cdrom和cdrom-%k。
第四行,開始的 KERNEL==”hd[a-z]“, 表示ATA CDROM驅動器。這個規(guī)則創(chuàng)建和上面的規(guī)則相同的符號連接。ATA CDROM驅動器需要sysfs值以來區(qū)別別的ATA設備,因為SCSI CDROM可以被內核唯一識別。.
第五行以 ACTION==”add”開始,它告訴udev增加 /sbin/modprobe sg 到命令列表,當任意SCSI設備增加到系統(tǒng)后,這些命令將執(zhí)行。其效果就是計算機應該會增加sg內核模塊來偵測新的SCSI設備。
編寫規(guī)則: 規(guī)則的編寫使用基于鍵值對的語法。以下是一個簡單的規(guī)則示例:
當插入一個塊設備并且設備的內核名是sda時,執(zhí)行腳本
SUBSYSTEM=="block", KERNEL=="sda", ACTION=="add", RUN+="/bin/my_custom_script"
在這個例子中,SUBSYSTEM=="block"表示規(guī)則適用于塊設備,KERNEL=="sda"表示設備的內核名是sda,ACTION==“add"表示設備被添加,RUN+=”/bin/my_custom_script"表示在添加時執(zhí)行/bin/my_custom_script腳本。
重新加載規(guī)則: 在編輯或創(chuàng)建規(guī)則文件后,需要重新加載udev規(guī)則。
sudo udevadm control --reload-rules
測試規(guī)則: 插入或移除設備,觀察規(guī)則是否按照預期執(zhí)行??梢允褂胾devadm monitor命令來監(jiān)視udev事件。
sudo udevadm monitor
在另一個終端中插入或移除設備,觀察監(jiān)視器中的輸出。
查看udev事件信息: 使用udevadm info命令來查看設備的udev信息。
sudo udevadm info --attribute-walk --path=/sys/path/to/device
替換/sys/path/to/device為實際設備的路徑。對udev的配置更改可能會影響設備的命名和系統(tǒng)的行為,因此在進行更改之前,請確保了解其影響。
例如,以下規(guī)則表示當USB設備插入時,在/tmp/usb_log.txt文件中寫入一條日志:
ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/sh -c 'echo USB device inserted >> /tmp/usb_log.txt'"
可以根據(jù)自己的需求添加其他規(guī)則。
總體而言,Udev 通過規(guī)則匹配和執(zhí)行動作的方式,實現(xiàn)了對設備事件的監(jiān)聽和處理,從而支持 Linux 系統(tǒng)的熱插拔機制。這使得在系統(tǒng)運行時插入或拔出設備時,系統(tǒng)能夠動態(tài)地適應這些變化。
udev是一個設備管理工具,udev以守護進程的形式運行,通過偵聽內核發(fā)出來的uevent來管理/dev目錄下的設備文件。通過偵聽內核發(fā)出來的硬件數(shù)據(jù)(事件),在用戶空間為這個硬件去創(chuàng)建對應代表該硬件的文件,應用程序例如adb就可以通過該文件操作到硬件設備。
udev在用戶空間運行,而不在內核空間運行。它能夠根據(jù)系統(tǒng)中的硬件設備的狀態(tài)動態(tài)更新設備文件,包括設備文件的創(chuàng)建,刪除等。設備文件通常放在/dev目錄下。使用udev后,在/dev目錄下就只包含系統(tǒng)中真正存在的設備。
4.更多文章
==============================
新的文章內容和分享已更新在:
|工|·-·|重|·-·|號|:協(xié)議森林
==============================