Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
1

Как отключить загрузку драйвера?

10.12.2024, 14:36. Показов 560. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Изучаю работу с PCI-драйверами, в качестве подопытного взял moschip semiconductor technology ltd pci 9835 multi-i/o controller.
На данном этапе каждый раз приходится делать
Bash
1
2
3
4
5
su
echo 0000:03:00.0 > /sys/bus/pci/drivers/serial/unbind
exit
cd /home/user/папка/с/драйвером
sudo insmod mypcidriver.ko
хочу, чтобы мой драйвер грузился автоматически при входе в систему

Что я делал:
Положил mypcidriver.ko в /lib/modules/5.15.0-43-generic/kernel/drivers/my, после этого выполнил команду
Bash
1
depmod -a
Добавил "mypcidriver" в файл /etc/modules
Добавил "blacklist serial" и "blacklist parport_serial" в /etc/modprobe.d/blacklist.conf
(где-то пишут, что надо создать файл serial.conf и в нём прописать "blacklist serial" - так тоже делал),
после этого выполнил команду
Bash
1
update-initramfs –u
После перезагрузки при вводе lsmod я вижу mypcidriver - значит он загрузился, а serial или parport_serial не вижу, но
Bash
1
sudo find /sys | grep drivers.*03:00
выдаёт:
/sys/bus/pci/drivers/serial/0000:03:00.0
Bash
1
lspci -v
выдаёт:
Kernel driver in use: serial
Kernel modules: parport_serial, mypcidriver

Ещё я видел на форумах, что надо покопаться в настройках udev, но там надо знать имя устройства, а lsdev выдаёт 0000:03:00.0, ну и соответственно
Bash
1
udevadm info -a -n 0000:03:00.0
выдаёт "No such file or directory"


Ну и собственно вопрос: как избавиться от этого serial'а?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2024, 14:36
Ответы с готовыми решениями:

Как отключить загрузку оригинала на PhocaGallery
как отключить загрузку?

Как отключить загрузку графики в IExplorer'e
На момент создания объекта InternetExplorer необходимо subj. Стандартные проперти этого не...

Как посмотреть загрузку драйвера
Включил компьютер. Загрузился. Появилась табличка :"Загрузка драйвера неизвестного устройства...

Как отключить загрузку символов для System.Data.dll
Уважаемые подскажите, что бы это значило и как отключить? Может я сгоряча не туда нажал? Уж и не...

18
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
10.12.2024, 16:59 2
Так если lsmod не выводит тот parport_serial, но выводит какой надо, этого вполне достаточно, я бы этим удовлетворился.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
10.12.2024, 17:13  [ТС] 3
Цитата Сообщение от peter_irich Посмотреть сообщение
этого вполне достаточно, я бы этим удовлетворился
если бы этого было достаточно, я бы тоже удовлетворился, но нет - нужно, чтобы к устройству был привязан мой драйвер, а к нему привязывается этот serial, который согласно lsmod не запущен, в отличие от моего...

возможно, если он такой неубиваемый, надо не бороться с ним, а искать способ переключить ассоциации...
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
10.12.2024, 21:50 4
Мне всё же непонятно, как этот parport_serial, указанный в /etc/modprobe.d/blacklist.conf, может к чему-то привязываться, если он не загружается. М.б., он есть в каком-то правиле udev? Попробуйте в /lib/udev/rules.d сделать поиск примерно так:
Bash
1
grep parport_serial *.rules
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
11.12.2024, 10:48  [ТС] 5
Цитата Сообщение от peter_irich Посмотреть сообщение
Попробуйте в /lib/udev/rules.d сделать поиск
Bash
1
grep parport_serial *.rules
не выдаёт ничего
Bash
1
grep parport *.rules
выдаёт
Bash
1
2
50-udev-default.rules:KERNEL=="parport[0-9]*", GROUP="lp"
80-drivers.rules:SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev"
Добавлено через 1 час 13 минут
Цитата Сообщение от peter_irich Посмотреть сообщение
Мне всё же непонятно
нашёл в интернете такое пояснение: "If driver is built into the kernel, modprobe.blacklist will have no effect at all to it, since modprobe will not be involved at all." ну и дальше там советуют делать unbind руками, что я сейчас и делаю. А для автоматической работы, видимо, придётся писать скрипт.
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
11.12.2024, 15:50 6
Fabeldyr, это конечно; я так понял, что он берётся из /lib/modules/...
Это правило можно перенести в /etc/udev/rules.d и там отредактировать, чтобы не подключался parport_pc, а подключался какой надо. В /etc/udev/rules.d он будет иметь приоритет на системным.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
11.12.2024, 16:12  [ТС] 7
Цитата Сообщение от peter_irich Посмотреть сообщение
Это правило можно перенести в /etc/udev/rules.d и там отредактировать, чтобы не подключался parport_pc, а подключался какой надо
я правильно понял, что файл 80-drivers.rules надо перенести из /lib/udev/rules в /etc/udev/rules
и отредактировать...
тут я вообще ноль пока в вопросе, но судя по тексту файла, вместо
Bash
1
SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev"
должно быть что-то вроде
Bash
1
SUBSYSTEM=="module", RUN{builtin}+="kmod load mypcidriver"
?
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
11.12.2024, 19:12 8
Я сам не профессионал в udev, я эти правила иногда записывал в /etc/udev/rules.d и редактировал, но уверенно сказать не могу. Я бы попробовал такой вариант RUN:
Bash
1
RUN+="/usr/sbin/insmod каталог_с_mypci_driver/mypcidriver.ko"
а KERNEL=="parport_pc",
сначала оставил бы.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
12.12.2024, 11:14  [ТС] 9
В интернете очень много схожих вопросов на предмет ассоциации видеокарт или usb-устройств с конкретными драйверами. Если просуммировать написанное там, то для работы связки на постоянной основе нужно создать в папке /etc/udev/rules.d файл 99-mypcidriver.rules (номер не имеет конкретной привязки к чему-либо, важно, чтобы он был побольше, чтобы перекрывать предыдущие правила), а в нём написать
Bash
1
ACTION=="add", ATTRS{idVendor}=="9710", ATTRS{idProduct}=="9835", RUN+="/sbin/modprobe mypcidriver" RUN+="/bin/sh -c 'echo 9710 9835 > /sys/bus/usb/drivers/mypcidriver/new_id'"
после чего ввести команду
Bash
1
sudo udevadm control --reload
или перезагрузиться
ещё видел вариант
Bash
1
sudo /etc/init.d/udev restart
перезагрузился и ничего не поменялось, причём команда
Bash
1
echo 9710 9835 > /sys/bus/usb/drivers/serial/remove_id
выдаёт
Bash
1
bash: echo: write error: No such device
а команда
Bash
1
echo 9710 9835 > /sys/bus/usb/drivers/mypcidriver/new_id
выдаёт
Bash
1
bash: echo: write error: File exists
т.е. вроде как всё отработало...

Цитата Сообщение от peter_irich Посмотреть сообщение
такой вариант RUN
тоже не сработал - после перезагрузки в /lib/udev/rules.d сгенерился 80-drivers.rules точно такой же как раньше
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
12.12.2024, 16:56 10
Так в /lib/udev/rules.d он остался тот, какой и был, а я предлагал скопировать его в /etc/udev/rules.d и там изменить, киак надо.
Требуется ли ещё и присваивать совоему драйверу id таким образом, не могу сказать. Я когда-то давно написал маленький не драйвер, а модуль ядра, не помню, чтобы там это требовалось в такой форме.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
12.12.2024, 17:14  [ТС] 11
Цитата Сообщение от peter_irich Посмотреть сообщение
Так в /lib/udev/rules.d он остался тот, какой и был, а я предлагал скопировать его в /etc/udev/rules.d и там изменить, киак надо.
я так и сделал. я просто когда писал предыдущее сообщение думал, что файл в /lib/udev/rules.d генерится на основе файла в /lib/udev/rules.d, сейчас я уже понял, что это просто два разных настроечных файла с разным уровнем приоритета.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
13.12.2024, 11:52  [ТС] 12
некоторое количество гугления привело к следующим результатам:

при просмотре вывода dmesg обнаружились следующие строки
Bash
1
2
3
4
5
6
7
Serial 8250/16550 driver, 32 ports, IRQ sharing enabled
serial 0000:03:00.0: enabling device (0000 -> 0001)
0000:03:00.0: ttyS4 at I/O 0xd0b0 (irq = 16, base_baud = 115200) is a 16550A
0000:03:00.0: ttyS5 at I/O 0xd0a0 (irq = 16, base_baud = 115200) is a 16550A
serial 0000:03:02.0: enabling device (0000 -> 0001)
0000:03:02.0: ttyS6 at I/O 0xd050 (irq = 18, base_baud = 115200) is a 16550A
0000:03:02.0: ttyS7 at I/O 0xd040 (irq = 18, base_baud = 115200) is a 16550A
а в выводе команды
Bash
1
grep CONFIG_SERIAL /boot/config-$(uname -r)
есть строка
Bash
1
CONFIG_SERIAL_8250_16550A_VARIANTS=y
интернет говорит, что
Файл /boot/config содержит конфигурацию ядра Linux, которую вы выбрали при сборке ядра. Символы =y и =m указывают на статус включения той или иной функции в ядре:

=y: Функция включена статически. Это означает, что она компилируется непосредственно в ядро и всегда доступна при загрузке системы.
=m: Функция включена динамически. Это означает, что она компилируется в виде отдельного модуля, который может быть загружен или выгружен по мере необходимости во время работы системы.
насколько я понимаю вышесказанное, модуль не отключается всеми опробованными способами именно потому, что он "=y". Просто заменить его на "=m", насколько я понимаю, недостаточно.

Добавлено через 20 минут
а ещё в конфиге есть строка
Bash
1
CONFIG_SERIAL_8250_PCI=y
возможно, с этим тоже надо что-то делать
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
13.12.2024, 14:08 13
Например, можно перекомпилировать ядро без мешающего драйвера или сделать его модулем, а потом установить, но тогда это придётся повторять после каждого обновления ядра.
Так я не понял, копирован ие udev-правила в /etc/udev/rules.d и редактирование его там помогло или нет?
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
13.12.2024, 14:50  [ТС] 14
Цитата Сообщение от peter_irich Посмотреть сообщение
помогло или нет?
нет
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
13.12.2024, 15:49 15
Правильно составленное udev-правило должно сработать. Попробуйте разные его варианты, например, без KERNEL==parport_pc и варианты. Найденное в Интернете сработало же у кого-то. Тут важно в точности соблюсти синтаксис, чтобы не было опечаток и т.п.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
16.12.2024, 16:10  [ТС] 16
в общем, единственное рабочее решение, которое я нашёл - это создание скрипта, который будет делать то, что я сейчас делаю руками при каждой загрузке:

создать файл скрипта:
Bash
1
sudo nano /usr/local/bin/change_driver.sh
содержимое скрипта:
Bash
1
2
3
4
5
6
#!/bin/bash
 
sudo sh -c "echo 0000:03:00.0 > /sys/bus/pci/drivers/serial/unbind
sudo sh -c "echo 0000:03:00.0 > /sys/bus/pci/drivers/mypcidriver/bind
sudo sh -c "echo 0000:03:02.0 > /sys/bus/pci/drivers/serial/unbind
sudo sh -c "echo 0000:03:02.0 > /sys/bus/pci/drivers/mypcidriver/bind
cделать скрипт исполняемым:
Bash
1
sudo chmod +x /usr/local/bin/change_driver.sh
добавить скрипт в автозагрузку, создав файл сервиса для него:
Bash
1
sudo nano /etc/systemd/system/change_driver.service
содержимое сервиса:
Bash
1
2
3
4
5
6
7
8
9
[Unit]
Description=Unbind serial, bind mypcidriver
 
[Service]
Type=oneshot
ExecStart=/usr/local/bin/change_driver.sh
 
[Install]
WantedBy=multi-user.target
активировать службу и перезагрузиться:
Bash
1
2
3
sudo systemctl daemon-reload
sudo systemctl enable unbind_device.service
reboot

теперь команда
Bash
1
sudo find /sys | grep drivers.*:03:0
выдаёт
Bash
1
2
/sys/bus/pci/drivers/mypcidriver/0000:03:00.0
/sys/bus/pci/drivers/mypcidriver/0000:03:02.0
недостатки такого решения:
тут вручную указаны два устройства в слотах 0 и 2, в реальности же мы не будем знать сколько есть устройств и в каких они слотах, поэтому нужно что-то вроде
Код
for device in /sys/bus/pci/drivers/serial/*
{
  if (device содержит 0000:*)
  {
    sudo sh -c "echo device > /sys/bus/pci/drivers/serial/unbind
    sudo sh -c "echo device > /sys/bus/pci/drivers/mypcidriver/bind
  }
}
с правильным синтаксисом того, как это написать пока не разобрался
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,100
16.12.2024, 17:02 17
Хорошо, что нашли решение, но лучше бы черезправило udev.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
16.12.2024, 17:27  [ТС] 18
Цитата Сообщение от peter_irich Посмотреть сообщение
лучше бы черезправило udev
согласен, но пока все варианты, которые я перебрал, не работают, если найду, обязательно тут отпишусь, но а пока такое рабочее решение
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 235
17.12.2024, 09:58  [ТС] 19
Цитата Сообщение от Fabeldyr Посмотреть сообщение
sudo systemctl enable unbind_device.service
тут опечатка, должно быть
Bash
1
sudo systemctl enable change_driver.service
поправил скрипт для перебора устройств в цикле:
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
 
#sudo sh -c "echo 0000:03:00.0 > /sys/bus/pci/drivers/serial/unbind"
#sudo sh -c "echo 0000:03:00.0 > /sys/bus/pci/drivers/mypcidriver/bind"
#sudo sh -c "echo 0000:03:02.0 > /sys/bus/pci/drivers/serial/unbind"
#sudo sh -c "echo 0000:03:02.0 > /sys/bus/pci/drivers/mypcidriver/bind"
 
echo "change driver script"
# чтобы не вылетало с ошибкой, если файлов нет
shopt -s nullglob;
 
for device in /sys/bus/pci/drivers/serial/*; do
    echo "Device: $device"
    filename=$(basename "$device")
    echo "Filename: $filename"
    if [[ "$filename" == "0000:"* ]]; then
        echo "Found match: $filename"
        sudo sh -c "echo \"$filename\" > /sys/bus/pci/drivers/serial/unbind"
        sudo sh -c "echo \"$filename\" > /sys/bus/pci/drivers/mypcidriver/bind"
    else
        echo "No match: $filename"
    fi
done
0
17.12.2024, 09:58
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2024, 09:58
Помогаю со студенческими работами здесь

Как отключить загрузку последнего просмотренного канала прошлой сессии в SimpleTV?
Когда включаю SimpleTV 048b9 vlc 215, то у меня запускается тот телеканал, который я смотрел в...

Автоматическая установка драйвера. Как отключить?
ноут asus m51se видеокарта - ati radeon hd 3470 Проблема: после установки новой версии Ati...

Как отключить шифрование на уровне драйвера для wi-fi адаптера?
задача в том, что бы изменить исходный код драйвера адаптера wi-fi, а конкретно отключить функцию...

Отключить загрузку программы
Доброго времени суток всем. У меня такая ситуация : установил прогу и после этого стал жёстко...

Отключить загрузку изображений Awesomium
Привет. Задача следующая: вместо стандартного WebBrowser использую Awesomium, в котором постоянно...

Запрет на загрузку драйвера
Всем привет! Есть 2 sys файла, они скрывают программу, возможно ли, запретить их загрузку? Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Rust или Go? А может C++?
hw_wired 28.01.2025
С каждой новой технологией или методологией появляются новые языки программирования, призванные решать конкретные задачи либо улучшать аспекты производительности и безопасности. Среди множества. . .
Fortran и WinAPI: как создать приложение с графическим интерфейсом
hw_wired 28.01.2025
Fortran — это один из старейших высокоуровневых языков программирования, широко используемый в науке и инженерии уже несколько десятилетий. Его название происходит от "Formula Translation" (перевод. . .
Списки в Haskell
hw_wired 28.01.2025
Haskell является функциональным языком программирования, который отличается лаконичностью синтаксиса и мощными абстракциями. Важным концептом в Haskell являются списки — упорядоченные коллекции. . .
Функции высшего порядка в Haskell
hw_wired 28.01.2025
Haskell – это современный функциональный язык программирования, который получил широкое распространение благодаря своей выразительности и мощным абстракциям. Одной из ключевых особенностей Haskell. . .
Как в цикле обойти все поля объекта в JavaScript
bytestream 28.01.2025
Объекты в JavaScript представляют собой фундаментальные структуры данных, которые позволяют хранить и организовывать связанную информацию в виде пар ключ-значение. Каждый объект можно представить как. . .
Как выбрать строки в DataFrame по значению столбца в Pandas
bytestream 28.01.2025
В области анализа данных библиотека Pandas стала незаменимым инструментом для работы с табличными данными в Python. Эта мощная библиотека предоставляет множество функций для эффективной обработки и. . .
Как сделать перенос строки в Bash
bytestream 28.01.2025
При работе с командной оболочкой Bash разработчики часто сталкиваются с необходимостью форматирования текстового вывода, где ключевую роль играет правильное управление переносами строк. Умение. . .
Поиск подстроки в строке с помощью Bash
bytestream 28.01.2025
Поиск подстроки в строке является одной из важных задач в программировании и обработке текстов. Применение такого поиска можно найти в самых разных областях, от анализа данных до разработки. . .
[golang] 169. Majority Element
alhaos 28.01.2025
Тут надо вернуть "мажористый" элемент который встречается в слайсе больше чем в половине случаев. По условиям задачи во входных данных такой элемент обязан присутствовать. / / . . .
Когда лучше использовать LinkedList вместо ArrayList в Java
bytestream 28.01.2025
При разработке Java-приложений выбор правильной структуры данных играет ключевую роль в обеспечении эффективности и производительности программы. ArrayList и LinkedList являются двумя. . .
Какой ответ HTTP лучше использовать: 403 Forbidden или 401 Unauthorized, когда недостаточно прав
bytestream 28.01.2025
В современной веб-разработке правильная обработка ошибок и точное информирование клиентов о статусе их запросов играют критическую роль в создании надежных и безопасных приложений. Особое внимание. . .
Как получить список всех файлов коммита в Git
bytestream 28.01.2025
Система контроля версий Git представляет собой мощный инструмент для управления изменениями в программном коде и других файлах проекта. В основе работы Git лежит концепция коммитов - снимков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru