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

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

10.12.2024, 14:36. Показов 669. Ответов 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. Стандартные проперти этого не позволяют, капался в регистри, но ни чего не...

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

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

возможно, если он такой неубиваемый, надо не бороться с ним, а искать способ переключить ассоциации...
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,131
10.12.2024, 21:50
Мне всё же непонятно, как этот 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
Сообщений: 238
11.12.2024, 10:48  [ТС]
Цитата Сообщение от 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,131
11.12.2024, 15:50
Fabeldyr, это конечно; я так понял, что он берётся из /lib/modules/...
Это правило можно перенести в /etc/udev/rules.d и там отредактировать, чтобы не подключался parport_pc, а подключался какой надо. В /etc/udev/rules.d он будет иметь приоритет на системным.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
11.12.2024, 16:12  [ТС]
Цитата Сообщение от 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,131
11.12.2024, 19:12
Я сам не профессионал в 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
Сообщений: 238
12.12.2024, 11:14  [ТС]
В интернете очень много схожих вопросов на предмет ассоциации видеокарт или 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,131
12.12.2024, 16:56
Так в /lib/udev/rules.d он остался тот, какой и был, а я предлагал скопировать его в /etc/udev/rules.d и там изменить, киак надо.
Требуется ли ещё и присваивать совоему драйверу id таким образом, не могу сказать. Я когда-то давно написал маленький не драйвер, а модуль ядра, не помню, чтобы там это требовалось в такой форме.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
12.12.2024, 17:14  [ТС]
Цитата Сообщение от 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
Сообщений: 238
13.12.2024, 11:52  [ТС]
некоторое количество гугления привело к следующим результатам:

при просмотре вывода 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,131
13.12.2024, 14:08
Например, можно перекомпилировать ядро без мешающего драйвера или сделать его модулем, а потом установить, но тогда это придётся повторять после каждого обновления ядра.
Так я не понял, копирован ие udev-правила в /etc/udev/rules.d и редактирование его там помогло или нет?
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
13.12.2024, 14:50  [ТС]
Цитата Сообщение от peter_irich Посмотреть сообщение
помогло или нет?
нет
0
 Аватар для peter_irich
352 / 207 / 52
Регистрация: 18.10.2017
Сообщений: 2,131
13.12.2024, 15:49
Правильно составленное udev-правило должно сработать. Попробуйте разные его варианты, например, без KERNEL==parport_pc и варианты. Найденное в Интернете сработало же у кого-то. Тут важно в точности соблюсти синтаксис, чтобы не было опечаток и т.п.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
16.12.2024, 16:10  [ТС]
в общем, единственное рабочее решение, которое я нашёл - это создание скрипта, который будет делать то, что я сейчас делаю руками при каждой загрузке:

создать файл скрипта:
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, в реальности же мы не будем знать сколько есть устройств и в каких они слотах, поэтому нужно что-то вроде
Code Скопировано
1
2
3
4
5
6
7
8
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,131
16.12.2024, 17:02
Хорошо, что нашли решение, но лучше бы черезправило udev.
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
16.12.2024, 17:27  [ТС]
Цитата Сообщение от peter_irich Посмотреть сообщение
лучше бы черезправило udev
согласен, но пока все варианты, которые я перебрал, не работают, если найду, обязательно тут отпишусь, но а пока такое рабочее решение
0
 Аватар для Fabeldyr
172 / 21 / 2
Регистрация: 11.09.2014
Сообщений: 238
17.12.2024, 09:58  [ТС]
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2024, 09:58
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
TypeScript: Интерфейсы vs Типы
run.dev 11.04.2025
Современная разработка на JavaScript сталкивается с множеством проблем при масштабировании проектов. Типизация кода стала хорошим инструментом, помогающим избежать ошибок во время выполнения,. . .
Управление топиками и разделами Kafka
Javaican 11.04.2025
Apache Kafka — распределенная платформа потоковой передачи данных, которая стала стандартом для построения высоконагруженных систем обмена сообщениями. В современной архитектуре микросервисов,. . .
Миграция монолита в Event-Driven микросервисную архитектуру на C#
stackOverflow 11.04.2025
Монолитная архитектура – классический подход к разработке программного обеспечения. Это приложение, построенное как единое целое, где все компоненты тесно связаны между собой. Большинство проектов. . .
Go в Kubernetes: Управление ресурсами
golander 11.04.2025
Разработчики Go-приложений в Kubernetes часто сталкиваются с неожиданными проблемами производительности и даже внезапными отказами контейнеров. Причина этого кроется в особенностях взаимодействия. . .
Агрегаты и сущности в DDD микросервисах
Javaican 10.04.2025
Разработка современных программных систем часто приводит на распутье: монолит или микросервисы? Даже при выборе микросервисной архитектуры многие команды сталкиваются с проблемой правильного. . .
Многопоточность в C#: Task и параллельное программирование
UnmanagedCoder 10.04.2025
Современные процессоры уже давно перестали наращивать тактовую частоту в пользу увеличения количества ядер. Это создало интересную ситуацию: разработчики, привыкшие к последовательному. . .
Линейное решение нелинейной задачи с помощью арктангенса для метода обработки данных из double buffering.
Hrethgir 10.04.2025
Публикация в доработке, метод арктангенса в комментариях внизу. Вообще изначально я пренебрёг квадратурой числа, но потом понял, что для вычисления приблизительного значения - сгодится, формулу. . .
Переменные в Python
py-thonny 10.04.2025
Переменная в программировании — это символическое имя, связанное с областью памяти, в которой хранится значение. Она позволяет получать доступ к данным через понятные человеку идентификаторы, а не. . .
Многопоточность в C#: Task и асинхронные операции
UnmanagedCoder 10.04.2025
Многопоточность позволяет выполнять несколько операций одновременно, что важно для решения двух основных задач: повышения скорости выполнения вычислительно-сложных операций и сохранения отзывчивости. . .
Запуск контейнеров Docker на ARM64
Mr. Docker 09.04.2025
Появление таких решений, как Apple M1/ M2, AWS Graviton, Ampere Altra и Raspberry Pi, сделало использование ARM-систем обыденностью для многих разработчиков и DevOps-инженеров. При этом Docker,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер