Как автоматически запускать 'sudo modprobe -r ftdi_sio' всякий раз, когда устройство подключено к моему компьютеру - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть USB-устройство, которое я использую, и я разрабатываю приложение, используя WebUSB с Google Chrome. Дело в том, что всякий раз, когда я подключаю устройство USB к своему компьютеру с Linux, мне приходится вручную запускать sudo modprobe -r ftdi_sio, чтобы выгрузить его.

Я хочу, чтобы оно автоматически выгружалось всякий раз, когда я подключаю это устройство к компьютеру, вместо того, чтобы вводить его вручную каждый раз.

Есть идеи о том, как это можно реализовать? Помощь будет высоко ценится

Ответы [ 4 ]

0 голосов
/ 12 ноября 2019

Похоже, что USB-устройство является новым, и нет никаких драйверов, которые можно было бы обработать, как только оно подключено. Вам нужна линия прерывания и код USB-драйвера для ваших требований. Вам необходимо зарегистрировать ваше устройство на этот драйвер и драйвер на шину USB. Также необходимо написать соответствующие подпрограммы прерывания, которые будут вызываться, как только ваше устройство подключено к сети. Это заставит его работать так, как вы хотите !!

0 голосов
/ 07 ноября 2019

Одним из вариантов будет «черный список» модуля ftdi_sio, чтобы он не загружался автоматически. Для этого создайте следующий файл:

/ etc / modprobe.d / ftdi_sio-blacklist.conf

# This is a comment. Change it if you want.
blacklist ftdi_sio
0 голосов
/ 07 ноября 2019

Правильным способом является создание правила udev, которое запускается при подключении определенного USB-устройства.

Создайте файл /etc/udev/rules.d/99-usb-load.rules изамените «7523» и «1a86» идентификатором продукта и идентификатором поставщика USB-устройства.

# 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

Правило добавления будет выполняться всякий раз, когдаUSB-устройство с соответствующим PID / VID подключено, и оно будет выгружать модуль ftdi_sio. Первые два правила предназначены для целей отладки, которые записывают строку в / tmp / udev_file и могут использоваться для проверки того, были ли правила запущены.

0 голосов
/ 07 ноября 2019

Поместите вашу команду в /etc/rc.local и перезапустите. Посмотри, работает ли это. Или вы можете узнать, как другие .ko настроены на автоматическую загрузку при запуске системы. Выполните то же самое, чтобы автоматически загрузить модуль.

...