首页 > 其他分享 >RK3568驱动指南|驱动基础进阶篇-进阶7 向系统中添加一个系统调用

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

时间:2024-02-05 15:00:23浏览次数:29  
标签:调用 进阶 syscall RK3568 helloworld 开发板 驱动 include

 

  瑞芯微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.img在iTOP-RK3568开发板【底板V1.7版本】\03_【iTOP-RK3568开发板】指南教程\02_Linux驱动配套资料\04_Linux驱动例程\53_SYSCALL”目录下。烧写内核镜像,启动开发板。

 

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

 

 

 

 

图 7-3

 

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

 

标签:调用,进阶,syscall,RK3568,helloworld,开发板,驱动,include
From: https://www.cnblogs.com/topeet/p/18008195

相关文章

  • 【驱动】块设备驱动(二)-通用块层
    前言通用块层是一个内核组件,处理来自系统其他组件发出的块设备请求。换句话说,通用块层包含了块设备操作的一些通用函数和数据结构,如通用磁盘结构gendisk,请求队列结构request_queue、请求结构request、块设备I/O操作结构bio和块设备操作结构block_device_operations等。关键数据......
  • 【驱动】块设备驱(三)-IO调度层
    前言每个块设备驱动程序都维持着自己的请求队列,它包含设备待处理的请求链表。如果磁盘控制器正在处理几个磁盘,那么通常每个物理块设备都有一个请求队列。在每个请求队列上单独执行1/O调度,这样可以提高磁盘的性能。关键APIstructrequest_queue请求队列是由一个大的数据结构req......
  • 【驱动】块设备驱动(四)-块设备驱动层
    前言块设备驱动程序是Liux块子系统中的最底层组件。它们从IO调度程序中获得请求,然后按要求处理这些请求。一个块设备驱动程序可能处理几个块设备。例如,IDE设备驱动程序可以处理几个IDE磁盘,其中的每个都是一个单独的块设备。而且,每个磁盘通常是被分区的,每个分区又可以被看作是一个......
  • 【驱动】块设备驱动(一)-驱动框架
    块设备的定义块设备是针对存储设备的,比如SD卡、EMMC、NANDFlash、NorFlash、SPIFlash、机械硬盘、固态硬盘等。因此块设备驱动其实就是这些存储设备驱动,块设备驱动相比字符设备相比,块设备有以下几个特殊之处:块设备可以从数据的任何位置进行访问块数据总是以固定长度进行......
  • Drvsetup.dll 是 Windows 操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配
     Drvsetup.dll是Windows操作系统中的一个动态链接库文件,用于设备驱动程序的安装和配置过程中。该文件通常位于C:\Windows\System32文件夹下。Drvsetup.dll主要负责设备驱动程序的安装和配置过程中的一些核心功能,包括驱动程序的复制、注册、配置和卸载等。在设备驱动程序......
  • 在PowerShell中管理Windows映像主要涉及到DISM模块的Cmdlets。这些Cmdlets提供了一系
    在PowerShell中管理Windows映像主要涉及到DISM模块的Cmdlets。这些Cmdlets提供了一系列功能,包括挂载(加载)、卸载(卸下)映像,添加或删除驱动程序,应用更新等。以下是一些常用的Cmdlets和它们的参数,以及相应的实例。常用CmdletsMount-WindowsImage-ImagePath:指定WIM文件的路径。-I......
  • NVIDIA显卡驱动NVIDIA-Linux-x86_64-545.29.02 安装错误分析之一
    software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:在函数‘lkca_hmac_duplicate’中:/software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:90:26:错误:implicitdeclarationoffunction‘crypto_tfm_ctx_aligned’;didy......
  • 由亚马逊云科技 Graviton4 驱动的全新内存优化型实例 Amazon EC2 实例(R8g),现已开放预
    下一代 AmazonElasticComputeCloudAmazonEC2) 实例的预览版现已公开 提供。全新的 R8g实例 搭载新式Graviton4处理器,其性价比远超任何现有的内存优化实例。对于要求较高的内存密集型工作负载,R8g实例是不二之选:大数据分析、高性能数据库、在内存中缓存等。亚马逊云......
  • 关于Windows11的优化内容 - 进阶者系列 - 学习者系列文章
          这几天无事,想起上次刚重装的Windows11操作系统,对于系统优化的内容想记录一下,以前没写过相关的博文,这次就做个记录吧。对于Windows11,已经出来几年了,相关的设置啥的也有,就是优化方面的软件和设置也有相关的,这次就把笔者这边所有相关的优化工具软件和脚本啥的一并发布......
  • 【STM32+HAL库】---- 硬件IIC驱动0.96OLED
    硬件开发板:STM32G0B1RET6软件平台:cubemax+keil+VScode内容原著声明部分代码借鉴学习于以下视频和文章:https://www.bilibili.com/video/BV1MV411o7P5/?spm_id_from=333.999.0.0&vd_source=2c974fb85c05e13d278d1bbe4cddc944https://blog.csdn.net/weixin_56565733/article/de......