Rk3399平台实现linux 系统调用

 

  1. 找到一个确认能编译到的kernel C文件添加系统调用函数如:./你的源码目录/kernel/fork.c 依照fork() 系统调用 添加自己的系统调用  SYSCALL_DEFINE0() 是指声明的这个系统调用含有零个参数

 

  1. 添加相应的函数声明  include/linux/syscalls.h

 

3、添加系统调用号 arch/arm64/include/asm/unistd32.h

 

  1. 修改系统调用号的总数,总数一定要比你相应的系统号数大一。arch/arm64/include/asm/unistd.h

 

  1. 编译内核从新烧写,然后编写应用程序使用 arm-linux-gcc 编译 相应的应用程序添加到板子上  android 系统的编译需要 –static 应用程序如下:

/*************************************************************************

        > File Name: sys_call.c

        > Author: Arctan

        > Mail: 2757904225@qq.com

        > Created Time: Tue 23 Jul 2019 11:45:11 PM PDT

 ************************************************************************/

 

#include <stdio.h>

#include <unistd.h>

#include <sys/syscall.h>

#include <sys/types.h>

int main(){

        pid_t pid;

        int in = -1;

       pid = syscall(20);

        printf("--- >use syscall(20) :pid ==%d\n",pid);

        pid = getpid();

        printf("use getpid :pid ==%d\n",pid);

        in = syscall(390);

        in = syscall(391);

        return 0;

}

 

 

  1. 系统调用初步分析 arch/arm64/kernel/sys32.c

可以看到 __NR_compat_syscalls 刚好为我们定义的系统调用总数,这里数组 先把每个系统调用号初始化为 sys_ni_syscall 然后再 展开 #include <asm/unistd32.h> 头文件初始化相应的系统号。而系统调用是根据 compat_sys_call_table 数组进行查询的 调用相应的系统调用的。

 

以上内容适合arm64 版本的板子,具体的系统调用流程下次分析。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值