我正在尝试为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

两台计算机上的交叉编译器和内核源代码相同 . 当我在第二台机器上编译模块并尝试安装该模块时,我收到错误“ insmod: error inserting 'hello.ko': -1 Invalid module format

据我所知,模块正在使用我在CROSS_COMPILE(arm-linux-gnueabihf-gcc等)中指定的交叉编译器进行编译,只有它才能使模块在计算机上没有安装任何特定的库,是吗?

第一台计算机有64位操作系统(Ubuntu 12.04)和第二台32位操作系统(Linux Mint 12),这是主要的区别,所以make util是不同的 . 但它是否真的是模块只在64位操作系统上正确编译的主要原因?如果是这样的问题,或者它真的处理不同的库?