Установка драйверов usb linux

Добавление драйвера устройства в Linux

Обычно в системах Unix и Linux установка драйверов для новых устройств не вызывает трудностей. Даже для неопытных пользователей этих систем. Но это в том случае, если производители устройства (и/или разработчики драйверов) позаботились об этом. И оснастили пакет драйвера специальными установочными и конфигурационными скриптами. А также протестировали всё это в нескольких системах. Однако бывают случаи, когда «удобной» возможности установить драйвер устройства нет, но есть исходные коды драйвера. В таком случае можно попытаться собрать драйвер самостоятельно. Конечно, это далеко не так просто, нужно поэкспериментировать. Но успешный результат возможен с высокой вероятностью. И главное, что для этого требуется — это знать и понимать общий порядок действий в случае ручной сборки драйвера. С такими задачами часто сталкиваются администраторы систем, обслуживающих технологические процессы на производствах, хостинг-площадки и т. д.

Способы установки драйверов

Для Linux-систем установка драйверов устройств происходит тремя основными способами:

  • установка патча для определённых версий ядра;
  • использование специальных сценариев для установки и конфигурации драйвера;
  • с помощью загружаемого модуля ядра.

Надо признать, что для Linux ручная установка драйверов представляет собой довольно сложную и трудоёмкую работу. Поэтому разработчики стремятся всё чаще обеспечивать автоматическую установку и настройку для своих драйверов/устройств. Ведь они заинтересованы в максимально эффективном распространении своих разработок. По этой причине самым распространённым способом установки драйверов является использование сценариев установки. Для самых популярных типов устройств, например для видеокарт, аудиоустройств и даже для сетевого оборудования в настоящее время трудно найти драйверы без автоматической установки.Установка таких драйверов ничем не отличается от установки обычных пакетов. Вся инструкция описана в файле README, подробнее об установке из исходников читайте здесь.

Читайте также:  Astra linux wiki samba

Но есть оборудование (всевозможные адаптеры, преобразователи интерфейсов) и ситуации, для которых есть только исходные коды драйвера (часто не официальные) и необходимость интеграции его с ядром.

Если в качестве драйвера используются патчи ядра, то установить их (собственно и сам драйвер) можно выполнив следующие команды:

$ cd каталог_исходных_кодов_ядра $ patch -p1 < файл_патча

Расположение «каталог_исходных_кодов_ядра» зависит от системы, в CentOS это /usr/lib/modules//kernel, Например

/usr/lib/modules/3.10.0-862.el7.x86_64/kernel

В случае с ручной установкой, необходимо для начала интегрировать драйвер некоего устройства (исходные коды) в дерево каталогов исходных кодов ядра.

Ручная установка драйвера

Для примера, пусть требуется добавить в ядро драйвер некоего сетевого устройства netdevice. Драйвер этого устройства нужно (как уже известно) поместить в один из каталогов с исходными кодами ядра. А именно — в каталог drivers, внутри которого может быть следующее содержимое:

$ ls -F каталог_исходных_кодов_ядра/drivers

Драйверы чаще всего помещаются в подкаталоги scsi, char, block, net, а также sound и usb. Эти подкаталоги отражают схему размещения драйверов в зависимости от их типа: блочные — для дисков IDE, символьные — для последовательных портов например, для сетевых устройств, звуковых плат и USB-устройств — USB-адаптеры, USB-модемы и т. д. Другие подкаталоги служат для размещения драйверов других категорий, в частности для системных и разного рода шин (pci, pcie, nubus, zorro), а также для платформенно-зависимых драйверов — acorn, macintosh.

Таким образом, драйверы для сетевого устройства netdevice следует поместить в следующий каталог:

каталог_исходных_кодов_ядра/drivers/net/netdevice

Исходные коды драйвера представляют собой набор файлов *.c, *.cpp и *.h, которые могут быть объединены в дерево каталогов, в зависимости от того, как составлен проект «исходников» драйвера.

Теперь необходимо включить исходные коды драйвера netdevice в процесс компиляции ядра. Для этого нужно отредактировать следующие файлы:

  • /drivers/net/Makefile – для сборки самого драйвера;
  • /drivers/net/Kconfig – для того, чтобы имя нового устройства было доступно для конфигурирования.
Читайте также:  Установить docker linux debian

Файлы Makefile и Kconfig содержатся в каждом каталоге дерева каталогов с исходными кодами ядра Linux. Это необходимо для организации универсальной разработки и расширения функционала и возможностей ядра при его сборке из исходных кодов путём независимого дополнения новым кодом. В данном случае кодом драйвера для устройства netdevice.

В файл Makefile следует добавить следующий код:

obj-$(CONFIG_NETDEVICE_DEV) += netdevice/

Таким образом, при сборке ядра в его составе будет собран и сам драйвер netdevice. После дополнения файла Kconfig следующим кодом:

config NETDEVICE_DEV tristate 'Netdevice support'

устройство netdevice будет доступно для использования конфигурационным макросом (необходимо на этапе конфигурирования сборки ядра). Здесь команда config использует ключевое слово NETDEVICE_DEV, которое обязательно должно совпадать с фразой, следующей после CONFIG, которое ранее было указано в файле Makefile.

Команда tristate указывает, что драйвер может быть собран как загружаемый модуль, если это поддерживается. Если нет, то вместо tristate следует указать bool – драйвер будет частью ядра. Фраза ‘Netdevice support’ будет отображаться в выводе конфигурационного скрипта на этапе конфигурирования сборки ядра. Это может быть любой текст, идентифицирующий устройство, для которого добавляется драйвер.

Использование нового драйвера

В современных версиях ядра Linux задействование новых драйверов существенно упрощено. В отличие версий, выпущенных раньше 2.6. Тогда это было настоящей головоломкой и требовало знаний в программировании. Но архитектурные изменения в модели драйверов и устройств, пришедшие в версии 2.6 позволяют теперь связывать драйверы с ядром на более высоком «общепользовательском» уровне. Для этого используется специальный конфигурационный макрос MODULE_DEVICE_TABLE. Он создаёт соответствия, которые позволяют утилите modprobe (и ей подобным) задействовать новые драйверы ядра.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Похожие записи:

Источник

Читайте также:  Узнать пароль кали линукс

Установка драйвера USB WiFi адаптера в Linux (на примере DEXP WFA-601)

В связи с переездом и нежеланием захламлять дом проводами повесил в прихожей роутер, а для компьютера купил Wi-Fi адаптер DEXP WFA-601.
Пока работал в Windows 10 проблем не было. Однако сгоревший жесткий диск подтолкнул меня к установке Linux (конкретно Kubuntu).

Путь веры

Захожу на официальный сайт производителя и скачиваю драйвер для любой ОС. Результат предсказуем: Linux != «любая ОС».
Роюсь в коробочках и нахожу родной CD-диск от адаптера. Скачиваю драйвер, нахожу «install.sh»:

$ chmod a+x install.sh $ sudo ./install.sh 

Драйвер не компилируется, вылетает с ошибкой.

cc1: error: code model kernel does not support PIC mode

Не буду тратить время на описание, боя с ней. В гугле нашел советы персобирать ядро, пересобирать gcc… В общем мой уровень не позволяет такие сложности.

Путь разума

Первым делом решил проверить видит ли железку ядро. Вытаскиваю адаптер и втыкаю его в соседний разъем.

. [ 1498.558445] usb 1-1.1: new high-speed USB device number 6 using ehci-pci [ 1498.667540] usb 1-1.1: New USB device found, idVendor=0bda, idProduct=a811 [ 1498.667544] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1498.667546] usb 1-1.1: Product: 802.11ac WLAN Adapter [ 1498.667548] usb 1-1.1: Manufacturer: Realtek [ 1498.667550] usb 1-1.1: SerialNumber: 00e04c000001 

Ищу название драйвера на лазерном диске от производителя, вот оно: RTL8821AU_Linux_v5.2.6.3_25025_COEX20171103-6c6d.20171106.
Подключаю смартфон в режиме модема и пробую в лоб:

sk@ds:~$ sudo apt install realtek-88xxau-dkms [sudo] password fоr sk: Чтение списков пакетов… Готово Построение дерева зависимостей Чтение информации о состоянии… Готово E: Невозможно найти пакет realtek-88xxau-dkms

Видимо репозиторий моего дистрибутива к такому не готов. Захожу на гитхаб и качаю исправленную версию драйвера.

Распаковываю, нахожу dkms-install.sh, запускаю его. Драйвер установлен.
Не будучи гуру linux не стал разбираться с остановкой и запуском адаптера, ввел:

Источник

Оцените статью
Adblock
detector