С Новым годом! Форум программистов, компьютерный форум, киберфорум
Ubuntu, Mint Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
1

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

10.12.2024, 14:36. Показов 530. Ответов 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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
10.12.2024, 16:59 2
Так если lsmod не выводит тот parport_serial, но выводит какой надо, этого вполне достаточно, я бы этим удовлетворился.
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
10.12.2024, 17:13  [ТС] 3
Цитата Сообщение от peter_irich Посмотреть сообщение
этого вполне достаточно, я бы этим удовлетворился
если бы этого было достаточно, я бы тоже удовлетворился, но нет - нужно, чтобы к устройству был привязан мой драйвер, а к нему привязывается этот serial, который согласно lsmod не запущен, в отличие от моего...

возможно, если он такой неубиваемый, надо не бороться с ним, а искать способ переключить ассоциации...
0
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
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
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
11.12.2024, 15:50 6
Fabeldyr, это конечно; я так понял, что он берётся из /lib/modules/...
Это правило можно перенести в /etc/udev/rules.d и там отредактировать, чтобы не подключался parport_pc, а подключался какой надо. В /etc/udev/rules.d он будет иметь приоритет на системным.
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
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
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
12.12.2024, 16:56 10
Так в /lib/udev/rules.d он остался тот, какой и был, а я предлагал скопировать его в /etc/udev/rules.d и там изменить, киак надо.
Требуется ли ещё и присваивать совоему драйверу id таким образом, не могу сказать. Я когда-то давно написал маленький не драйвер, а модуль ядра, не помню, чтобы там это требовалось в такой форме.
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
13.12.2024, 14:08 13
Например, можно перекомпилировать ядро без мешающего драйвера или сделать его модулем, а потом установить, но тогда это придётся повторять после каждого обновления ядра.
Так я не понял, копирован ие udev-правила в /etc/udev/rules.d и редактирование его там помогло или нет?
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
13.12.2024, 14:50  [ТС] 14
Цитата Сообщение от peter_irich Посмотреть сообщение
помогло или нет?
нет
0
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
13.12.2024, 15:49 15
Правильно составленное udev-правило должно сработать. Попробуйте разные его варианты, например, без KERNEL==parport_pc и варианты. Найденное в Интернете сработало же у кого-то. Тут важно в точности соблюсти синтаксис, чтобы не было опечаток и т.п.
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,093
16.12.2024, 17:02 17
Хорошо, что нашли решение, но лучше бы черезправило udev.
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
16.12.2024, 17:27  [ТС] 18
Цитата Сообщение от peter_irich Посмотреть сообщение
лучше бы черезправило udev
согласен, но пока все варианты, которые я перебрал, не работают, если найду, обязательно тут отпишусь, но а пока такое рабочее решение
0
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 232
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
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru