Как скомпилировать драйвера из ".c" в .kо ?

Модераторы: _e2L, Злой Засранец

Как скомпилировать драйвера из ".c" в .kо ?

Сообщение Fro$t » 15 дек 2008 13:52

Вот нашел в нете инструкцию:
Got this help from somewhere online forum. Forgot where. But it solved the problem of sis191
LAN port problem on ASUS P5SD2-VM motherboard. This involves re-compile kernel module.

In file drivers\nets\sis190.c, add one line of
{ "Atheros PHY AR8012", { 0x004d, 0xd020 }, LAN, 0 },

to mii_chip_table[], make it look like

static struct mii_chip_info {
const char *name;
u16 id[2];
unsigned int type;
u32 feature;
} mii_chip_table[] = {
{ "Atheros PHY AR8012", { 0x004d, 0xd020 }, LAN, 0 },
{ "Broadcom PHY BCM5461", { 0x0020, 0x60c0 }, LAN, F_PHY_BCM5461 },
{ "Broadcom PHY AC131", { 0x0143, 0xbc70 }, LAN, 0 },
{ "Agere PHY ET1101B", { 0x0282, 0xf010 }, LAN, 0 },
{ "Marvell PHY 88E1111", { 0x0141, 0x0cc0 }, LAN, F_PHY_88E1111 },
{ "Realtek PHY RTL8201", { 0x0000, 0x8200 }, LAN, 0 },
{ NULL, }
};

then re-compile it to sis190.ko. Copy this sis190.ko to /lib/modules/your_version/kernel/drivers/net and reboot. For example, on my ubuntu 8.04, the place is /lib/modules/2.6.24-19-generic/kernel/drivers/net.

This is tried on both kernel source version 2.6.24 and version 2.6.26. And they both worked.

Что я понял из инуструкции:
Нужно перекомпилировать исходник дров на сетевуху и заменить уже имеющиеся дрова.
Что я делал:
1. Скачал исходник ядра с kernel.org (linux-2.6.27.4.tar.gz)
2. Распоковал его
Код: Выделить всё
tar -xvzf linux-2.6.27.4.tar.gz

3. Нашел там файл sis190.c и добавил в него строку, как говорится в инструкции.
4. Попытался выполнить
Код: Выделить всё
makefile drivers/net/sis190.ko

(перед этим "cd linux-2.6.27.4")
Но он не сделал того, что я хочу, а написал, что нужно вроде ядро сконфигурировать (типа "сконфигурируйте ядро одной из команд 'make oldconfig' и еще пара каких-то команд").
Тогда я взял файл config-kernel-2.6.27.4 (название не такое, но начинается с config, посмотреть не могу, т.к. пишу из винды) из папки boot и скопировал его в папку linux-2.6.27.4. После переименовал его в .config (все это вычитал из другой инструкции по этой же проблеме). Ну а потом
Код: Выделить всё
make oldconfig

из папки с ядром. Вроде все прошло успешно.
5. Выполнил
Код: Выделить всё
makefile drivers/net/sis190.ko

и данный файл появился в назначенной папке.
6. С использованием sudo сначала удалил одноименный файл из "/lib/modules/your_version/kernel/drivers/net ", а потом через него же скопировал туда новый скомпиленный файл.
7. Перезагрузился.
В результате, после перезагрузки, у меня вторая (встроенная сетевуха) вообще пропала (если нажать на значок настроек сети, то там только одна сетвуха висит (а раньше было 2, но встроенная была неактивна)), то есть как бы её вообще в системе нет (ifconfig -a показывает тоже только 1 сетевуху). А если заменю опять на старый файл sis190.ko, то все возвращается в первоизданному виду. Сетевух видно, но она неактивна.
Кто знает, что я делаю не так, или знает, как мне помочь - откликнитесь.
Последний раз редактировалось Fro$t 16 дек 2008 10:54, всего редактировалось 4 раз(а).
Аватара пользователя
Fro$t
Штурман
Штурман
 
Сообщения: 538
Зарегистрирован:
16 ноя 2007 15:40
Откуда: Воронеж

Сообщение Warlornhor » 15 дек 2008 16:04

не знаю поможет, нет, но вот если ты тут еще не был http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html
Аватара пользователя
Warlornhor
На борту
На борту
 
Сообщения: 114
Зарегистрирован:
14 окт 2008 08:16

Сообщение Fro$t » 15 дек 2008 19:56

Warlornhor
Спасибо, хорошая статья.
А ты не знаешь, правильно ли я по ходу все делал?

Добавлено спустя 2 часа 58 минут 14 секунд:

Вот еще дополнительная информация:
После всех действий и перезагрузки:
Код: Выделить всё
$ modprobe sis190
FATAL: Error inserting sis190 (/lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.ko): Operation not permitted
$ sudo modprobe sis190
FATAL: Error inserting sis190 (/lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.ko): Invalid module format

И еще:
Код: Выделить всё
$ insmod /lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.koinsmod: error inserting '/lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.ko': -1 Operation not permitted
$ sudo insmod /lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.ko
insmod: error inserting '/lib/modules/2.6.27-4-generic/kernel/drivers/net/sis190.ko': -1 Invalid module format

Чем ему мой модуль не нравится??
Аватара пользователя
Fro$t
Штурман
Штурман
 
Сообщения: 538
Зарегистрирован:
16 ноя 2007 15:40
Откуда: Воронеж

Сообщение myau » 15 дек 2008 20:32

вчера под SPARC пару раз ядро перекомпилил ...
инструкция для убунты тут:
http://forum.ubuntu.ru/index.php?topic=15968.0
в двух словах - нужно собирать пакет, а потом его ставить.
Сволочи kernel'овцы ... из makefile выбросили команды install, bzimage ... и старые инструкции как компилить ядро не годятся.

А вообще-то лучше всего брать исходники не c kernel.org, а от того дистрибута, на котором работаешь. Дело в том - что ядра в разных дистрибутах могут существено отличаться от стандартного. (Разные патчи накладываются, да и вообще у ядра столько разных веток):
http://citkit.ru/articles/248/

Да, для убунты взять исходник можо так:
apt-get install linux-source
Аватара пользователя
myau
На борту
На борту
 
Сообщения: 188
Зарегистрирован:
03 окт 2007 15:13

Сообщение Fro$t » 15 дек 2008 20:55

myau
Спасибо, что откликнулся :)
myau писал(а):в двух словах - нужно собирать пакет, а потом его ставить.

Собрать пакет драйвера или чего? :oops:
Можно ли без прекомпилирования ядра (очень уж не хочется с этим разбиратся, так как чувствую, что не все там просто) просто скомпилить нужный мне драйвер и работать с ним?
myau писал(а):А вообще-то лучше всего брать исходники не c kernel.org, а от того дистрибута, на котором работаешь

В смысле с диска, с которого ставил, или откуда?
myau писал(а):Да, для убунты взять исходник можо так:
apt-get install linux-source

Это будет одно и то же ядро, что и если
myau писал(а):брать исходники от того дистрибута, на котором работаешь

?
Заранее спасибо за ответы, и... не ругай сильно, если тормозить буду :oops:
P.S. Размер скомпилированного драйвера при установке самой убунты занимает около 30 кб, а при скомпиленнои мной около 200 лб - означает ли это, что все дело как раз в ядре от кернел.org?
Аватара пользователя
Fro$t
Штурман
Штурман
 
Сообщения: 538
Зарегистрирован:
16 ноя 2007 15:40
Откуда: Воронеж

Сообщение Fro$t » 16 дек 2008 01:17

Сейчас поставил компилится все модули с ядром linux-source-2.6.27. У меня почему-то модули компилится из ".c" и прочих форматов в ".о", но мне нужно ".ko". Как мне получить то, что нужно? Или потом, когда закончится, модули в нужном мне формате получатся (компилирование еще в процессе)?
Аватара пользователя
Fro$t
Штурман
Штурман
 
Сообщения: 538
Зарегистрирован:
16 ноя 2007 15:40
Откуда: Воронеж


Вернуться в Linux семейство

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron