在Linux ARM 64系统中添加新系统调用-链接错误

wf82jlnq  于 11个月前  发布在  Linux
关注(0)|答案(1)|浏览(216)

我正在尝试向Debian 11 ARM 64 Linux系统添加新的系统调用。内核版本5.10.191。该系统在Mac M2笔记本电脑上的UTM虚拟机上运行。
我能够编译内核,安装新内核,并从新内核 Boot 引导。我需要向内核添加一个新的系统调用。下面是我所做的:
1.在源代码目录的根目录下添加一个新文件夹,比如mycode/。添加一个hello.c,Makefile。
1.在根目录的Makefile中,我将mycode/添加到core-y。
1.添加:asmlinkage long sys_hello(void); to include/linux/syscalls.h
1.将#define __NR_hello 441 __SYSCALL(__NR_hello,sys_hello)添加到include/uapi/asm-generic/unistd.h的近端
1.再做一次玉米粒。
最后,我在最后的链接阶段得到了错误:ld:arch/arm 64/kernel/sys.o:(.rodata+0xdc 8):undefined reference to `__arm64_sys_hello'
上面的程序适用于X86架构,看来ARM 64的架构已经改变了,我在上面的过程中做错了什么?

xcitsw88

xcitsw881#

似乎还需要修改系统调用总数
include/uapi/asm-generic/unistd.h

#define __NR_syscalls 442 // 441+1

字符串
arch/arm 64/include/asm/unistd.h

#define __NR_compat_syscalls number+1

相关问题