![](/img/trans.png)
[英]ftdi d2xx conflict with ftdi_sio on linux - How to remove ftdi_sio automatically
[英]How to automatically run 'sudo modprobe -r ftdi_sio' whenever the device is plugged into my computer
我有一個正在使用的 USB 設備,我正在使用帶有 Google Chrome 的 WebUSB 開發應用程序。 問題是每當我將 USB 設備插入我的 Linux 計算機時,我必須手動運行sudo modprobe -r ftdi_sio
來卸載它。
我希望每當我將該設備插入計算機時自動卸載它,而不必每次都手動輸入。
關於如何實施的任何想法? 幫助將不勝感激
將您的命令放入 /etc/rc.local 並重新啟動。 看看它是否有效。 或者您可以找到 other.ko 是如何配置為在系統啟動期間自動加載的。 按照相同的方式使您的模塊自動加載。
一種選擇是將 ftdi_sio 模塊“列入黑名單”以阻止其自動加載。 為此,請創建以下文件:
/etc/modprobe.d/ftdi_sio-blacklist.conf
# This is a comment. Change it if you want.
blacklist ftdi_sio
正確的方法是創建一個 udev 規則,該規則在連接特定 USB 設備時觸發。
創建文件 /etc/udev/rules.d/99-usb-load.rules,並將“7523”和“1a86”替換為 USB 設備的 Product ID 和 Vendor ID。
# For debugging if the rule is working
ACTION=="add", ENV{ID_MODEL_ID}=="7523", ENV{ID_VENDOR}=="1a86", RUN+="/bin/sh -c '/bin/echo inserted device >> /tmp/udev_file'"
ACTION=="remove", ENV{ID_MODEL_ID}=="7523", ENV{ID_VENDOR}=="1a86", RUN+="/bin/sh -c '/bin/echo removed device >> /tmp/udev_file'"
# Actual rules
ACTION=="add", ENV{ID_MODEL_ID}=="7523", ENV{ID_VENDOR}=="1a86", RUN+="/sbin/rmmod ftdi_sio"
ACTION=="remove", ENV{ID_MODEL_ID}=="7523", ENV{ID_VENDOR}=="1a86", RUN+=""
重新啟動 udev 守護程序
sudo /etc/init.d/udev restart
只要連接了具有匹配 PID/VID 的 USB 設備,就會執行添加規則,並且它將卸載模塊 ftdi_sio。 前兩個規則用於調試目的,將一行寫入 /tmp/udev_file 並可用於驗證規則是否已被觸發。
看起來 USB 設備是新設備,一旦插入就沒有現有的驅動程序可供處理。您需要一條中斷線和一個 USB 驅動程序代碼來滿足您的要求。 您需要將您的設備注冊到該驅動程序並將驅動程序注冊到 USB 總線。 還需要編寫適當的中斷例程,以便在插入設備后立即調用。這將使其按您的意願工作!
如果您已經有 USB 設備的.rules
文件,那么 append 將以下內容添加到/etc/udev/rules.d/
目錄中的預先存在的文件中。 否則,在/etc/udev/rules.d/
目錄中創建一個文件,內容如下:
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ACTION=="add", RUN+="/sbin/rmmod ftdi_sio"
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6010", ACTION=="remove", RUN+=""
這意味着,當插入帶有 vendorID 0403
和產品 ID 6010
的設備時,它會運行/sbin/rmmod ftdi_sio
,這會刪除ftdi_sio
模塊。 第二條規則意味着拔下電源時不會運行任何東西。 有關如何命名.rules
文件(例如99-mydevice.rules
)的更多信息,請參閱[編寫 udev 規則]
您必須將0403
和6010
替換為設備的供應商 ID 和產品 ID。 插入 USB 設備后,在命令行上運行lsusb
可以找到供應商 ID 和產品 ID。 它將具有以下格式:
Bus xxx Device xxx: ID idVendor:idProduct ManufacturerName
在/etc/udev/rules.d/
目錄中創建或編輯.rules
文件后,請務必使用以下命令重新加載.rules
文件:
sudo udevadm control --reload
關於 udev 規則的一些進一步參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.