LINUX.ORG.RU

Как ставить *.ko?


0

0

Добрый день!

Есть дистрибутив Elastix на CentOS, ядро 2.6.18-164. По ряду причин нужно ставить именно его на разное железо. Естественно, возникает необходимость компилировать и подключать модули драйверов устройств. В /usr/src/kernels/2.6.18-164.el5-i686 лежат исходники ядра. Команда uname -r выдает 2.6.18-164.el5-xen-i686. Последний пример - драйвер WiFi для железки на чипсете Atheros. Драйвер есть, говорим make install, получаем файлы *.ko Далее при попытке установки модуля командуем insmod ath_pci.ko, получаем ошибку из-за того, что сигнатуры версии ядра и модуля различны (одна xen, другая без xen). Можно скомандовать depmod -a и modprobe, чтобы использовать в modprobe ключ, позволяющий не следить за версией. В insmod тоже есть ключ -f, но команда все равно сообщает об ошибке формата модуля. Пытался привинтить ndiswrapper + родной winXP-драйвер, он увидел железку, но тоже не ставится как модуль по той же причине. Значит, лучше использовать родной.

Вопросы:

1. При использовании insmod файлы *.ko лежат в текущем каталоге. Где должны лежать файлы *.ko при использовании команды modprobe, чтобы не было ошибки Failed to load module? Там, где исходники ядра? Там, где оно само? Еще где-то, черт его побери?

2. insmod подключает модуль до первой перезагрузки, modprobe - навсегда. Это правда?

3. Всегда возникают ошибки компиляции драйверов из-за того, что исходники ядра лежат в одном месте, а команда uname -r выдает другое. Как с этим бороться, кроме редактирования Makefile?

4. В дистрибутиве не было gcc, был установлен с помощью yum. Зачем скачалось 120Mb всего?

Спасибо заранее.

С уважением Павел С.

1) /lib/modules/версия ядра/один из подкаталогов

версия ядра получается uname -r

не забудьте сделать
depmod -a

2) нет, и то и другое подключает 1 раз, modprobe также загружает зависимости модуля

3) /lib/modules/версия/build
должно быть ссылкой на каталог исходников ядра, некоторые пакеты имеют настройки типа SYSSRC или KERN_DIR , см документацию к модулю или Makefile

4) сам по себе gcc может собирать только ядро, все остальное требует также и заголовки системных библиотек, а они требуют места, 120 мб еще мало, это только базовое

Sylvia ★★★★★ ()
Ответ на: комментарий от Sylvia

Большое спасибо за ответ, завтра доберусь до той машины :-)

SpbPavel ()

> 1. При использовании insmod файлы *.ko лежат в текущем каталоге. Где должны лежать файлы *.ko при использовании команды modprobe, чтобы не было ошибки Failed to load module? Там, где исходники ядра? Там, где оно само? Еще где-то, черт его побери?

В /lib/modules/версия. модули обсчитываются командой depmod -a

но в 99% случаев это всё делает команда make install


2. insmod подключает модуль до первой перезагрузки, modprobe - навсегда. Это правда?


нет. insmod - кидает модуль «на живую», modprobe - это оболочка для управления insmod, rmmod и прочее, с зависимостями и другими функциями


4. В дистрибутиве не было gcc, был установлен с помощью yum. Зачем скачалось 120Mb всего?


хедерА :)

amd ()
Ответ на: комментарий от nnz

Да-с. Сменил ядро. Ни madwifi, ни родной ath_pci.ko не подошли. Поставил костыль - ndiswrapper + WinXP inf. iwlist wlan0 scan видит сети.

Осталось пара вопросов: для подгрузки модуля нужно после ребута командовать modprobe ndiswrapper. Как можно загрузить модуль автоматически? И может ли этот Ateros AR5B91 (AR928X) работать как AP? На команду ifconfig wlan0 mode Ad-Hok ругается mode: Unknown host.

Спасибо.

SpbPavel ()
Ответ на: комментарий от cetjs2

Спасибо большое, осталось только одно - сделать мост между eth0 и wlan0. В данном случае eth0 - 192.168.1.49 (имеет выход в Инет), wlan0 - 192.168.1.50. Как бы сделать прозрачную трубу между eth0 и wlan0?

SpbPavel ()

Что за Wifi железка?

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.