2012-02-18 2 views
3

Я пытаюсь пересечь скомпилировать модуль ядра HelloWorld с характеристиками:Кросс компиляции модуля ядра: неверный формат модуля

  • хост: Intel x86 32 бит, Linux-3.0.0
  • цель: ARM машина (Parrot AR.Drone), Linux-2.6.27.47

Я использую Makefile:

PWD := $(shell pwd) 
obj-m := test.o 
all: 
    $(MAKE) -C /path/to/kernel M=$(PWD) CROSS_COMPILE=arm-none-linux-gnueabi- ARCH=arm modules 

Где arm-none-linux-gnueabi- - это префикс инструментальной цепочки.

В качестве ядра я попытался использовать клон от git://github.com/CyanogenMod/cm-kernel.git в качестве ядра. Это ядро ​​ядра 2.6. Используя это ядро, компиляция прошла успешно. При попытке вставить модуль выдается сообщение об ошибке:

invalid module format 

Который, к сожалению, говорит очень мало.

+2

В случае ошибки «неверный формат модуля», а также другие ошибки при вставке модуля, системный журнал может содержать немного больше информации. Для отображения журнала можно использовать 'dmesg'. – Eugene

ответ

4

Благодаря подсказке Юджина использовать dmesg, я нашел ошибку:

version magic '2.6.37.6 mod_unload modversions ARMv5 ' should be '2.6.27.47-parrot preempt mod_unload ARMv5 ' 

Вывод: при компиляции модуля ядра, не только версии должны совпадать, но и некоторые конфигурации-параметры. Моя проблема была решена с помощью правильной версии и редактирования конфигурации.

Если вы не хотите, чтобы перенастроить все, быстрый (некрасиво) починка редактировать include/generated/autoconf.h

0

мой уродливый исправление файла сценария необходимости модифицировать "скрипты/setlocalversion"

170   if test "${LOCALVERSION+set}" != "set"; then 
171     scm=$(scm_version --short) 
172 #    res="$res${scm:++}" 
173     res="${res}" 
174   fi 

Привет, все .. Я нашел простую душу.

просто изменить envirionment vairable

export LOCALVERSION= 

, что это все

Смежные вопросы