paksmet
  • Blog

Установка Драйвера Ko

10/13/2016

0 Comments

 
Установка Драйвера Ko

Работаем с модулями ядра в Linux / Хабрахабр. Ядро — это та часть операционной системы, работа которой полностью скрыта от пользователя, т.

Но, тем не менее, без ядра невозможна работа ни одной программы, т. Этот механизм чем- то напоминает отношения официанта и клиента: работа хорошего официанта должна быть практически незаметна для клиента, но без официанта клиент не сможет передать заказ повару, и этот заказ не будет доставлен. В Linux ядро монолитное, т. Сам термин «монолит» говорит о том, что в ядре сконцентрировано всё, и, по логике, ничего не может в него добавляться или удаляться. В случае с ядром Linux — это правда лишь отчасти: ядро Linux может работать в таком режиме, однако, в подавляющем большинстве сборок возможна модификация части кода ядра без его перекомпиляции, и даже без его выгрузки. Это достигается путем загрузки и выгрузки некоторых частей ядра, которые называются модулями. Чаще всего в процессе работы необходимо подключать модули драйверов устройств, поддержки криптографических алгоритмов, сетевых средств, и, чтобы уметь это правильно делать, нужно разбираться в строении ядра и уметь правильно работать с его модулями.

Об этом и пойдет речь в этой статье. В современных ядрах при подключении оборудования модули подключаются автоматически, а это событие обрабатывается демоном udev, который создает соответствующий файл устройства в каталоге "/dev". Все это выполняется в том случае, если соответствующий модуль корректно установлен в дерево модулей.

Установка Драйвера Ko

В случае с файловыми системами ситуация та же: при попытке монтирования файловой системы ядро подгружает необходимый модуль автоматически, и выполняет монтирование. Если необходимость в модуле не на столько очевидна, ядро его не загружает самостоятельно. Например, для поддержки функции шифрования на loop устройстве нужно вручную подгрузить модуль «cryptoloop», а для непосредственного шифрования — модуль алгоритма шифрования, например «blowfish». Поиск необходимого модуля. Модули хранятся в каталоге "/lib/modules/< версия ядра> " в виде файлов с расширением «ko». Для получения списка всех модулей из дерева можно выполнить команду поиска всех файлов с расширением «ko» в каталоге с модулями текущего ядра: find /lib/modules/`uname - r` - name ‘*.

Статьи описывается установка и конфигурирование драйверов с системе Linux. cd драйвер_каталог $ insmod драйвер. ko $ ifconfig eth0 192.168.0.9.

Установка драйверов для ATI RadeonHD Series на Linux CentOS 5.x На заметку: модуль ядра fglrx. ko попадает по адресу /lib/modules/версия ядра (у. . статьи описывается установка и конфигурирование драйверов с системе Linux. cd драйвер_каталог $ insmod драйвер.ko $ ifconfig eth0 192.168.0.9.

Полученный список даст некоторое представление о доступных модулях, их назначении и именах. Например, путь «kernel/drivers/net/wireless/rt. Более детальную информацию о модуле можно получить при помощи команды modinfo: # modinfo rt. GPLfirmware: rt. 73. Ralink RT7. 3 USB Wireless LAN driver.

SMP preempt mod_unload modversions CORE2 parm: nohwcrypt: Disable hardware encryption. Поле «firmware» указывает на то, что этот модуль сам по себе не работает, ему нужна бинарная микропрограмма устройства в специальном файле «rt. Необходимость в файле микропрограммы появилась в связи с тем, что интерфейс взаимодействия с устройством закрыт, и эти функции возложены на файл прошивки (firmware). Взять firmware можно с сайта разработчика, установочного диска, поставляемого вместе с устройством, или где- нибудь в репозиториях дистрибутива, затем нужно его скопировать в каталог "/lib/firmware", при чем имя файла должно совпадать с тем, что указано в модуле. Следующее поле, на которое нужно обратить внимание — это поле «depends». Здесь перечислены модули, от которых зависит данный.

  1. Добавление драйвера в образ сетевой установки (PXE) CentOS 5. в файлы modules.alias и module-info: $ /sbin/modinfo /path/to/atl1.ko grep alias alias:&nbsp.
  2. Выкачать с сайта производителя контроллера драйвер под FreeBSD в виде.ko модуля и положить модуль на. вернуться в главное меню и продолжить установку FreeBSD как обычно.

Логично предположить, что модули друг от друга зависят, например модуль поддержки USB накопителей зависит от модуля поддержки USB контроллера. Эти зависимости просчитываются автоматически, и будут описаны ниже. Последнее важное поле — «param». Здесь описаны все параметры, которые может принимать модуль при загрузке, и их описания. В данном случае возможен только один: «nohwcrypt», который, судя по описанию, отключает аппаратное шифрование.

В скобках указан тип значения параметра. Более подробную информацию о модуле можно прочитать в документации к исходным кодам ядра (каталог Documentation) в дереве исходных кодов. Например, найти код нужного видеорежима драйвера «vesafb» можно в файле документации «Documentation/fb/vesafb. Загрузка и выгрузка модулей. Загрузить модуль в ядро можно при помощи двух команд: «insmod» и «modprobe», отличающихся друг от друга возможностью просчета и удовлетворения зависимостей. Команда «insmod» загружает конкретный файл с расширением «ko», при этом, если модуль зависит от других модулей, еще не загруженных в ядро, команда выдаст ошибку, и не загрузит модуль. Команда «modprobe» работает только с деревом модулей, и возможна загрузка только оттуда по имени модуля, а не по имени файла.

Отсюда следует область применения этих команд: при помощи «insmod» подгружается файл модуля из произвольного места файловой системы (например, пользователь скомпилировал модули и перед переносом в дерево ядра решил проверить его работоспособность), а «modprobe» — для подгрузки уже готовых модулей, включенных в дерево модулей текущей версии ядра. Например, для загрузки модуля ядра «rt. Загрузка этого модуля командой «insmod» произойдет следующим образом: # insmod /lib/modules/2. Но нужно помнить, что при использовании «insmod» все зависимости придется подгружать вручную.

Добавление драйвера в образ сетевой установки (PXE) CentOS 5. в файлы modules.alias и module-info: $ /sbin/modinfo /path/to/atl1. ko grep alias alias. Я не буду вдаваться в детали, поясняя установку специфических драйверов. Посмотрев внутрь каталога, вы заметите файл с расширением.ko. Это и есть ваш драйвер, и его.. Администрирование → Установка драйвера для NIC Realtek modules/3.11. 3-201.fc19.x86_64/kernel/drivers/net/ethernet/realtek/r8169. ko.

Поэтому эта команда постепенно вытесняется командой «modprobe». После загрузки модуля можно проверить его наличие в списке загруженных в ядро модулей при помощи команды «lsmod»: # lsmod grep rt.

Module. Size. Used byrt. Из вывода команды ясно, что модуль подгружен, а так же в своей работе использует другие модули. Чтобы его выгрузить, можно воспользоваться командой «rmmod» или той же командой «modprobe» с ключем "- r". В качестве параметра обоим командам нужно передать только имя модуля. Если модуль не используется, то он будет выгружен, а если используется — будет выдана ошибка, и придется выгружать все модули, которые от него зависят: # rmmod rt. ERROR: Module rt.

После выгрузки модуля все возможности, которые он предоставлял, будут удалены из таблицы ядра. Для автоматической загрузки модулей в разных дистрибутивах предусмотрены разные механизмы.

Я не буду вдаваться здесь в подробности, они для каждого дистрибутива свои, но один метод загрузки всегда действенен и удобен: при помощи стартовых скриптов. В тех же Red. Hat системах можно записать команды загрузки модуля прямо в "/etc/rc.

Файлы конфигурация модулей находится в каталоге "/etc/modprobe. В этих файлах преимущественно перечисляются альтернативные имена модулей, их параметры, применяемые при их загрузке, а так же черные списки, запрещенные для загрузки. Например, чтобы вышеупомянутый модуль сразу загружался с опцией «nohwcrypt=1» нужно создать файл, в котором записать строку: options rt. Черный список модулей хранится преимущественно в файле "/etc/modules.

Используется эта функция для запрета загрузки глючных или конфликтных модулей. Сборка модуля и добавление его в дерево. Иногда нужного драйвера в ядре нет, поэтому приходится его компилировать вручную. Это так же тот случай, если дополнительное ПО требует добавление своего модуля в ядро, типа vmware, virtualbox или пакет поддержки карт Nvidia.

Сам процесс компиляции не отличается от процесса сборки программы, но определенные требования все же есть. Во первых, нужен компилятор. Обычно установка «gcc» устанавливает все, что нужно для сборки модуля. Если чего- то не хватает — программа сборки об этом скажет, и нужно будет доустановить недостающие пакеты. Во вторых, нужны заголовочные файлы ядра. Дело в том, что модули ядра всегда собираются вместе с ядром, используя его заголовочные файлы, т.

Если система работает на базе ядра дистрибутива, то нужно установить пакеты с заголовочными файлами ядра. В большинстве дистрибутивов это пакеты «kernel- headers» и/или «kernel- devel». Для сборки модулей этого будет достаточно. Если ядро собиралось вручную, то эти пакеты не нужны: достаточно сделать символическую ссылку "/usr/src/linux", ссылающуюся на дерево сконфигурированных исходных кодов текущего ядра. После компиляции модуля на выходе будет получен один или несколько файлов с расширением «ko».

Можно попробовать их загрузить при помощи команды «insmod» и протестировать их работу. Если модули загрузились и работают (или лень вручную подгружать зависимости), нужно их скопировать в дерево модулей текущего ядра, после чего обязательно обновить зависимости модулей командой «depmod». Она пройдется рекурсивно по дереву модулей и запишет все зависимости в файл «modules. Теперь модули готовы к загрузке командой modprobe и могут загружаться по имени со всеми зависимостями.

Стоит отметить, что при обновлении ядра этот модуль работать не будет. Нужны будут новые заголовочные файлы и потребуется заново пересобрать модуль. Слушаем» что говорит ядро.

При появлении малейших неполадок с модулем, нужно смотреть сообщения ядра. Они выводятся по команде «dmesg» и, в зависимости от настроек syslog, в файл "/var/log/messages". Сообщения ядра могут быть информативными или отладочными, что поможет определить проблему в процессе работы модуля, а могут сообщать об ошибке работы с модулем, например недостаточности символов и зависимостей, некорректных переданных параметрах. Например, выше рассмотренный модуль «rt. Если попробовать передать «2», то система выдаст ошибку: # modprobe rt. FATAL: Error inserting rt. Invalid argument.

Ошибка «Invalid argument» может говорить о чем угодно, саму ошибку ядро на консоль написать не может, только при помощи функции «printk» записать в системный лог. Посмотрев логи можно уже узнать в чем ошибка: # dmesg tail - n. В этом примере выведена только последняя строка с ошибкой, чтобы не загромаждать статью. Модуль может написать и несколько строк, поэтому лучше выводить полный лог, или хотя бы последние строк десять. Ошибку уже легко найти: значение «2» неприемлемо для параметра «nohwcrypt». После исправления, модуль корректно загрузится в ядро.

Из всего сказанного можно сделать один вывод: ядро Linux играет по своим правилам и занимается серьезными вещами. Тем не менее — это всего лишь программа, оно, по сути, не сильно отличается от других обычных программ.

0 Comments



Leave a Reply.

    Author

    Write something about yourself. No need to be fancy, just an overview.

    Archives

    September 2016

    Categories

    All

    RSS Feed

Powered by Create your own unique website with customizable templates.
  • Blog