LKM 컴파일 프로세스 중에 set_fs 함수의 uaccess.h 헤더 파일이 잘못되었습니다.

LKM 컴파일 프로세스 중에 set_fs 함수의 uaccess.h 헤더 파일이 잘못되었습니다.

Linux 커널 모듈을 컴파일하려고 하는데 gcc를 사용하여 컴파일하는 동안 다음 오류가 발생합니다.

./arch/x86/include/asm/uaccess.h: In function ‘set_fs’:
./arch/x86/include/asm/uaccess.h:32:29: error: incompatible types when assigning to type ‘mm_segment_t {aka struct <anonymous>}’ from type ‘struct mm_segment_t *’
  current->thread.addr_limit = fs;

LKM 자체에는 아무런 문제가 없습니다. insmode다른 Linux 시스템에서 성공적으로 컴파일할 수 있기 때문입니다.

자세한 내용은 다음과 같습니다.

LKM에서 사용되는 헤더 파일: asm/uaccess.h 운영 체제 세부사항:Linux server 4.15.0-128-generic Ubuntu

파일 생성:

obj-m += LKM.o

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

답변1

아키텍처가 x86인지 확인하십시오. 사용 중이 #include <asm/uaccess.h>라면 #include <linux/uaccess.h>.

관련 정보