Udev

udev 無法使用 ID_PATH 創建持久命名的符號連結

  • October 17, 2017

我想根據連接的埠永久命名(USB)設備。

使用 udevadmin 我發現了以下資訊

# udevadm info --name=input/event3 | grep ID_PATH
E: ID_PATH=platform-ci_hdrc.1-usb-0:1.1.4:1.0
E: ID_PATH_TAG=platform-ci_hdrc_1-usb-0_1_1_4_1_0

所以該設備似乎有屬性 ID_PATH 和 ID_PATH_TAG,看起來像我想要的。

我添加到匹配的 udev.rule

SYMLINK+="foo-%E{ID_PATH_TAG} foo1-$env{ID_PATH} foo2-$env{ID_PATH_TAG}"

(這 3 個變種只是在拼命嘗試……一旦起作用,一個就足夠了。)

規則被執行並且日誌中沒有錯誤(日誌級別 = 調試)。

但是,創建的符號連結被稱為

/dev/foo-
/dev/foo1-
/dev/foo2-

因此,執行我的規則時,似乎尚未設置屬性 ID_PATH 和 ID_PATH_TAG。我需要注意任何訂購嗎?

我看到使用 ID_PATH 的現有規則都是 60-* 或更高。除了歷史原因,我的 45-* 沒有什麼特別的。

重命名我的規則文件表明規則編號會有所不同:

  1. 59-foo.rules: ID_PATH/ID_PATH_TAG 展開為空字元串
  2. 60-foo.rules: ID_PATH/ID_PATH_TAG 展開為空字元串
  3. 61-foo.rules: ID_PATH/ID_PATH_TAG 正確展開

解釋在60-persistent-input.rules包含

SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"

我找不到內置的文件,但我猜 path_id 內置將 ID_PATH/ID_PATH_TAG 放入環境中。

首先執行此命令以獲取設備的屬性列表。

udevadm info -a -p $(udevadm info -q path -n <devpath>)

那麼你可以做這樣的事情

... SYMLINK+=”device_$attr{serial}”, ...

有時你必須用你需要的數據設置一個環境變數,像這樣。

... ENV{SERIAL_NUMBER}="$attr{serial_number}"

以後像這樣使用它。

... SYMLINK+="device_$env{SERIAL_NUMBER}"

引用自:https://unix.stackexchange.com/questions/231118