在啟動時執行 udev 規則

在啟動時執行 udev 規則

我有 National Instruments USB<->GPIB 橋接器。它是一個USB板,需要特殊的程式才能使用。我安裝了 linux_gpib 軟體包,它提供了兩個核心模組:gpib_commonni_usb_gpib。此外,gpib_config在我可以與 GPIB 總線上的任何儀器通訊之前,必須先執行該工具。訣竅在於,板子插入 USB 後需要大約 2 秒鐘進行內部初始化,然後gpib_config命令才會生效。因此,我有以下99-gpib.rulesudev 規則可以完美完成工作:

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3923", ATTR{idProduct}=="709b", RUN+="/bin/sh -c '/usr/bin/sleep 2; /usr/sbin/gpib_config --minor 0'"

KERNEL=="gpib[0-9]*", MODE="0660", GROUP="gpib"

問題是只有當我在主機系統啟動並運行時插入主機板時它才起作用。當我插入加密狗後重新啟動時,我可以看到兩個內核模組均已加載,但該板無法使用,這意味著該gpib_config工具未執行。如果我手動運行它,它會完美運行。

由於重新啟動的情況更加真實,然後在系統運行時插入它,我需要正確的方法讓 udev 在啟動時執行此操作。當然,我可以編寫一些初始化腳本來檢查主機板是否已插入、內核模組是否已加載,並在加載過程中運行該工具,但我認為這是 udev 的工作,因為它需要處理硬體。有任何想法嗎?

答案1

問題出在執行 RUN 內容的 udev 中相應模組加載,因此gpib_config無法配置闆卡。解決方法是在系統引導時啟動 udev 之前載入模組。我認為這不是一個真正的解決方案。

相關內容