将设备插入计算机后如何自动运行“ sudo modprobe -r ftdi_sio”

我有一个正在使用的USB设备,并且正在使用带有Google Chrome的WebUSB开发应用程序。 问题是,每当我将USB设备插入Linux计算机时,都必须手动运行sudo modprobe -r ftdi_sio来卸载它。

我希望每当将设备插入计算机时就自动卸载它,而不必每次都手动键入它。

有关如何实施的任何想法?帮助将不胜感激

jsyzjzg 回答:将设备插入计算机后如何自动运行“ sudo modprobe -r ftdi_sio”

如果您已经拥有USB设备的.rules文件,则将以下内容附加到/etc/udev/rules.d/目录中的现有文件中。否则,请在/etc/udev/rules.d/目录中创建一个包含以下内容的文件:

ATTRS{idVendor}=="0403",ATTRS{idProduct}=="6010",ACTION=="add",RUN+="/sbin/rmmod ftdi_sio"
ATTRS{idVendor}=="0403",ACTION=="remove",RUN+=""

这意味着当插入具有供应商ID 0403和产品ID 6010的设备时,它将运行/sbin/rmmod ftdi_sio,这将删除ftdi_sio模块。第二条规则意味着拔掉插头后什么也不会运行。有关如何命名.rules文件(例如99-mydevice.rules)的更多信息,请参见[writing udev rules]

您必须用设备的供应商ID和产品ID替换04036010。插入USB设备后,可以通过在命令行上运行lsusb来找到供应商ID和产品ID。格式为:

Bus xxx Device xxx: ID idVendor:idProduct ManufacturerName

.rules目录中创建或编辑/etc/udev/rules.d/文件之后,请确保使用以下命令重新加载.rules文件:

sudo udevadm control --reload

有关udev规则的更多参考:

debian wiki

arch wiki

writing udev rules

,

将命令放在/etc/rc.local中,然后重新启动。看看是否可行。或者,您可以找到如何将其他.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,并用USB设备的产品ID和供应商ID替换“ 7523”和“ 1a86”。

# 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",RUN+="/bin/sh -c '/bin/echo removed device >> /tmp/udev_file'"

# Actual rules
ACTION=="add",RUN+="/sbin/rmmod ftdi_sio"
ACTION=="remove",RUN+=""

重新启动udev守护程序

sudo /etc/init.d/udev restart

只要连接了具有匹配PID / VID的USB设备,就会执行添加规则,并且它将卸载模块ftdi_sio。前两个规则用于调试目的,它们在/ tmp / udev_file中写了一行,可以用来验证规则是否已触发。

,

看起来USB设备是新设备,插入后就没有现有的驱动程序。您需要中断线和USB驱动程序代码来满足您的要求。您需要将设备注册到该驱动程序,并将驱动程序注册到USB总线。还需要编写适当的中断例程,以便在插入设备后立即调用它。这将使其按需运行!

本文链接:https://www.f2er.com/3146419.html

大家都在问