我正在尝试向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的架构已经改变了,我在上面的过程中做错了什么?
1条答案
按热度按时间xcitsw881#
似乎还需要修改系统调用总数。
在include/uapi/asm-generic/unistd.h中
字符串
在arch/arm 64/include/asm/unistd.h中
型