關於UDEV規則的實踐總結
阿新 • • 發佈:2019-01-10
參考資料:udev中文手冊-金步國
(一些非常基本的規則都可以在裡面找到)
1. 基本配置
- 配置檔案
/etc/udev/udev.conf
- rules規則目錄
/etc/udev/rules.d/
- 開啟除錯日誌,在udev.conf中設定
udev_log="debug"
, 這udev的除錯資訊真沒眼看,感覺亂糟糟的
2. udev基本規則
1. 第一條規則就是,必須先有匹配規則,後有賦值
2. 自定義的規則一般放到/etc/udev/rules.d/
目錄下, 而且,一定不要輕易修改其他的.rules檔案
3. 匹配規則
1)使用==、!=分別表示相等和不相等
2)可以直接使用/lib/udev目錄下的程式或指令碼,也可以自己往裡面寫程式然後在規則中直接用程式名呼叫
3)如果呼叫的不是/lib/udev目錄下的程式,需要帶絕對路徑
4)匹配時左邊一定要是規範的關鍵字變數,可以#udevadm info -a -n /dev/sda5
檢視sda5上的關鍵字
5)匹配時右邊一定要是字串或者可以帶如%k %c %p這樣的內建變數
6)匹配時右邊支援一般的萬用字元
4. 賦值
1)使用’=’賦值
2)賦值時左邊的變數名可以是自定義的
3)右邊的值也可以使用%p %c %n這類內建變數
3.除錯方法
1. 檢視分割槽的udev相關資訊
# udevadm info -a -n /dev/sda5
(注意這裡是要看sda5下面的資訊,其他條目是它的父類裝置的資訊)
2. 檢視分割槽的詳細資訊
# udevadm info -n /dev/sda5
(注意這裡看到的資訊不一定能用到規則裡!!!)
3. 測試規則
# udevadm test /block/sda/sda5
(注意這裡/block/sda/sda5可以用# udevadm info -q path -n /dev/sda5
檢視,只取數字後面的路徑即可)
4. 例項
- 當子系統是’tty’——即虛擬終端時,如果其核心名稱滿足以下正則表示式,則其TAG追加”systemd”字串
SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd"
- 當子系統是’block’——即塊裝置時,如果此時的動作是新增——即插入裝置時,又如果環境變數
DM_UDEV_DISABLE_OTHER_RULES_FLAG
SYSTEMD_READY
為0
SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"