RK3568驱动指南|第二篇 字符设备基础-第15章 文件私有数据实验

news2025/2/26 3:46:30
瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
第15章 文件私有数据实验
在之前章节编写的驱动程序中,将生成字符设备的一些硬件属性(设备号、类、设备名称等)全都写成了变量的形式,虽然这样编写驱动代码不会产生报错,但是会显得有点不专业。通常在驱动开发中会为设备定义相关的设备结构体,将硬件属性的描述信息全部放在该结构体中,在本章节中将对设备结构体的功能实现和文件私有数据进行学习。
15.1 文件私有数据简介
Linux中并没有明确规定要使用文件私有数据,但是在linux驱动源码中,广泛使用了文件私有数据,这是Linux驱动遵循的“潜规则”,实际上也体现了Linux面向对象的思想。struct file 结构体中专门为用户留了一个域用于定义私有数据。结构体内容如下所示:

文件私有数据的概念在Linux驱动中有着非常广泛的应用,文件私有数据就是将私有数据private_data指向设备结构体。通过它可以将私有数据一路从open函数带到read, write函数层层传入。一般是在open 的时候赋值,read、write时使用。open函数中私有数据的使用如下所示:

在上述代码中,定义了一个设备结构体dev1,然后在open函数中,将私有数据private_data指向了设备结构体dev1。

我们可以在read write函数中通过private_data访问设备结构体,如下所示:

15.2 实验程序编写

15.2.1 驱动程序编写

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

本章实验将编写Linux下的使用文件私有数据实例代码,在open函数中对私有数据结构体赋值,在write函数中使用。编写完成的代码如下所示:

15.2.2 编写测试 APP

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

编写测试APP其实是在编写Linux应用,在应用程序中向设备文件写入数据,编写完成的应用程序app.c代码如下所示:

15.3 运行测试

对于Makefile的内容注释已在上图添加,保存退出之后,来到存放file.c和Makefile文件目录下,如下图(图15-1)所示:

然后使用命令“make”进行驱动的编译,编译完成如下图(图15-2)所示:

编译完生成 file.ko目标文件,如下图(图15-3)所示:

至此我们的驱动模块就编译成功了,下面进行应用程序编译,

15.3.2 编译应用程序

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

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

下面进行驱动程序的测试。

驱动加载成功之后会生成/dev/test设备驱动文件,输入以下命令查看杂项设备的主次设备号。

ls /dev/test -al

结果如下图(图15-6)所示:

运行应用程序,如下(图 15-6)所示:

在此实验中,将硬件属性的信息全部放在一个结构体private_data,依然可以实现字符设备的操作。

更多内容可以B站搜索:迅为RK3568开发板

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Logistic 回归为什么适用于二分类问题?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ Logistic 回归非常适用于二分类问题的主要原因在于它的核心机制和输出特性。首先,Logistic 回归模型基于概率的理念,通过 Sigmoid 函数转换输入特征的线性组合,将任意…

windows下安装yolov8环境(详细图文教程)

目录 一:前言 二:安装yolov8 一:前言 最近看了 YOLO 的发展史,发现在机器视觉领域的应用非常广泛,f刚好最近一直在做机器视觉的工作,特此记录下搭建yolov的环境。我们使用的版本是yolov8的就用这个作为演…

【简单讲解下WebSocket】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

OpenHarmony NAPI 框架生成工具实现流程

NAPI 框架生成工具 可以根据用户指定路径下的 ts(typescript)接口文件一键生成 NAPI 框架代码、业务代码框架、GN 文件等。在开发 JS 应用与 NAPI 间接口时,底层框架开发者无需关注 Nodejs 语法、C 与 JS 之间的数据类型转换等上层应用转换逻辑,只关注底…

photomaker:customizing realistic human photos via stacked id embedding

PhotoMaker: 高效个性化定制人像照片文生图 - 知乎今天分享我们团队最新的工作PhotoMaker的技术细节。该工作开源5天Githubstar数已过6千次,已列入Github官方Trending榜第一位,PaperswithCode热度榜第一位,HuggingFace Spaces趋势榜第一位。项…

Linux之线程互斥与同步

1.线程互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源 。 临界区:每个线程内部,访问临界自娱的代码,就叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临…

【蓝桥杯嵌入式】Cubemx新建工程引脚配置与点亮LED

【蓝桥杯嵌入式】Cubemx新建工程引脚配置与点亮LED cubemx基础配置LED 引脚配置按键配置按键引脚配置定时器扫描配置 工程管理配置点亮LED程序设计keil配置与程序下载 参考博文1:STM32 | 利用STM32CubeMX初始化一个STM32工程 参考博文1:点亮LED灯&#x…

PMP考试后多长时间出成绩,如何查询PMP成绩?

PMP考试成绩通常在考试结束后的6—8周左右公布,具体时间取决于PMI的审核时间和发布成绩的流程。PMI也会及时发邮件通知大家。没有及时看到自己成绩的考生,也无需担心,PMP考试成绩发布时间会持续一周左右。如果通过考试,则可以在PM…

TRIZ创新技术的四大分离原理:空间、时间、条件、整体与部分分离

TRIZ创新技术中的四大分离原理是空间分离原理、时间分离原理、条件分离原理和整体与部分分离原理。这些原理是TRIZ理论中的核心组成部分,旨在解决创新过程中遇到的复杂技术问题。 首先,空间分离原理指的是将不同的目标物体或目标属性通过分离它们的空间…

基于Spring Boot+Vue的在线拍卖系统

随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、…

小兴教你做平衡小车-平衡车主板绘制(V2版本 目前使用版本 bug已修复)

文章目录 1 原理图总览2 各模块介绍2.1 2.54mm插针(stm32最小系统扩展接口)2.2 OLED显示2.3 MPU60502.4 TB6612驱动电路2.5 供电电路2.6 按键电路2.7 2.54mm排座(stm32最小系统连接接口)2.8 测距模块2.9 蓝牙模块2.10 蜂鸣器模块2.11 电池电压检测电路2.12 电源指示电路2.13 用…

拥抱智能,IT运维将有哪些变化?

Gartner数据显示,2023年AIOps在中国市场渗透率只达到目标受众的5%-20%。这一数据意味着仍有大量企业还未进行AIOps建设,未来AIOps市场前景广阔。目前,已经开始应用AIOps的企业,智能运维水平普遍还处于辅助智能化运维阶段&#xff…

基于springboot+vue实现的高校宿舍管理系统(界面优美,十分推荐)

一、项目简介 本项目是一套基于springbootvue实现的高校宿舍管理系统设计与实现 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观…

算法刷题Day31 | 455.分发饼干、376. 摆动序列、53. 最大子数组和

目录 0 引言1 分发饼干1.1 我的解题1.2 更好的解题 2 摆动序列2.1 我的解题2.2 我的错误原因(GPT分析)2.3 改进 3 最大子数组和3.1 我的解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题&…

LeetCode算法——双指针篇

宫侑的发球最终进化为三刀流,那么我的题解也未必要循规蹈矩! 1、验证回文串 题目描述: 解法: 这题官方给的关于双指针的题解都用到了多个库函数,如 tolower(大写字母转小写)、isalnum(判断一个字符是否是 字母 或者 十进制数字 )…

Linux网络 基础概念

目录 背景知识 互联网的发展 局域网和广域网 网络协议栈 协议的概念 网络协议的分层 网络与操作系统的联系 网络传输的基本流程 IP地址和MAC地址 以太网通信 数据包的封装和分用 跨网段传输 背景知识 互联网的发展 计算机网络是计算机技术和通信技术相结合的产物…

蓝桥杯省赛冲刺(3)广度优先搜索

广度优先搜索(Breadth-First Search, BFS)是一种在图或树等非线性数据结构中遍历节点的算法,它从起始节点开始,按层级逐步向外扩展,即先访问离起始节点最近的节点,再访问这些节点的邻居,然后是邻…

每日学习笔记:C++ STL算法之比较容器

本文的API 是否相等(值与排序) equal()equal(....,op) 是否相等(值)【忽略排序】 is_permutation()is_permutation(....,op) 查找两个容器内容中第一处不同的元素位置 mismatch()mismatch(....,op) 是否小于 lexicographical_compare()lexicographical_compare(....,op) 是否升…

pytest【1】

文章目录 pytest测试用例示例测试用例批量执行1、terminal执行pytest2、main代码启动 测试结果fixtures(夹具)创建fixtures使用fixturesfixtures共享范围 POM:对元素的封装复用 pytest 单selenuim的问题: 代码重用性元素加载延迟…

第十五届蓝桥杯测试组模拟赛两期

文章目录 功能测试一期-场景法-登录功能一期-等价类-边界值-添加用户账号输入框一期-登录-缺陷报告一期- UI自动化测试一期-单元测试-路径覆盖二期-正交法-搜索条件组合二期-测试用例二期-缺陷报告二期-自动化测试二期-单元测试-基本路径覆盖 功能测试 一期-场景法-登录功能 …