кросс компиляция модуля ядра

Вопросы программного кода и архитектуры Linux

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение Olej » 19 апр 2012, 13:27

Olej писал(а): - а что это они там намутили в составе пакета kernel-devel-* ?
Посмотрел я (в Fedora 15):

Код: Выделить всё

[olej@notebook 19]$ rpm -ql kernel-PAE-devel.i686 > 2.6.42.12-1.lst
Они:
- полностью воссоздают в /usr/src (/usr/src//2.6.42.12-1.fc15.i686.PAE) структуру дерева исходных кодов ядра (ну, исключая подкаталог Documentation);
- где все терминальные подкаталоги - пустые... - это мне достаточно странно: зачем?
- и в корне этого дерева - те информационные файлы, которые создавались при генерации этого ядра (System.map etc.)

Код: Выделить всё

[olej@notebook 2.6.42.12-1.fc15.i686.PAE]$ pwd
/usr/src/kernels/2.6.42.12-1.fc15.i686.PAE
[olej@notebook 2.6.42.12-1.fc15.i686.PAE]$ du -hs
55M	.
- в общем, всего-то ничего, по сравнению с исходными кодами ядра.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение Olej » 19 апр 2012, 13:47

hiber писал(а): Есть xUbuntu 11.10 на лаптопе и xUbuntu 11.10 под vBox на этой же машинке.
Есть простой пример, который билдится и подключается на обоих системах,
но на лаптопе сбилженный модуль не подключается на xUbunt'e под vBox:
insmod: error inserting 'test.ko': -1 Invalid module format
Кросс компилировал по этой доке http://www.linuxcenter.ru/lib/books/lkm ... ILEDKERNEL
Системы ставил из одного .iso, разница, максимум, в последующих обновлениях системм.
1. так что кросс-компилировать модуль под другое (пусть и самое близкое) ядро - дело не совсем простое...

2. стоит вам при сборке ядра (своего рабочего, ничего, ни на грамм не меняя в конфигурациях - для тренировки ;-) ) поменять в Makefile одну (4-ю) строку:

Код: Выделить всё

EXTRAVERSION = .my-OWN
- и ваше собранное ядро будет называться как-то так: 3.0.9.my-OWN
- и в этом ядре ни один из ваших ныне работающих модулей не станет грузиться ... только из-за названия!
Ali писал(а):В общем случае надо строить ядро,
3. А в общем случае, для сборки хотя бы и одного модуля под ядро X.Y.Z вам нужно (что и BuildRoot делает в полном объёме для кросс-компиляции):
- найти и download исходные коды ядра X.Y.Z ... развернуть это дерево где-то:

Код: Выделить всё

[olej@notebook linux-3.0.9]$ du -hs
501M	.
- это для ядра 3.0.9 как пример: и для download и для "развернуть"...
- теперь вам нужно собрать ядро+модули (из исходных кодов), для этого вам нужно: а). на этом устройстве (где развернуть) иметь 2.5-3Gb свободного пространства + б). 1-3 часа своего свободного времени ;-) на компиляцию-сборку ... это на средне-быстром процессоре (1-2Ghz), ну а если на более стареньком, то можете на ночь запускать ... только предусмотреть наперёд, чтобы все вопросы-ответы были уже отвечены...
- и ещё при этом не намудрить (и проследить) с EXTRAVERSION ...
- ... ну и всё :lol: ... - теперь вы вправе компилировать-собирать свой тривиальный пробный модуль.

P.S. Окинув всё это взглядом ... какая-то грустная история получается :-o
Невольно приходит на ум ... как там было в "Ирония судьбы":
" ... какое же, всё-таки, говно это ваше монолитное ядро ..."(с).
P.P.S. и уж Linux особенно ... потому как связывание с символами ядра из модуля, по крайней мере, можно было бы сделать не по абсолютным адресам ("пальцем в небо"), а, хотя бы, через динамическую таблицу переходов (такую как /proc/kallsyms).
Да только "жаба давила", как я понимаю ... причём "жаба" даже в нескольких аспектах "давила" :lol: :twisted:

hiber
Интересующийся
Сообщения: 2
Зарегистрирован: 17 апр 2012, 17:16
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение hiber » 19 апр 2012, 18:09

Olej, спасибо за развернутый ответ.

У меня получилось запустить мой модуль согласно приведенной мной ссылке, с одним исключением.
Вы правы, я пересобрал ядро и все модули (времени ушло прилично).
И, после апдейта системы??? (систему на виртуалке я не трогал), я еще раз собрал уже только сам модуль и он установился.
Систему я обновил от безысходности, так как до этого модуль не устанавливался.
Ради эксперимента я обновил систему и на виртуалке - все продолжает работать, хотя это уже не так странно.

С я постараюсь успеть пересобрать с EXTRAVERSION (уезжаю на неделю в отпуск), но что-то мне подсказывает, что все должно сработать.
Если не успею, то попробую после приезда.
Об успехах отпишусь.

Olej, еще раз спасибо.
Acer Extensa 5620 Core2Duo
xUbuntu 11.10

dimamaster
Интересующийся
Сообщения: 2
Зарегистрирован: 27 авг 2013, 09:48
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение dimamaster » 04 сен 2013, 13:12

Благодарю за подробную консультацию

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение Olej » 25 мар 2014, 13:58

Olej писал(а): 1. так что кросс-компилировать модуль под другое (пусть и самое близкое) ядро - дело не совсем простое...
Уточнение к вопросу кросс-компиляции ядра...
Занимался сейчас обновлением рукописи "Модули ядра Linux" для нового предстоящего курса обучения, и обратил внимание на то, что эти вопросы уже решались ранее, и даже я экспериментально это проделывал... В редакции 173 "Модули ядра Linux" (http://mylinuxprog.blogspot.com/2013/11/linux.html - это последняя публично-доступная редакция от 11.2013, но сейчас последуют обновления...) - в этом тексте это стр. 67.

А именно:

1. Создайте (скопируйте откуда-то) поддерево сборки модулей ...

2. Укажите это поддерево, отличное от вашей версии Linux, параметром сборки:

Код: Выделить всё

$ make KROOT=/lib/modules/2.6.32.9-70.fc12.i686.PAE/build 
3. Можете так же вести сборку для другой процессорной архитектуры:

Код: Выделить всё

$ make ARCH=MIPS
4. И так же переопределяйте любые другие параметры ... в том числе и собственные переменные периода компиляции:

Код: Выделить всё

$ make EXTRA_CFLAGS += -O3 -D EXPORT_SYMTAB -D DRV_DEBUG
... и получите кросс-компилированный модуль ядра.
Другой вопрос, как и куда вы его будете загружать, и как отлаживать.

tundra37
Писатель
Сообщения: 149
Зарегистрирован: 03 мар 2012, 19:26
Контактная информация:

Re: кросс компиляция модуля ядра

Непрочитанное сообщение tundra37 » 30 мар 2014, 14:40

Есть SDK Андроида. Там есть qemu для MIPS, правда для малого числа процессоров и железа. Есть коммерческий эмулятор simix вроде. Правда не знаю жив ли он.
А вот для qemu есть исходники. Правда внешнее железо придется эмулировать самому. Исходники SDK Андроида тоже можно скачать и реально пересобрать. Исходники модифицированного qemu там есть : для MIPS, ARM и x86. Как ни странно - на сайте MIPS ;-)

Ответить

Вернуться в «Linux изнутри»

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

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