簡體   English   中英

每當設備插入我的計算機時如何自動運行“sudo modprobe -r ftdi_sio”

[英]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 規則]

您必須將04036010替換為設備的供應商 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 規則的一些進一步參考:

debian 維基

拱維基

編寫udev規則

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM