2013-11-15 2 views
10

Я использую ubuntu, но вопрос для Linux в целом.Как создать и развернуть драйвер Linux?

Я установил модуль/драйвер, скомпилировав мое ядро ​​Linux и установив новое скомпилированное ядро. Он работает нормально.

Для того, чтобы сделать эту работу водителя в другой машине без установки нового ядра, я копирую .ko файл на новую машину под /lib/modules/<version>/..., а затем запустить sudo depmod -a. Затем запустите sudo modprobe <drivername>. Модуль может быть загружен без проблем. но устройство не работает с этим модулем .ko.

Эти две машины не идентичны аппаратным средствам, но они идентичны версии ядра и версии выпуска Ubuntu. Обычно копирование файла .ko должно работать для той же версии Linux и того же ядра.

Дополнительная информация о драйвере. это спрятанный планшетный драйвер. Все файлы патч:

  • один .c файл в drivers/hid/
  • добавить одну строку в drivers/hid/Makefile
  • добавить несколько строк в drivers/hid/usbhid/Kconfig
  • добавить несколько строк в drivers/hid/hid-ids.h
  • добавить несколько строк drivers/hid/usbhid/hid-quirks.c 's hid_blacklist struct before {0, 0}

Это все.

Я даже пытался скопировать весь каталог drivers/hid/, включая все файлы .ko с первой машины на вторую. но не повезло. Планшет для планшета можно распознать на второй машине, я могу сделать клик левой кнопкой мыши с помощью пера, но перо не может перемещать курсор.

Надеюсь, я предоставил достаточно подробностей. Моя цель - установить модуль только в идентичную версию Linux (ядро) без переустановки ядра. Я не уверен, как это сделать или если это возможно.

Большое спасибо.

PS:

В 1-е машины, перед подключением планшета, lsmod не отображает модуль. после подключения модуль может быть загружен автоматически. Я вижу, что lsmod показывает модуль.

Во 2-м маччине модуль не может быть загружен автоматически, подключив устройство. Я должен сделать sudo modprobe <module> вручную.

Поскольку мне нужно будет установить модуль на многие машины в моей компании, проще установить модуль, не переустанавливая ядро. Я попытался установить пакеты ядра .deb, которые были построены на 1-й машине на второй машине, отлично работает на 2-й машине. но мне нехорошо переустанавливать ядро ​​на многие машины. Благодарю.

+0

Вы загружали модули 'usbcore' и' usbhid' на 2-й машине до загрузки соответствующего модуля? – alk

+0

Hi alk, 'usbhid.ko' находится под' kernel/drivers/hid/usbhid/'. Как я упоминал выше, я копирую все «драйверы/спрятанные» с 1-го компьютера на второй. По умолчанию загружается 'usbhid'. но я не нахожу 'usbcore' модуль на обеих машинах. Я новичок в материалах ядра. Я не уверен, какой модуль 'usbcore' действительно есть. 'wusbcore'? это единственный, который я могу найти. Благодарю. – user2309998

+0

Что 'lsmod' сообщает вам обе машины до и после загрузки вашего модуля? – alk

ответ

-3

Вы можете добавить модуль в/etc/modules, чтобы он загружался во время загрузки.

1

Кажется, что ядро, которое вы построили, не соответствует 1: 1. Кроме того, вообще нет необходимости компилировать новое ядро.

Самый простой способ справиться с развертыванием драйверов вне дерева - использовать DKMS.

Что вам нужно предоставить, это всего лишь файл dkms.conf с указанием названий и мест назначения пакетов, версий и драйверов (в пределах /lib/modules/{kernel}).

В следующих примерах вещи в фигурных скобках необходимо заменить на настоящую вещь, например. если версия 1.0.0, то {version} с 1.0.0, очевидно.

Пример dkms.conf:

PACKAGE_NAME="{mydriver}" 
PACKAGE_VERSION="{version}" 
BUILT_MODULE_NAME[0]="{mydriver}" 
BUILT_MODULE_LOCATION[0]="/{mycompany?}" 
AUTOINSTALL="yes" 

Тогда вам просто необходимо установить источники /usr/src/{mydriver}-{version} и запустить dkms:

dkms add -m {mydriver} -v {version} 
dkms build -m {mydriver} -v {version} 
dkms install -m {mydriver} -v {version} 

Вы должны смотреть на то, что другие люди сделали в этой области , существует большая автоматизация, которую вы можете применить к процессам тестирования и выпуска. Версия solo6x10 на Blu-ray Bluecherry предоставляет некоторые полезные цели make (раскрытие: я тот, кто написал это).

Кроме того, вы определенно хотите создавать и распространять пакеты, вы можете использовать solo6x10/debian в качестве шаблона, и вы можете read about repositories in the Debian wiki.

Смежные вопросы