Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
alex_t Гость
|
Добавлено: Ср Май 21 2003 15:16 Заголовок сообщения: Компиляция Linux |
|
|
Народ пдскажите пжалуйста, что нужно сделать чтобы корретктно откомпилировать и запустить модуль ядра под Linux (Mandrake 9.1).
Небольшой пример кода модуля из какой то книги я написал, даже откомпилировал без ошибок (книжный вариант все же был не без...), но вот попытка загрузить модуль приводит к тому, что выдается сообщение типа немогу загрузить модуль потому как не известна версия ядра под которой этот самый модуль компилировался.
В доке по компиляции модулей написана какая то хренотень аж более 1000 байт. Может нужон какой нибудб include.
Буду признателен ссылочке на код рабочего модуля ядра Linux, желательно с makefile. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Ср Май 21 2003 15:54 Заголовок сообщения: Re: Компиляция Linux |
|
|
Если ядро скомпилено с опципей "включить версию", то модуль, написанный для другого ядра ты фиг подсунешь.
Еще глюк. Ядро и модули нужно компилировать одинаковым компилятором. Иначе тоже фиг чего загрузится. |
|
Вернуться к началу |
|
|
alex_t Гость
|
Добавлено: Ср Май 21 2003 20:32 Заголовок сообщения: Re: Компиляция Linux |
|
|
Типа понял. Спасибо, друг.
Тогда еще вопросы. Как сказать написанному модулю, что ты коипилируешься пот такую то версию ядра (в include version.h есть макрос для генерации верссии, но макрос содержит какие то параметры, какие значения в них следует подставлять)? Можно ли как то узнать каким компилятором собиралось ядро, потому как по примеру из книги я использовал gcc (возможно лучше использовать cc)?
Ето пока все...
Буду продолжать копать код и доку дальше. |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Май 22 2003 10:32 Заголовок сообщения: Re: Компиляция Linux |
|
|
Я всегда делал так: Брал ядро с www.kernel.org или ставил исходники ядра, которые шли с дистрибутивом.
Компил ядро, ставил, а потом компили модули для нужного железа. В частности для старых плат Digi Board.
Версию компилятора узнать просто. strings /boot/vmlinuz | grep gcc
Либо uname -a |
|
Вернуться к началу |
|
|
alex_t Гость
|
Добавлено: Чт Май 22 2003 13:24 Заголовок сообщения: Re: Компиляция Linux |
|
|
Спасибо за совет
Где можно поподробнее узнать (желательно на руском) о компиляции ядра (добавлении, удалении статических драйверов) и компиляции модулей.
Вероятно у меня не полные исходники ядра или я не правильно компилирую модуль (делаю я это по образу freeBSD), т.е. делаю makefile и команду make вроде компилиться без ошибок и создается объектный файлн "name.o", далее выпоняю команду "insmod ./name.o" и кердык.
Но в этом файле нет никакой информации о версии ядра (я посмотрел бинарники других модулей, почемуто с расширением "*.o.gz", и в них есть строка типа "kernel version 2.2.."). |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Май 23 2003 08:59 Заголовок сообщения: Лучше скажи что у тебя за железка. Наверняка драйверы в 2.4.Х есть (-) |
|
|
- |
|
Вернуться к началу |
|
|
alex_t Гость
|
Добавлено: Пт Май 23 2003 09:57 Заголовок сообщения: Re: Лучше скажи что у тебя за железка. Наверняка драйверы в 2.4.Х есть (-) |
|
|
Железяки собственно реальной у меня нет. Просто нужно написать библиотеку функций которая бы позволила общаться драйверам с устройствами, висящим на нестандартной PC шине (драйвера под нее есть, но не в виде модуля и задача немного не та). Работа с шиной в библиотеке идет как с обычным PCI устройством. И кроме библиетеки нужно написать тестовый драйвер в виде модуля, использующий эту библиотеку. Для начала я бы хотел просто скомпилить и удачно загрузить какой нибудь простенький ядреный модуль, необезательно для реального девайса.
Компиляция, как я уже говорил, идет нормально (без ошибок), а вот при загрузке выскакивает сообщения что не могу найти версию ядра. Может я как то неправильно компилирую модуль или нехватает каких то системных библиотек (настроек) для работы с модулями, или что то еще?
Да и еще при компиляции у меня возникают ошибки типа немогу найти такой то файл или содержимое этого файла явно не C-код. Причем таково рода файлы в родных include определяются как "/usr/include/linux/", а если руками переписать пути на "/usr/src/linux/include/linux", то все работает (компилиться). Может надо какие то переменные (path) для gcc настроить на нужные каталоги?
Уф, все! |
|
Вернуться к началу |
|
|
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Май 23 2003 10:33 Заголовок сообщения: Да не обязательно (+) |
|
|
Достаточно в /usr/include сделать символьчискую ссылку с именем linux, а у казывать она будет сам догадася куда. |
|
Вернуться к началу |
|
|
|