사용자 정의 Linux 커널 모듈: ".gnu.linkonce.this_module 섹션의 크기는 런타임 커널에 의해 구축된 구조 모듈의 크기와 일치해야 합니다."

사용자 정의 Linux 커널 모듈: ".gnu.linkonce.this_module 섹션의 크기는 런타임 커널에 의해 구축된 구조 모듈의 크기와 일치해야 합니다."

베어본 Linux 장치 드라이버 모듈을 로드하려고 하는데 dmesg에서 이 문제가 계속 발생합니다.

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

모듈을 로드하려고 하면 다음 메시지가 나타납니다.

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

내가 알 수 있는 한 내 커널 버전은 모듈을 빌드하는 데 사용하는 버전과 일치하며 아래와 같이 Pop OS 22.04를 실행하고 있습니다 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'
    

모듈에 서명하고 보안 부팅을 끄려고 시도했지만 여전히 dmesg에서 초기 오류가 발생합니다. 누구든지 제안 사항이 있으면 감사하겠습니다.

관련 정보