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
    评论
RK3399平台下,您可以使用Linux系统下的Rockchip VPU库来进行h264视频编码。下面是使用C语言调用VPU进行图像数据编码为h264视频格式的步骤: 1. 在C代码中包含Rockchip VPU库的头文件: ``` #include <rockchip/rk_vpu.h> ``` 2. 初始化VPU: ``` vpu_api_init(); ``` 3. 定义VPU编码参数结构体,并设置参数: ``` VpuEncConfig enc_cfg; memset(&enc_cfg, 0, sizeof(VpuEncConfig)); enc_cfg.width = 1920; // 编码图像宽度 enc_cfg.height = 1080; // 编码图像高度 enc_cfg.framerate = 30; // 编码帧率 enc_cfg.bitrate = 4000; // 编码码率 enc_cfg.gop_size = 30; // GOP大小 enc_cfg.rc_mode = 1; // 码率控制模式 ``` 4. 打开VPU编码器: ``` VpuEncHandle enc_handle; memset(&enc_handle, 0, sizeof(VpuEncHandle)); vpu_enc_open(&enc_handle, &enc_cfg); ``` 5. 定义输入图像数据结构体: ``` VpuFrame input_frame; memset(&input_frame, 0, sizeof(VpuFrame)); input_frame.width = enc_cfg.width; input_frame.height = enc_cfg.height; input_frame.format = VPU_FRAME_FORMAT_YUV420SP; ``` 6. 定义输出数据结构体: ``` VpuPacket output_packet; memset(&output_packet, 0, sizeof(VpuPacket)); ``` 7. 读入图像数据到输入数据结构体中: ``` FILE *fp = fopen("image_data.yuv", "rb"); unsigned char *yuv_data = (unsigned char *)malloc(enc_cfg.width * enc_cfg.height * 3 / 2); fread(yuv_data, 1, enc_cfg.width * enc_cfg.height * 3 / 2, fp); fclose(fp); input_frame.vir_addr = yuv_data; ``` 8. 使用VPU进行编码: ``` int ret = vpu_enc_encode(enc_handle, &input_frame, &output_packet); ``` 在这个例子中,我们使用vpu_enc_encode函数进行编码。编码后的数据将存储在output_packet缓冲区中。 9. 将编码后的数据写入到一个新的文件中: ``` fp = fopen("encoded_data.h264", "wb"); fwrite(output_packet.vir_addr, 1, output_packet.size, fp); fclose(fp); ``` 在这个例子中,我们使用fwrite函数将编码后的数据写入到一个新的文件中。 10. 释放内存: ``` free(yuv_data); vpu_enc_close(&enc_handle); vpu_api_exit(); ``` 在完成编码后,我们需要释放之前分配的内存,并关闭VPU编码器。 这样,您就可以使用C语言和Rockchip VPU库在RK3399平台下将图像数据编码为h264视频格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值