C语言 Raspberry内核- insmod错误:模块格式无效

pqwbnv8z  于 2023-08-03  发布在  其他
关注(0)|答案(1)|浏览(126)

我是一个新手建设我的第一个Linux内核模块。所以问题是我在Ubuntu 22上构建了一个raspberry内核64位版本5.4,并使用make创建了一个helloworld_rpi4.ko文件。helloworld_rpi4.ko文件成功创建,然后我将其scp到我在QEMU-6.2上使用的raspberrypi OS(rpi 3-b-plus,64 bit-aarch 64)。当我在raspberry OS上尝试sudo insmod时,它给了我这个错误:

`insmod: ERROR: could not insert module helloworld_rpi4.ko: Invalid module format
`

字符串
我的Makefile:

obj-m += helloworld_rpi4.o  

KERNEL_DIR ?= $(HOME)/linux


all:

    make -C $(KERNEL_DIR) \

        ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \

        M=$(PWD) modules


clean:

    make -C $(KERNEL_DIR) \

        ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- \

        M=$(PWD) clean


deploy:

    scp -P 5555 *.ko pi@localhost:/home/pi/.


我的源代码:

#include <linux/module.h>


static int __init hello_init(void)

{

    pr_info("Hello world init\n");

    return 0;

}


static void __exit hello_exit(void)

{

    pr_info("Hello world exit\n");

}


module_init(hello_init);

module_exit(hello_exit);


MODULE_LICENSE("GPL");

MODULE_AUTHOR("Alberto Liberal <aliberal@arroweurope.com>");

MODULE_DESCRIPTION("This is a print out Hello World module");


我使用以下代码安装cross_compile:sudo apt install crossbuild-essential-arm64
我试图在树莓操作系统上运行uname -r,其内核版本是:
**5.4.51-v8+**.然后我modinfo hellowolrd_rpi4.ko和vermagic5.4.83-v8+ SMP preempt mod_unload modversions aarch64。所以我构建的内核和raspberry上的内核是相同的,但我不知道为什么它仍然给我上面的错误。任何帮助你将不胜感激!

e5nqia27

e5nqia271#

当用于生成模块的内核版本与目标系统上运行的内核版本不匹配时,通常会发生“模块格式无效”错误。在您的例子中,内核版本似乎不同。
您提到您使用5.4版本在Ubuntu 22上构建了内核,但Raspberry Pi的内核版本是5.4.51-v8+。这两个内核版本之间的补丁级别或配置似乎不匹配。您可以按如下方式修改模块代码:

#include <linux/module.h>

static int __init hello_init(void)
{
    pr_info("Hello world init\n");
    return 0;
}

static void __exit hello_exit(void)
{
    pr_info("Hello world exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Alberto Liberal <aliberal@arroweurope.com>");
MODULE_DESCRIPTION("This is a print out Hello World module");
MODULE_VERSION("1.0");

字符串
重新编译模块并尝试在Raspberry Pi上再次加载。

相关问题