RK3568驱动指南|第二篇 字符设备基础-第13章 杂项设备驱动实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568 支持安卓 11 和 linux 系统,主要面向物联网网关、NVR 存储、工控平板、工业检测、工控盒、卡拉 OK、云终端、车载中控等行业。
第13章 杂项设备驱动实验
经过前面章节的学习,我们已经对字符设备驱动框架有了一定的理解,而本章要讲解的杂项设备属于特殊的一种字符型设备,是对字符设备的一种封装,为最简单的字符设备。为什么从字符设备中单独提取出了杂项设备呢?杂项设备又要如何进行使用呢?带着疑问,让我们进行杂项设备的学习吧!
13.1 杂项设备驱动简介
在Linux中,把无法归类的五花八门的设备定义成杂项设备。相较于字符设备,杂项设备有以下两个优点:
(1)节省主设备号:杂项设备的主设备号固定为10,而字符设备不管是动态分配还是静态分配设备号,都会消耗一个主设备号,进而造成了主设备号浪费。当系统中注册了多个misc设备驱动时,只需使用子设备号进行区分即可。
(2)使用简单:当使用普通的字符设备驱动时,如果开发人员需要导出操作接口给用户空间,就需要注册对应的字符驱动,并创建字符设备class从而自动在/dev下生成设备节点,而misc驱动只需要将基本信息通过结构体传递给相应处理函数即可。
在驱动中使用miscdevice结构体描述misc设备,该结构体定义在“内核源码/include/linux/miscdevice.h”文件中(在下面的实验代码中需要加入该头文件的引用),具体内容如下所示:

定义一个misc 设备,一般只需要填充minor、name、fops 这三个成员变量。

minor指次设备号,可以从“内核源码/include/linux/miscdevice.h”文件中预定义的次设备号挑选,也可以自行定义子设备号(没有被其他设备使用即可),通常情况下将该参数设置为MISC_DYNAMIC_MINOR,表示自动分配子设备号。

name表示misc设备的名字。misc设备驱动注册成功之后,会在dev目录下生成名为name的设备节点。

fops 指向了file_operations的结构体,表示字符设备的操作集合。

13.2 杂项设备的注册和卸载

不同于字符设备的注册和卸载的繁琐,杂项设备的注册可以直接使用函数misc_register函数来完成,杂项设备的卸载可以直接使用misc_deregister函数来完成。上述两个函数均定义在“内核源码/include/linux/miscdevice.h”文件当中。

杂项设备的注册:

函数原型:

​int misc_register(struct miscdevice *misc)

函数作用:

​基于misc_class构造一个设备,将miscdevice结构挂载到misc_list列表上,并初始化与linux设备模型相关的结构。进而起到杂项设备注册的作用。

参数含义:

​misc: 杂项设备的结构体指针

函数返回值:申请成功返回0,申请失败返回负数

杂项设备的卸载:

函数原型:

​int misc_deregister(struct miscdevice *misc)

函数作用:

​从mist_list中删除miscdevice,进而起到杂项设备卸载的作用。

参数含义:

​ misc: 杂项设备的结构体指针

**函数返回值:**卸载成功返回0,申请失败返回负数

至此,注册和卸载杂项设备的API函数就讲解完成了,会在接下来的驱动章节中对上述函数进行具体使用。

13.3 杂项设备驱动框架

MISC驱动一般使用以下结构:

13.4 实验程序的编写

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

本小节将编写最简单的misc驱动,在驱动入口函数中通过misc_register(…)函数注册杂项设备驱动,在驱动出口函数中通过misc_deregister(…)函数注销杂项设备驱动。编写完成的miscdevice.c代码如下所示:

13.5 运行测试
13.5.1 编译驱动程序

在上一小节中的miscdevice.c代码同一目录下创建 Makefile 文件,Makefile 文件内容如下所示:

Makefile保存退出之后,来到存放miscdevice.c和Makefile文件目录下,如下图(图13-1)所示:

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

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

至此我们的驱动模块就编译成功了,下面进行驱动的运行测试。

可以看到驱动加载之后,打印“misc registe is succeed”,说明misc驱动注册成功。输入以下命令查看加载的驱动模块,驱动加载成功如下(图13-5)所示:

然后来到/sys/class/misc目录下,可以看到名为“test”的文件夹已经被创建了,在/sys/class/misc目录下有misc类的所有设备,每个注册的杂项设备对应一个文件夹目录,如下图(图13-6)所示:

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

结果如下图(图 13-8)所示:

从上图可以看出,/dev/test这个杂项设备的主设备号为10,次设备号为53,最后可以使用以下命令对驱动进行卸载,卸载完成如下图(图 13-9)所示:

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

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

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

相关文章

【go从入门到精通】select条件控制

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C,go等语言开发经验,mysql,mongo,redis等数据库,设计模…

MATLAB环境下基于振动信号的轴承状态监测和故障诊断

故障预测与健康管理PHM分为故障预测和健康管理与维修两部分,PHM首先借助传感器采集关键零部件的运行状态数据,如振动信号、温度图像、电流电压信号、声音信号及油液分析等,提取设备的运行监测指标,进而实现对设备关键零部件运行状…

复旦MBA GIP全球课程:数字化新趋势带来的机遇和挑战

复旦MBA站在商业教育变革前沿,联合世界顶级商学院开展长、中、短期的第二学位、海外交换及GIP全球课程,使同学们与世界紧密接轨,打破国界、专业和过往的边界,探索更广阔的未来可能。至今已有2000多名复旦MBA学生通过近60个GIP全球…

【vue】vue中的路由vue-router,vue-cli脚手架详细使用教程

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Ubuntu Desktop - lock screen (锁屏)

Ubuntu Desktop - lock screen [锁屏] 1. System Settings -> Security & Privacy (安全和隐私)2. System Settings -> Keyboard -> Shortcuts -> System3. LockReferences 1. System Settings -> Security & Privacy (安全和隐私) 使用 Putty 远程登录…

FcaNet:频率通道注意力,进阶版SE

paper:https://arxiv.org/abs/2012.11879 github:GitHub - cfzd/FcaNet: FcaNet: Frequency Channel Attention Networks 目录 1. 动机 2. 方法 2.1. 回顾通道注意力和离散余弦变换(DCT) 通道注意力: 离散余弦变换…

如何使用Android平板公网访问本地Linux code-server

文章目录 1.ubuntu本地安装code-server2. 安装cpolar内网穿透3. 创建隧道映射本地端口4. 安卓平板测试访问5.固定域名公网地址6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务,浏览器…

Skywalking的Helm Chart方式部署

背景 之前介绍了AWS云上面的EKS的集中日志方案。这次主要介绍调用链监控了,这里我们用的是Skywalking。监控三王者(EFKPrometheusSkywalking)之一。之前AWS云上面使用fluent bit替代EFK方案,其实,AWS云在调用链方面&a…

Elasticsearch:ES|QL 入门 - Python Notebook

数据丰富在本笔记本中,你将学习 Elasticsearch 查询语言 (ES|QL) 的基础知识。 你将使用官方 Elasticsearch Python 客户端。 你将学习如何: 运行 ES|QL 查询使用处理命令对表格进行排序查询数据链式处理命令计算值计算统计数据访问列创建直方图丰富数…

UE4 Json事件设置Asset值(Asset如果都在同一目录下)

通过Json事件来设置,比如骨骼网格体(换皮)等等

docker可视化管理工具-DockerUI

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一个可视化的管理工…

ABAP笔记:定义指针,动态指针分配:ASSIGN COMPONENT <N> OF STRUCTURE <结构> TO <指针>.

参考大佬文章学习,总结了下没有提到的点:SAP ABAP指针的6种用法。_abap 指针-CSDN博客 定义指针:其实指针这玩意,就是类似你给个地方,把东西临时放进去,然后指针就是这个东西的替身了,写代码的…

iPhone语音备忘录误删?掌握这几个技巧轻松恢复【详】

语音备忘录是一款强大的应用程序,它允许用户使用语音输入功能来快速记录想法、提醒、待办事项等。无论是在行进间、工作中还是日常生活中,语音备忘录都是一个非常实用的工具,可以帮助您随时随地记录重要信息,而无需打字或者手动输…

redis-黑马点评-商户查询缓存

缓存:cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在,直接返回Shop shop JSONUtil.toBean(s, …

专家解读!IMAP的要点助您在旅途中保持邮件无忧!

你是否经常因会议而出差,需要在各种设备上灵活地访问你的电子邮件?如果是的话,你可能会想了解你的电子邮件系统是如何通过使用互联网消息访问协议(IMAP)来工作的,这样当你不在办公桌前时,你可以…

_.debounce防抖函数 在vue中使用this问题,应该传匿名函数而不是箭头函数

简单理解:_.debounce内部做了apply操作,箭头函数由于没有this,无法绑定this,导致最终this是undefined, 而匿名函数,成功通过applay绑定了this,所以this指向了vue组件实例。 methods: {// 防抖动dSave1: _.debounce(() > {console.log(thi…

你知道弧幕影院如何制作吗?其应用领域竟如此广泛!

“沉浸式”作为如今备受热议的内容展示形式,其有着多种可实现的途径,其中弧幕影院作为一项有着独特视觉效果、沉浸式观影体验的技术类型,便是大多数影院、主题公园等娱乐场景的必备设计展项,这种弧幕影院通常使用大型的半圆形屏幕…

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…

leetcode 232.用栈实现队列 JAVA

题目 思路 使用两个栈(输入栈和输出栈)来模拟一个队列。 队列的push操作实现:直接将元素push到输入栈中。 队列的pop操作实现:队列是先入先出,将输入栈的元素全部pop到输出栈中,然后再由输出栈pop&#…

PMP备考时间、出成绩时间有多久?从在威班培训到拿证我用了60天

尽管PMI官方没有对PMP考试通过分数进行具体规定,能否通过也是看成绩页显示的是“PASS”(通过)还是“FAIL”(未通过),没有成绩的数值体现,但有每个领域的等级可以进行查看,比如下图。…