主要参考了Stack Overflow上的这个问题和这篇博文。后者只是在arch/arm/kernel/calls.S
中添加了一行CALL()
,个人感觉这样就够了,而前者为了整个系统完整性还在一些头文件中添加了一些声明。
需要注意的一点是,最后用syscall()
调用时,系统调用号为arch/arm/kernel/calls.S
中新添加的CALL()
的序号,如果有在arch/arm/include/uapi/asm/unistd.h
中添加#define
的话,也是相对于__NR_SYSCALL_BASE
的偏移量,而不是include/uapi/asm-generic/unistd.h
中用#define
定义的序号(我很怀疑修改该文件的必要性)。
还有一点,添加的系统调用的实现不要写在已有的.c
文件中,而要新建一个文件,然后在Makefile
的obj-y
中添加一个对应.o
文件,这样可大大减少重编译的时间,因为没有文件依赖新的.o
文件,之后修改也方便。