insmode get을 사용하여 드라이버 로드: module_layout 기호 버전에 동의하지 않음

insmode get을 사용하여 드라이버 로드: module_layout 기호 버전에 동의하지 않음

ARM 시스템의 Linux 커널용 간단한 드라이버를 컴파일했습니다.

$ uname -a

Linux CR5 4.4.171-cr5 #2 Tue Mar 10 11:49:00 CET 2020 armv7l GNU/Linux

컴파일하기 위해 다음 위치에 있는 손상된 시스템의 구성 파일을 사용했습니다.

/proc/config.gz

바닐라 커널을 다운로드하고 4.4.5 태그를 체크아웃하고 구성 파일을 교체하고 커널을 컴파일한 다음 arm 도구 chine을 사용하여 드라이버를 컴파일했습니다.

gcc-linaro-7.2.1-2017.11-i686_arm-linux-gnueabi 이 드라이버에는 간단한 코드가 포함되어 있습니다.

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

    int init_module(void) {
        printk(KERN_INFO "Hello world.\n");
        return 0;
    }

    void cleanup_module(void) {
        printk(KERN_INFO "Goodbye world.\n");
    }

나는 사용했다모듈 삽입드라이버가 로드되지만 터미널의 오류 메시지는 다음과 같습니다.

insmod: 오류: 모듈을 삽입할 수 없습니다 test_module.ko: 잘못된 모듈 형식

존재하다정보이 메시지를 받았습니다

test_module: module_layout 기호 버전에 동의하지 않습니다.

그러나 시스템에서 모듈을 실행하는 것과 내 모듈을 실행하는 것을 비교해 보면readelf-a

이것ELF 헤더동일하고파일 속성동일합니다.

또 무엇을 확인할 수 있나요? 어쩌면 모듈 로딩이 커널에 의해 차단되었을 수도 있습니까? 어떻게 확인하나요? 내가 다음에 무엇을 할 수 있는지에 대해 리더 역할을 해 줄 사람이 있나요?

메모

  • 간단한 C 프로그램이 망가졌으니 도구 기계는 괜찮은 것 같아요
  • insmod-f 좋지도 않아

감사해요

답변1

동일한 레이아웃을 모두 변경해도 레이아웃에 문제가 있습니다.

여기서 답을 찾아보세요

여기

관련 정보