在Linux ARM64系统中添加新的系统调用-链接错误

问题描述 投票:0回答:1

我正在尝试向 Debian 11 ARM64 Linux 系统添加新的系统调用。内核版本 5.10.191。该系统在 Mac M2 笔记本电脑上的 UTM 虚拟机上运行。

我能够编译内核、安装新内核并从新内核引导。我需要向内核添加一个新的系统调用。这是我所做的:

  1. 在源代码目录的根目录下添加一个新文件夹,例如 mycode/。添加 hello.c,Makefile。
  2. 在根目录的Makefile中,我将mycode/添加到了core-y中。
  3. 添加:asmlinkage long sys_hello(void);包含/linux/syscalls.h
  4. 添加 #定义__NR_hello 441 __SYSCALL(__NR_hello, sys_hello) 到 include/uapi/asm-generic/unistd.h 的近端
  5. 再次制作内核。

最后,我在最后链接阶段得到了错误: ld: arch/arm64/kernel/sys.o:(.rodata+0xdc8): 对 `__arm64_sys_hello' 的未定义引用

以上过程适用于X86架构。看来ARM64的架构已经改变了。在上面的过程中我做错了什么?

linux kernel system-calls arm64
1个回答
0
投票

看来你还需要修改系统调用总数

include/uapi/asm-generic/unistd.h

#define __NR_syscalls 442 // 441+1

arch/arm64/include/asm/unistd.h

#define __NR_compat_syscalls number+1 
© www.soinside.com 2019 - 2024. All rights reserved.