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…

scala 方法重载_Scala中的方法重载

scala 方法重载Scala方法重载 (Scala method overloading) Method overloading is a method that is redefined in different ways under the same name. Method overloading is one of the methods used to implement polymorphism in Scala. 方法重载是一种使用相同名称以不…

C#网页自动登录和提交POST信息的多种方法 新人学习中

网页自动登录和提交POST信息的核心就是分析网页的源代码&#xff08;HTML&#xff09;&#xff0c;在C#中&#xff0c;可以用来提取网页HTML的组件比较多&#xff0c;常用的用WebBrowser、WebClient、HttpWebRequest这三个。 以下就分别用这三种方法来实现&#xff1a;1、WebBr…

四、采集和制作数据集

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

MTFBWU的完整形式是什么?

MTFBWU&#xff1a;愿力量与您同在 (MTFBWU: May The Force Be With You) MTFBWU is an abbreviation of “May The Force Be With You". MTFBWU是“愿力量与你同在”的缩写 。 It is an expression, which is commonly used in messaging or chatting on social media n…

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;若这张新牌的次序在…

学习Lucene笔记一:创建索引

public class HelloLucene {/*** 建立索引* param args*/public void index(){IndexWriter writer null; try {//1.创建Directory,// Directory directory new RAMDirectory();//索引是建立在内存中的Directory directory FSDirectory.open(new File("D:/Lucene/ind…

【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…

BCD码与十进制的相互转换

BCD码是用每四位代替一位十进制数&#xff08;0 到 9 的某一位数&#xff09; 例如&#xff1a;0x25 就代表25 十六进制的每位转换成二进制代表四个位。 下面是bcd转char short int long c语言程序 //************************************************************…

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

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

折腾430 launchpad

launchpad到手也已经很长时间了&#xff0c;团购了一个g2的&#xff0c;一个铁电的&#xff0c;现在马上又要来一个g2的&#xff0c;感觉手上的东西太多了&#xff0c;急需消化一下&#xff0c;首先呢还是先把430搞定吧。 ---------------------------------------------------…

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…

java中Iterator的小程序

import java.util.Collection; import java.util.HashSet; import java.util.Iterator;public class TestIterator {public static void main(String[] args){Collection booksnew HashSet();books.add("java讲义");books.add("java的Ajax宝典");books.add…