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