你能根據一些 bash 輸出添加一個 udev 規則嗎?
我的機器人上有兩個雷射雷達連接到我的 Jetson。一個在前面,一個在後面。跟踪哪個在哪裡很重要,但雷射雷達通過某種 UART 橋接器連接到 USB 埠。這意味著 Linux 只能看到橋,而不是橋後面的雷射雷達。這些橋在屬性方面看起來相同,因此為它們制定 udev 規則比平時要復雜一些。
我可以從以 C++ 執行的雷射雷達 SDK 訪問正確的序列號。我製作了一個程序,給定一個 USB 埠,它給出了我希望該雷射雷達具有的正確符號連結名稱。但是我在創建符號連結時遇到了問題,因為我不確定如何基於一些 bash 腳本觸發 udev 規則。
目前,腳本路徑如下所示: udev rule 呼叫我的腳本並傳遞設備名稱 -> 腳本查詢 sdk 的序列號並查找正確的位置 -> 腳本基於此邏輯添加新的 udev 規則 -> 腳本執行
udevadm control --reload-rules && udevadm trigger
。這會創建正確的 udev 規則,但不會觸發它,因此不會創建符號連結。如果您在此階段重新插入雷射雷達,則會創建符號連結。但是,我希望這個過程更加自動化。進行的正確方法是什麼?手動創建符號連結是否有意義
ln -s /dev/ttyUSB1 /dev/ttyLIDAR_FRONT
?bash 腳本可以強制執行 udev 規則,還是 udevadm 可以在 cli 中執行規則?謝謝。
至少有兩種方法可以解決這個問題,而無需創建新規則並載入它們。
- 不要讓腳本創建新
udev
規則,而是直接創建適當的符號連結。據我所知,這樣做你失去的所有東西,而不是
udev
創建符號連結,是在後續udev
規則中查找創建的符號連結的能力,以及udev
連結優先級管理。 2. 讓您的腳本輸出變數賦值,並在IMPORT{program}
udev
規則中使用它,然後創建符號連結,引用腳本設置的變數。這將涉及到讓您的腳本輸出
TARGET=symlinkname
(最好使用更具體的變數名稱),然後SYMLINK
創建引用%E{TARGET}
. 見手冊;_udev
您也很有可能在/lib/udev/rules.d
系統中找到現有規則中的範例。