Зареждаемият модул на ядрото не се компилира правилно на различни компютри

Опитвам се да направя зареждаем модул на ядрото за ARM архитектура. Само за пример аз съм направен прост hello.c

#include <linux/module.h>       /* Needed by all modules */
#include <linux/kernel.h>       /* Needed for KERN_INFO */

static int __init hello_start(void)
{
    printk(KERN_INFO "Loading hello module...\n");
    return 0;
}
static void __exit hello_end(void)
{
    printk(KERN_INFO "Goodbye Mr.\n");
}
module_init(hello_start);
module_exit(hello_end);

И създаде Makefile

obj-m := hello.o

PWD := $(shell pwd)

ARCH=arm
CROSS_COMPILE_LINARO=/home/cooperok/mk908/gcc-linaro-arm-linux-gnueabihf-4.7-2013.01-20130125_linux/bin/arm-linux-gnueabihf-
KERNEL_ROCKCHIP=/home/cooperok/mk908/kernel/

default:
    make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE_LINARO) -C $(KERNEL_ROCKCHIP) M=$(PWD) modules
clean:
    make CROSS_COMPILE=$(CROSS_COMPILE_LINARO) -C $(KERNEL_ROCKCHIP) M=$(PWD) clean

Изходните кодове на кръстосания компилатор и ядрото са еднакви и на двата компютъра. Когато изпълнявам make на първата машина, компилираният файл hello.ko е инсталиран успешно с команда insmod, но когато компилирам модул на втора машина и се опитвам да инсталирам този модул, получавам грешка "insmod : грешка при вмъкване на 'hello.ko': -1 Невалиден формат на модул"

Доколкото разбирам, модулът се компилира с кроскомпилатор, който съм посочил в CROSS_COMPILE (arm-linux-gnueabihf-gcc и други) и само той ще направи модул без конкретни библиотеки, инсталирани на компютри, нали?

Първият компютър има 64-битова ОС (Ubuntu 12.04), а вторият 32-битова ОС (Linux Mint 12), това е основната разлика, така че make util е различен. Но това наистина ли е основната причина модулът да се компилира правилно само на 64-битова ОС? Ако е така, проблемът е в make, или наистина се занимава с различни библиотеки?


person cooperok    schedule 18.07.2014    source източник
comment
Системният регистрационен файл дава ли още подсказки ?   -  person Notlikethat    schedule 18.07.2014
comment
Ще мога да го проверя чак в понеделник, но доколкото си спомням dmesg не показа никакво съобщение за грешка.   -  person cooperok    schedule 19.07.2014
comment
опа Имаше грешка. [ 1405.917668] здравей: магията на версията '3.0.36 SMP preempt mod_unload ARMv7 ' трябва да бъде '3.0.36+ SMP preempt mod_unload ARMv7 '   -  person cooperok    schedule 21.07.2014
comment
А, така че източниците не са съвсем еднакви, оттук и несъответствието - ще трябва да проследите защо + версията има (или мисли, че има) допълнителни пачове върху 3.0.36.   -  person Notlikethat    schedule 21.07.2014