Udev
udev 無法使用 ID_PATH 創建持久命名的符號連結
我想根據連接的埠永久命名(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-* 沒有什麼特別的。
重命名我的規則文件表明規則編號會有所不同:
59-foo.rules
: ID_PATH/ID_PATH_TAG 展開為空字元串60-foo.rules
: ID_PATH/ID_PATH_TAG 展開為空字元串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}"