Linux下阻塞IO驱动实验实例三

一. 简介

前面两篇学习了两种针对应用程序阻塞式访问设备时,驱动的处理方法。文章地址如下:

Linux下阻塞IO驱动实验实例一-CSDN博客

Linux下阻塞IO驱动实验实例二-CSDN博客

本文继续学习另外一种针对阻塞式访问设备,驱动的实现方式,核心还是使用等待队列的机制。

      

二.  Linux下阻塞IO驱动实验实例三

本实验是在前面阻塞IO实验的基础上进行更改。即在 14_block_io工程的基础上。

1.  实现思路

等待队列的机制如下:

当设备不可访问的时候,就需要将进程对应的等待队列项添加到前面创建的等待队列头中,
只有添加到等待队列头中以后,进程才能进入休眠态。当设备可以访问以后,再将进程对应的等待
队列项从等待队列头中移除即可。

根据等待队列的机制,针对本实验的所实现的阻塞式访问设备时,驱动处理(阻塞部分)分析如下:

当应用程序 read数据时,会调用到驱动中对应的 read功能函数。所以,将等待队列项添加到等待队列头,切换进程状态为休眠态,(当有信号打断时,或者按键按下的中断发生时)之后移除等待队列项,设置进程状态等等的工作,主要在 驱动 read功能函数中实现。

唤醒休眠的进程可能有两种情况:一种被信号打断(即串口输入命令),一种就是按键有一次有效按键操作(按下->释放)。

而当按键按下后,就需要唤醒(上面被休眠)休眠的进程。当按键按下后会触发中断,中断函数中又开启了定时器,进入定时器中断函数中,处理了按键消抖工作,这里就需要唤醒休眠的进程了。

注意:等待队列的使用方法,具体使用方法可以参考Linux内核源码中等待队列的使用。这里可以参考 NXP官方提供的Linux源码(正点原子有提供的)。

2.  驱动代码实现

打开 14_block_io工程,key_irq.c添加阻塞式处理后如下:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
#include <linux/io.h>
#include <linux/cdev.h>
#include <linux/device.h>
#include <linux/of.h>
#include <linux/of_address.h>
#include <li

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

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

相关文章

【Python】新手入门学习:什么是硬编码?如何避免硬编码?

【Python】新手入门学习&#xff1a;什么是硬编码&#xff1f;如何避免硬编码&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教…

Python爬虫-使用Prefect框架实现一个可视化爬虫项目

前言 本文是该专栏的第19篇,后面会持续分享python爬虫干货知识,记得关注。 相信有的同学,在处理爬虫项目的时候,有时也会需要你将爬虫项目进行一个可视化展示,方便管理者能及时详细的了解当前爬虫任务的执行进度以及执行情况,甚至需要做一个爬虫监控预警的可视化任务。 …

初学Vue+Element——Element使用

0 引言 前端的开发模式为MVVM(Model-View-ViewModel)&#xff0c;而Vue侧重于VM开发&#xff0c;主要用于数据绑定到视图的&#xff0c;而ElementUI则侧重于V开发的前端框架&#xff0c;主要用于开发美观的页面的。 1 ElementUI介绍 Element&#xff1a;是饿了么公司前端开发…

项目实战-tpshop商城项目

项目实战-tpshop商城项目 环境部署准备软件工具准备远程连接测试远程连接测试-查看虚拟机IP地址远程连接测试-检测本机与虚拟机是否连通远程连接测试-通过远程工具连接linux服务器 常见问题处理 环境部署项目技术架构介绍部署tpshop项目-tpshop验证数据库验证用户信息表熟悉商品…

智慧公厕的创新:革命性的城市公共卫生设施

在现代城市中&#xff0c;公厕作为城市卫生设施的重要组成部分&#xff0c;对于提升城市形象和保障市民生活品质起着重要作用。然而&#xff0c;传统公厕普遍存在环境脏乱差、设施老旧、管理不规范等问题&#xff0c;给市民的使用体验带来了很多不便和不愉快。针对这一问题&…

魔法之线:探索string类的神秘世界

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

bug--xxoobject has no attribute xxx

Python 创建类的实例后却不能调用写的方法&#xff0c;检查了半天原来是缩进的问题&#xff0c;def函数不应该和class并列 只能说这个英文空格太小了&#xff0c;看不出来。。。。

敏捷估算: 成功的技巧和窍门

敏捷估算在敏捷项目管理中扮演着关键的角色&#xff0c;使团队能够估算完成任务所需的工作量、时间和资源。精确的估算使团队能够有效地计划他们的工作&#xff0c;管理期望&#xff0c;并在整个项目期间做出明智的决策。在本文中&#xff0c;我们将深入探讨各种敏捷估算技术和…

【线代基础】张量、向量、标量、矩阵的区别

1、标量&#xff08;Scalar&#xff09; 纯数字&#xff0c;无方向性、无维度概念。因此也叫 标量张量、零维张量、0D张量 例如&#xff0c;x18&#xff0c;x21.34 x1、x2即为标量 2、张量&#xff08;tensor&#xff09; 具有方向性&#xff0c;可以理解为一个多维数组&a…

python学习笔记 -- 函数

目录 一. 函数的定义和调用 二. 函数的返回值 三. 变量的作用域 四. 函数的链式调用 五. 函数的嵌套调用 六. 函数的递归调用 七. 函数参数的默认值 八. 关键字传参 一. 函数的定义和调用 函数&#xff0c;指一段可以被重复调用的代码。在python中&#xff0c;函数定义…

Redis系列之持久化机制RDB和AOF

Redis系列之持久化机制RDB和AOF 文章目录 1. 为什么需要持久化&#xff1f;2. 持久化的方式3. RDB机制3.1 RDB机制介绍3.2 配置RDB3.3 什么时候触发3.4 操作实例3.5 RDB优势和不足 4. AOF机制4.1 什么是AOF机制&#xff1f;4.2 同步机制4.3 重写机制4.4 AOF的优势和不足 混合模…

新手做抖店,0基础玩转抖店,运营实操步骤!

我是电商珠珠 抖店的热度很高&#xff0c;很多新手想要去入驻抖店&#xff0c;但有部分人怕麻烦&#xff0c;不知道抖店操作具体有多复杂。其实&#xff0c;运营抖店很简单&#xff0c;就去选选品、找找达人、找找货源厂家等&#xff0c;具体怎么做&#xff0c;我今天一次性来…

简单使用国产数据库—达梦

达梦数据库是一款由中国的达梦软件公司开发的关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它在业界以其高性能、可扩展性和安全性而著称。该系统广泛应用于各种应用程序的数据存储和管理&#xff0c;满足用户对于数据处理和管理的多样化需求。 安装好的达梦数…

【Stable Diffusion】入门:AI绘画提示词+参数设置攻略

目录 1 提示词1.1 分类和书写方式1.1.1 内容型提示词1.1.2 标准化提示词1.1.3 通用模板 1.2 权重1.2.1 套括号1.2.2 数字权重1.2.3 进阶语法 1.3 负面提示词 2 参数详解2.1 Sampling steps2.2 Sampling method2.3 Width, Height2.4 CFG Scale2.5 Seed2.6 Batch count, Batch si…

蓝桥杯Python题目类型

"蓝桥杯"是一项全国性的软件编程竞赛&#xff0c;旨在促进软件和信息技术领域专业人才培养。由于每年的题目都会有所变化&#xff0c;我无法提供具体的蓝桥杯Python题目。但是&#xff0c;我可以告诉你一些通常出现在编程竞赛中的Python题目类型&#xff0c;以及你可…

论文翻译 - BITE: Textual Backdoor Attacks with Iterative Trigger Injection

论文链接&#xff1a;https://arxiv.org/pdf/2205.12700.pdf 项目代码&#xff1a;https://github.com/INK-USC/BITE BITE: Textual Backdoor Attacks with Iterative Trigger Injection Abstract1 Introduction2 Threat Model3 Methodology3.1 Bias Measurement on Label Dist…

Ubuntu20系统安装完后没有WIFI

Ubuntu20系统安装完后没有WIFI 查看后发现是缺少网卡&#xff0c;经过查询之后&#xff0c;发现是HRex39/rtl8852be 然后查询了Kernel版本 Check the Kernel Version in Linux $ uname -srm Linux 5.15.0-67-generic x86_64然后进行下载安装 Build(for kernel < 5.18) …

119.龙芯2k1000-pmon(18)-全自动安装linux系统

经过两天的测试和完善&#xff0c;现在基本已经正常可用了。 &#xff08;全自动是假&#xff0c;接近全自动吧。&#xff09; 需要使用配测电脑的网络功能&#xff0c;windows即可&#xff0c;脱离linux虚拟机。&#xff08;理论上讲u盘也是可以的&#xff09; 测试平台&…

客户案例|100M 768 维向量数据,Zilliz Cloud 稳定支持 Shulex VOC 业

日前&#xff0c;国际化 VOC SaaS 公司数里行间&#xff08;Shulex&#xff09;将上亿数据量的核心业务从开源向量数据库 Milvus 迁移至全托管的向量数据库云服务 Zilliz Cloud。 相比于 Milvus&#xff0c;Zilliz Cloud 实现了 Shulex VOC 评论分析洞察报告生成速度 30% 的提升…

AI 驱动的医疗变革:迈向未来医疗新生态

直面呼啸而来的人工智能&#xff0c;医疗行业将首当其冲&#xff0c;发生翻天覆地的变化。美国心脏病学家兼基因学教授埃里克托普在《未来医疗》中预测&#xff0c;未来人类将拥有“健康小助手”——个人医疗数据和处理能力&#xff0c;还能轻松预防疾病。诸多评论家也持类似观…