在linux-4.12.4中增加系统调用

在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);

}


猜你喜欢

转载自blog.csdn.net/lieye_leaves/article/details/80635624