自定义 Linux 内核模块:“.gnu.linkonce.this_module 部分大小必须与运行时内核构建的结构模块大小匹配”

问题描述 投票:0回答:1

我正在尝试加载准系统 Linux 设备驱动程序模块,但我一直遇到这个问题:

insmod: ERROR: could not insert module dummydriver.ko: Invalid module format

Google 搜索告诉我,出现此消息的一个常见原因是操作系统的内核版本与开发人员用来编译模块的内核版本不匹配。据我所知,我正在运行正确的内核版本。

uname -r
6.5.6-76060506-generic

驱动程序代码:

#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>

static int __init driver_init(void)
{
    printk(KERN_INFO "bababooey :D");

    return 0;
}

static void __exit driver_exit(void)
{
    printk(KERN_INFO "bababooey :(");
}

module_init(driver_init);
module_exit(driver_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("dude");
MODULE_DESCRIPTION("driver");

生成文件:

obj-m = dummydriver.o
KVERSION = $(shell uname -r)
all:
    make -C /lib/modules/$(KVERSION)/build M=$(shell pwd) modules

clean:
    make -C /lib/modules/$(KVERSION)/build M=$(shell pwd) clean

制作输出:

make -C /lib/modules/6.5.6-76060506-generic/build M=/home/david/Programming/dummydriver modules
make[1]: Entering directory '/usr/src/linux-headers-6.5.6-76060506-generic'
  CC [M]  /home/david/Programming/dummydriver/dummydriver.o
  MODPOST /home/david/Programming/dummydriver/Module.symvers
  CC [M]  /home/david/Programming/dummydriver/dummydriver.mod.o
  LD [M]  /home/david/Programming/dummydriver/dummydriver.ko
make[1]: Leaving directory '/usr/src/linux-headers-6.5.6-76060506-generic'

如果重要的话,我正在运行 Pop OS 22.04。如有任何建议,我们将不胜感激,谢谢。

更新

问题还没有解决。

dmesg
显示

module dummydriver: .gnu.linkonce.this_module section size must match the kernel's built struct module size at run time

根据 0andriy 的建议,我在模块上设置了标牌,但未启用安全启动,所以我认为这并不重要?设置正确的签名没有改变任何内容,并且错误仍然发生。

makefile linux-kernel linux-device-driver
1个回答
1
投票

我最近也遇到了类似的问题。以我为例,驱动本来可以正常工作,但是修改内核编译选项后就变得不可用了。 insmod 后显示此错误。

.gnu.linkonce.this_module section size must match the kernel

于是我重新编译了驱动并在文件系统中更新了它,然后就没有错误了。

© www.soinside.com 2019 - 2024. All rights reserved.