1. 前置知识
- 不同体系结构有不同的系统调用
- X86为例:
arch/x86/entry/syscalls/syscall_64.tbl
- X86为例:
- 输出linux 在不同体系结构的系统调用指令
max 2 syscall
- 对系统调用的修改需要重新编译整个内核
- 宏
__NR_syscalls
- 系统调用的个数,编号从0开始
arch/x86/include/generated/uapi/asm/unistd_64.h
2. 添加系统调用
- 注册系统调用编号
// arch/x86/entry/syscalls/syscall_64.tbl
451 common get_cpu_number sys_get_cpu_number
DEFINE0表示系统调用不需要参数,DEFINE1表示需要一个参数
3. 测试添加的系统调用
在QEMU中,CMakeList.txt修改-smp n
,调整QEMU中模拟的 CPU的个数