1. 程式人生 > >關於UDEV規則的實踐總結

關於UDEV規則的實踐總結

參考資料udev中文手冊-金步國
(一些非常基本的規則都可以在裡面找到)

1. 基本配置

  1. 配置檔案/etc/udev/udev.conf
  2. rules規則目錄/etc/udev/rules.d/
  3. 開啟除錯日誌,在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. 例項

  1. 當子系統是’tty’——即虛擬終端時,如果其核心名稱滿足以下正則表示式,則其TAG追加”systemd”字串
SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd"
  1. 當子系統是’block’——即塊裝置時,如果此時的動作是新增——即插入裝置時,又如果環境變數DM_UDEV_DISABLE_OTHER_RULES_FLAG
    的值為1,則設定一個環境變數SYSTEMD_READY為0
SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0"