在linux-4.12.4中增加系统调用
1.在文件./include/linux/syscalls.h中定义新的系统调用函数
asmlinkage long sys_statxtest(char __user*filename);
2.在文件./arch/arm/tools/syscall.tbl中增加定义行
398 common statxtest sys_statxtest
3.在文件./include/uapi/asm-generic/unistd.h增加定义----第三步可能不需要
#define __NR_statxtest 292
__SYSCALL(__NR_statxtest, sys_statxtest)
4.
SYSCALL_DEFINE1(statxtest, char __user *,filename)
{
char str[]="test\r\n";
printk(KERN_WARNING,"this is a test");
copy_to_user(filename, str, strlen(str) );
}
5.编译的过程中会生成中间文件unistd-common.h unistd-eabi.h unistd-eabi.h
在目录./arch/arm/include/generated/uapi/asm/下该三个文件要复制到相应的交叉编译器下的对应目录中。
unistd-common.h中部分内容如下:
#define __NR_statx (__NR_SYSCALL_BASE + 397)
#define __NR_statxtest (__NR_SYSCALL_BASE + 398)
6.应用代码
#include <unistd.h>
#include <sys/syscall.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
char buffer[10]={0};
printf("this is a test!");
syscall(__NR_statxtest,buffer);
printf("buffer=%s\r\n",buffer);
}