Linux驱动程序框架以及概述

目录

  • 驱动程序三种基本类型(组成)
  • 设备驱动程序功能
  • 驱动程序的内核模块机制(开发模式)
  • 驱动程序框架
    • 三个主要部分
    • 1、字符设备驱动程序框架
    • 2、块设备驱动程序框架
    • 2、网络设备驱动程序框架

驱动程序三种基本类型(组成)

1、字符设备(Char Device)
2、块设备(Block Device)
3、网络设备(Net Device)

设备驱动程序功能

1、对设备初始化和释放
2、把数据从内核传送到硬件和从硬件读取数据
3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据
4、检测和处理设备出现的错误

访问特定硬件
访问特定硬件就是访问物理地址(如处理器内设备的寄存器、外设的地址映射)。然而由于MMU的内存映射以及对操作系统的保护,运行在用户态的应用程序一般不能直接访问硬件地址。因此需要驱动程序作为应用程序和访问硬件之间的媒介。

驱动程序的内核模块机制(开发模式)

静态编译、动态加载
Linux提供了一种内核模块机制。一个模块被编译成单独的内核模块后,一开始可以不编译到整个内核中,当内核需要加入该模块的时候,不需要重新编译整个内核,只需要将该内核模块插入(加载)到正在运行的内核中。同样,也可以从正在运行的内核中卸载。

Linux设备驱动可以使用两种方式被编译和加载:
1、直接编译到Linux内核,随Linux启动时加载,随时可以使用该驱动程序;
2、编译成一个可加载和删除的模块,用insmod加载,rmmod删除。

在这里插入图片描述

驱动程序框架

三个主要部分

在这里插入图片描述
1、设备初始化/释放:
负责对设备进行初始化和释放
初始化检测所要驱动的硬件设备是否存在、能否正常工作。如果设备正常,则对设备及相关驱动程序
需要的软件状态进行配置/初始化。
2、上半部分:服务于文件系统I/O
负责:通过文件系统从应用程序读取数据,把数据通过文件系统回送给应用程序(文件系统层<->设备驱动层)
这部分由文件系统相关的系统调用执行,和调用进程属于同一个进程,具有调用进程的运行环境,只是由用户态变成了内核态。
3、下半部分:服务于硬件设备的I/O
负责:把数据从内核传送到硬件,从硬件读取数据到内核(设备驱动曾<->硬件层)
这部分可以通过中断方式实现,对于多数设备可以提高CPU处理效率。
这部分也可以不通过中断方式实现,只要能完成设备驱动层和硬件之间的数据通信即可。

1、字符设备驱动程序框架

在这里插入图片描述

2、块设备驱动程序框架

在这里插入图片描述

2、网络设备驱动程序框架

在这里插入图片描述

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

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

相关文章

curl 使用整理(转载)

我一向以为&#xff0c;curl只是一个编程用的函数库。 最近才发现&#xff0c;这个命令本身&#xff0c;就是一个无比有用的网站开发工具&#xff0c;请看我整理的它的用法。 curl网站开发指南 阮一峰 整理 curl是一种命令行工具&#xff0c;作用是发出网络请求&#xff0c;然…

Linux内核逻辑结构

linux内核从逻辑上可以分为5个部分&#xff1a; 1、进程调度 进程调度控制进程对CPU的访问。当需要选择下一个进程运行时&#xff0c;由调度程序选择最值得运行的程序。可运行进程实际上是仅等待CPU资源的进程&#xff0c;如果某个进程在等待其他资源&#xff0c;则该进程是不可…

对批量文件重命名

一、 文件夹下存放各种不同名称的同类型文件 F:\test 二、重命名格式从a0开始&#xff0c;数字依次递增&#xff0c;a0,a1,a2,a3… import ospathr"F:\test"#要修改文件的路径 namer"a"#命名从什么开始 num0#默认从0开始&#xff0c;即a0,a1,a2...... …

替换Quartus 自带编辑器 (转COM张)

正文 此处以Quartus II 11.1和Notepad v5.9.6.2为例。 1. 使用QII自动调用Notepad来打开HDL、sdc、txt等文件&#xff1b;并且可以在报错的时候&#xff0c;Notepad可以直接高亮所报错的行&#xff08;此模式下&#xff0c;Notepad最大化后效果最佳&#xff09;。 方法&#xf…

四、采集和制作数据集

一、采集数据 安装labelme&#xff1a;pip install labelme 打开labelme&#xff1a;labelme 将收集好的照片(320320&#xff0c;png格式)存放到一个文件夹中&#xff0c;例如我的是F:\test&#xff0c;再此文件夹下再创建个文件夹label用于存放标签文件 使用labelme打开数据…

VMware14.0 安装 CentOS7.2

大致流程 对于VMware14.0安装包用百度网盘下载即可。 链接&#xff1a;https://pan.baidu.com/s/1DEGa47EbI1Fup_MTXhv0xg 提取码&#xff1a;izo6 华为云CentOS7 下载划线的。其他步骤与大致流程里一样。 最后输入root 以及配置的密码即可&#xff1a;密码输入时是没有任何显…

基于visual Studio2013解决C语言竞赛题之1049抓牌排序

&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/* 功能&#xff1a;插入排序。许多玩牌的人是以这样的方式来对他们手中的牌进行排序的&#xff1a;设手中原有3张牌已排好序&#xff0c;抓1张新牌&#xff0c;若这张新牌的次序在…

【C++进阶】C++创建文件/屏幕输出流类(将信息同时输出到文件和屏幕)

在软件的调试技术中&#xff0c;很重要的一个技术是将软件运行过程中的一些信息写入到“日志文件”中。但是同时还要将信息显示到屏幕上&#xff0c;以方便程序员实时查看这些信息。 最简单的一种办法是这样的&#xff1a; std::ofstream output("debug.log", ios::…

五、加载数据集

之前写过加载数据集的一些小笔记&#xff0c;这里详细内容就不再叙述了 详细学习可以参考该博文二、PyTorch加载数据 一、分析 因为U-net网络架构是输入1通道&#xff0c;大小为(572,572)的灰度图&#xff0c;图片大小无所谓&#xff0c;我的思路是将三通道的图像使用OpenCV进…

CDMA的完整形式是什么?

CDMA&#xff1a;码分多址 (CDMA: Code Division Multiple Access) CDMA is an abbreviation of Code Division Multiple Access. Code Division Multiple Access is a digital cellular technology and displays a network of multiple accesses. The various radio communica…

DSP关于存储器读写、IO读写时序图的注意点

这里的存储器图不涉及插入等待周期。 IO设备的图可以自行减去插入等待周期&#xff0c;然后观察。 存储器读读写 存储器写写读 I/O设备读写操作

oem模式是什么_OEM的完整形式是什么?

oem模式是什么OEM&#xff1a;原始设备制造商 (OEM: Original Equipment Manufacturer) OEM is an abbreviation of "Original Equipment Manufacturer". Its meaning has changed over time. In former times, it alluded to a corporation that manufactures produ…

妈了个巴卡

配置文件修改&#xff1a; 一、打开PC端微信&#xff0c;打开咩了个咩小程序&#xff0c;点进入第一关&#xff0c;之后再关掉小程序 二、PC端微信设置里面&#xff0c;找到管理文件&#xff0c;打开文件夹 三、Applet下按修改日期找到a9结尾的文件 四、接着进入\usr\gamecac…

【C++进阶】利用重载二元运算符改进平面向量类Vec2D

先前回顾 在【C进阶】 遵循TDD原则&#xff0c;实现平面向量类(Vec2D)中我们初步实现了Vec2D内容&#xff0c;现在做出一定的改进&#xff1a; 实现Vec2D的一半二元算数运算符重载 1、 - (两个Vec2D对象运算以及1个Vec2D对象与一个double数运算) 2、*(点乘和数乘) 同时将之前…

简单的群体测试方案C++代码(Group testing against Covid-19)

原理参考链接 https://www.econstor.eu/handle/10419/221811 http://www.magigen.com/h-nd-348.html 文章原理回顾 文章比较了两种估计人群中病毒流行率的方法&#xff1a; 1、个体测试&#xff0c;即对12000人的样本进行病毒测试&#xff0c;并采用标准二项测试得出95%的置…

DDOS小测试

一、F12打开开发者工具&#xff0c;刷新待攻击的网站&#xff0c;重新获得一次请求 二、user-agent为浏览器的合法标识符 user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 是键值对的形式&…

融合注意力机制的YOLOv5火焰识别+Arduino UNO R3实现5s内连续识别到火焰,警报灯红灯亮起

效果&#xff1a;摄像头捕获室内图像&#xff0c;将视频实时通过串口通讯传递给改进之后的YOLOv5神经网络进行火焰识别&#xff0c;若5s内连续检测到有火焰&#xff0c;警报灯变红&#xff0c;进入危险状态。5s之内未连续出现火焰&#xff0c;警报灯变绿&#xff0c;进入安全状…

Moon.Orm性能报告

以下为有网友公司的评估测试及使用规范 大家可以下载word看看 http://pan.baidu.com/s/1hquvRuc 一、和ADO.NET进行的压力测试 说明&#xff1a;2000并发用户&#xff0c;此图为一网友公司对moon.orm的测评 二、和ADO.NET的性能对比测试 说明&#xff1a;同时请求10000条数据&a…

(保守群组测试 非保守群组测试 二次重复测试 自适应二次重复测试)四种群体测试的C++代码

目录原理保守组检测非保守组检测二次重复测试自适应二次重复测试四种测试方法的核心代码保守群组测试非保守群组测试二次重复测试与自适应二次重复测试测试代码参考文献原理 假设该病在人群中的患病率&#xff08;先验概率&#xff09;为p&#xff0c;我们想用群体检验法检验N…

AngularJS中的表达式

AngularJS表达式 (AngularJS Expressions) In AngularJS, expressions are solved to give a result. It outputs the result of the expression in the html element that called it. Expressions in AngularJS contain literals, constants, operators and variables with re…