RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用

 

  瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。

 

 

 

进阶7 向系统中添加一个系统调用

在上个章节中我们学习了系统调用的概念,本章节我们以实践的形式向系统中添加一个系统调用。

 

 

7.1 内核添加自定义服务

我们在基础篇-8章 将驱动编译进内核实验的基础上进行本章节的实验。我们修改helloworld.c驱动,如下所示,并确保helloworld驱动编译进了内核源码中。

 

 

#include <linux/kernel.h>

#include <linux/syscalls.h>

SYSCALL_DEFINE0(helloworld){

printk("This is helloworld syscall\n");

return 0;

}

 

7.2 添加系统调用号

然后在Linux源码kernel/include/uapi/asm-generic/unistd.h文件中添加系统调用号。如下图所示:

 

 

 

 

7-1

 

最后,重新编译内核源码,烧写内核镜像。

 

7.3 系统调用测试

本应用程序对应的网盘路径为:iTOP-RK3568开发板【底板V1.7版本】\03_iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\53_SYSCALL

 

编写完成的应用程序syscall.c代码如下所示:

 

#include <stdio.h>

#include <sys/syscall.h>

#include <fcntl.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <stdlib.h>

 

#define __NR_helloworld 435

 

int main(int argc,char **argv){

  

  syscall(__NR_helloworld);

  return 0;

}

下面进行应用程序编译,因为测试APP是要在开发板上运行的,所以需要aarch64-linux-gnu-gcc来编译,输入以下命令,编译完成以后会生成一个app的可执行程序,如下图(图143-2)所示:

 

aarch64-linux-gnu-gcc syscall.c -o syscall

 

 

 

 

7-2

 

编译好的内核镜像boot.imgiTOP-RK3568开发板【底板V1.7版本】\03_iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\53_SYSCALL”目录下。烧写内核镜像,启动开发板。

 

然后将编译好的syscall程序拷贝到开发板上,然后运行程序,如下图所示:

 

 

 

 

7-3

 

   如上图所示,在运行应用程序之后,打印This is helloworld syscall” 成功调用自定义的系统调用,至此,向系统中添加一个系统调用实验结束。

 

posted on   topeet  阅读(82)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示