我试图编译我的 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>
.