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>
.