
Linux设备驱动程序
Alex-wu
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动程序学习(九)——块设备驱动程序
Linux块设备特点字符设备与块设备的不同主要有:块设备只能以块为单位接收输入和返回输出,而字符设备则以字节为单位。大多数设备是字符设备,因为它们不需要缓冲而且不以固定块大小进行操作。块设备对于I/O请求有对应的缓冲区,因此它们可以选择以什么顺序进行响应,字符设备无须缓冲且被直接读写。对于存储设备而言,调整读写的顺序作用巨大,因为在读写连续的扇区的存储速度比分离的扇区更快。字符设备...原创 2019-07-15 09:01:02 · 957 阅读 · 0 评论 -
Linu习设备驱动程序学习(十一)——USB设备驱动
**通用串行总线(USB)是主机和外围设备之间的一种连接。USB最初是为了替代许多不同的低速总线(包括并行、串行和键盘连接)而设计的,它以单一类型的总线连接各种不同类型的设备。**现在可以支持几乎所有的可以连接到pc上的设备,最新的usb规范增加了理论上高达480Mbps的高速连接。 从拓扑上来看,一个USB子系统并不是以总线的方式来布置的,它是一颗由几个点对点的连接构建而成的树,这些连接...原创 2019-07-18 09:29:16 · 511 阅读 · 0 评论 -
Linux设备驱动程序学习(八)——内存与I/O访问
内存空间和I/O空间 在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的,它通过特定的指令in、out来访问。端口号标识了外设的寄存器地址。Intel语法中的in、out指令格式如下:IN 累加器, {端口号│DX}OUT {端口号│DX},累加器 目前,大多数嵌入式微控制器(如ARM、PowerPC等)中并不提供I/O空间,而仅存在内存空间。内存空间可以直接通...原创 2019-07-12 09:22:05 · 2936 阅读 · 0 评论 -
Linux设备驱动程序学习(十二)——I2C设备驱动
I2C总线仅仅使用SCL、SDA这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。因此,I2C总线非常广泛地应用在EEPROM、实时钟、小型LCD等设备与CPU的接口中。 Linux系统定义了I2C驱动体系结构。在Linux系统中,I2C驱动由3部分组成,即I2C核心、I2C总线驱动和I2C设备驱动。这3部分相互协作,形成了非常通用、可适应性很强的I...原创 2019-07-22 09:40:06 · 590 阅读 · 0 评论 -
Linux设备驱动程序学习(十四)——tty设备驱动程序
终端设备 在Linux系统中,终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。tty是Teletype的缩写,Teletype是最早出现的一种终端设备,很像电传打字机,是由Teletype公司生产的。 Linux中包含如下几类终端设备:串行端口终端(/dev/ttySn)串行端口终端(Serial Port Terminal)是使用计算机串行端口连接的终端...原创 2019-07-29 10:41:28 · 1329 阅读 · 0 评论 -
Linux设备驱动程序学习(十六)——Linux设备树解析
设备树简介 在内核源码中,存在大量对板级细节信息描述的代码。这些代码充斥在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录,对内核而言这些platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data绝大多数纯属垃圾冗余代码。为了解决这一问题,ARM内核版本3.x之后引入了原先在Power...原创 2019-08-06 09:54:01 · 5123 阅读 · 1 评论 -
Linux设备驱动学习——platform总线驱动
在Linux 2.6以后的设备驱动模型中,需关心总线、设备和驱动这3个实体,总线将设备和驱动绑定。在系统每注册一个设备的时候,会寻找与之匹配的驱动;相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成。platform总线 相对于USB、PCI、I2C、SPI等物理总线来说,platform总线是一种虚拟、抽象出来的总线,实际中并不存在这样的总线。 那为什么需要...原创 2019-08-08 11:07:59 · 418 阅读 · 0 评论 -
Linux设备驱动程序——调试技术
对于任何系统来说,调试都是必不可少的内容,当然在Linux设备驱动程序中也不例外,下面就是介绍Linux调试的一些方法以及工具。Linux调试器GDBGDB调试器的介绍和基本用法 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具,GDB主要可帮助工程师完成下面4个方面的功能:启动程序,可以按照工程师自定义的要求运行程序。让被调试的程序在工程师指定的断点处停住,断点可...原创 2019-07-31 10:33:31 · 1327 阅读 · 0 评论 -
Linux设备驱动程序学习(十五)——LCD设备驱动程序
LCD屏的定义和分类LCD的定义 LCD是Liquid Crystal Display的简称,也就是经常所说的液晶显示器。 LCD能够支持彩色图像的显示和视频的播放,是一种非常重要的输出设备。LCD的分类(按驱动方式) 依据驱动方式可分为静态驱动、简单矩阵驱动以及主动矩阵驱动3 种。其中,简单矩阵型又可再细分扭转向列型(TN)和超扭转式向列型(STN)两种,而主动矩阵型则以薄...原创 2019-08-05 09:02:23 · 908 阅读 · 0 评论 -
Linux内核regmap介绍
Regmap介绍 内核3.1引入一套新的API regmap,目的是提取出关于I2C SPI irq等相关注册、使能以及读写的公共部分,以提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。基础结构 struct regmap_config 结构体代表一个设备的寄存器配置信息,在做 Regmap 初始化时,驱动就需要把这个结构体传给 Regmap。这个结构体的定义在 i...原创 2019-08-27 17:35:29 · 2929 阅读 · 0 评论 -
Linux设备驱动程序学习(七)——定时器
这一部分主要是对于内核代码如何处理时间问题的解析,主要学习的内容:如何度量时间差,如何比较时间如何获取当前时间如何将操作延迟到指定的一段时间如何调度异步函数到指定的时间之后去执行度量时间差内核通过定时器中断来跟踪时间流。下面是一些相关的概念:时钟中断:由系统定时硬件以周期性的间隔产生。hz:上述间隔由hz的值设定,hz是一个与体系结构相关的常数,定义在<linux/pa...原创 2019-07-10 15:17:01 · 384 阅读 · 0 评论 -
Linux设备驱动程序学习(六)——中断处理
中断是指 CPU 在执行程序的过程中,出现了某些突发事件时 CPU 必须暂停执行当前的程序,转去处理突发事件,处理完毕后 CPU 又返回原程序被中断的位置并继续执行。中断的分类根据中断来源分类根据中断的来源,中断可分为内部中断和外部中断:内部中断的中断源来自 CPU内部(软件中断指令、溢出、除法错误等,例如,操作系统从用户态切换到内核态需借助 CPU 内部的软件中断);外部中断的中断源...原创 2019-07-09 09:31:15 · 2303 阅读 · 0 评论 -
Linux设备驱动程序学习(一)——Linux设备驱动程序的介绍
这一部分主要是用来介绍Linux设备驱动程序的一些基本概念,包括:Linux设备驱动程序的作用、内核功能的划分以及设备和模块的分类。Linux设备驱动程序的作用设备驱动程序就像一个个的“黑盒子”,使某个特定硬件响应一个定义良好的内部编程接口,这些操作完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。将这些调用映射到作用于实际硬件的设备特有操作上,...原创 2019-07-03 10:43:17 · 1105 阅读 · 2 评论 -
Linux设备驱动程序学习(二)——准备工作和模块概念了解
前面是介绍Linux驱动设备程序的概念,这一部分的话才是真正开始学习Linux驱动设备程序的编写,这一部分主要是准备好Linux内核的源码树,然后通过源码树来介绍模块构造和运行,通过实例的模块程序来学习模块的装载和卸载。设置测试系统准备好一个Linux内核源码树,就相当于java中准备好编译环境和编译工具,步骤为:查看当前Linux系统的内核版本alex_wu@wu:~$ uname ...原创 2019-07-03 11:40:52 · 558 阅读 · 1 评论 -
Linux设备驱动程序学习(三)——字符设备驱动程序
前面我们了解了Linux设备驱动程序的入门知识和准备工作,下面我们就将真正的进入Linux设备驱动程序的世界,下面就将LDD3下面的scull字符设备驱动程序的实现来学习字符设备驱动的特点以及如何在用户空间被调用,书籍和源码下载地址为链接: https://pan.baidu.com/s/1OB4z_vjlov2gHTwrCe7hjQ 提取码: b427字符设备驱动程序字符设备和字符设备驱动程...原创 2019-07-03 22:06:45 · 1228 阅读 · 0 评论 -
Linux设备驱动程序学习(四)——并发和竟态
并发:是指多个单元同时、并行被执行,并发执行单元对共享资源的访问就很容易导致竞态。竞态: 假设有一个设备,执行单元A对其写入3000个字符’a’而另一个执行单元B对其写入4000个’b’,第三个执行单元C读取globalmem的所有字符,如果执行单元A、B对于设备的写入操作同时发生,此时就会造成竞态。并发及管理竞态通常是作为对资源的共享访问结果而产生的。当两个执行线程需要访问相同的数据结构(...原创 2019-07-05 09:22:18 · 534 阅读 · 0 评论 -
Linux设备驱动程序学习(五)——高级字符设备驱动程序
在前面我们学习了字符设备驱动程序的实现,但是不知道你们有没有注意到,在前面,我们只学习了open、close、read和write的方法实现,而对于iotctl和llseek并没有讲解,而这一部分,将讲解这两个方法的实现以及阻塞和非阻塞型I/O的一些相关知识。定位设备定位设备的方法:llseek llseek 方法实现了 lseek 和 llseek 系统调用,主要用来确定读写数据的位置。...原创 2019-07-08 09:12:34 · 734 阅读 · 0 评论 -
Linux设备驱动程序学习(十三)——Linux设备驱动模型
由于Linux支持世界上几乎所有的、不同功能的硬件设备(这是Linux的优点),导致Linux内核中有一半的代码是设备驱动,而且随着硬件的快速升级换代,设备驱动的代码量也在快速增长。为了降低设备多样性带来的Linux驱动开发的复杂度,以及设备热拔插处理、电源管理等,Linux内核提出了设备模型(也称作Driver Model)的概念。设备模型将硬件设备归纳、分类,然后抽象出一套标准的数据结构和...原创 2019-07-24 09:03:29 · 526 阅读 · 0 评论 -
Linux设备驱动程序学习(十)——PCI驱动程序
前面介绍的是最底层的硬件控制,这部分将介绍高级总线架构的一些综述,总线由电气接口和编程接口够成。下面将重点介绍PCI总线的编程接口以及对应的内核函数。PCI(外围设备互联)接口 PCI总线是当今普遍使用在桌面以及更大型计算机上的外设总线,而且该总线是内核中得到最好支持的总线。尽管许多计算机用户将PCI看成是一种布置电子线路的方式,但实际上它是一组完整的规范,定义了计算机的各个不同部分之间...原创 2019-08-06 09:55:04 · 2686 阅读 · 0 评论 -
Linux设备驱动程序——一个简单的字符设备驱动程序
对于想入门Linux设备驱动程序的人来说,字符设备驱动往往是最简单的了解和实践的最佳选择,这里就实现一个简单的字符驱动,以便于大家了解字符设备驱动程序。字符设备驱动程序这里就我实现的字符设备驱动程序的源代码来讲解,这只是最简单的实现,便于大家了解,因此并没有涉及到锁,休眠等操作,不过在实际的字符设备驱动程序中,这些操作也是很常见的。char.c源代码#include <linux/m...原创 2019-07-04 11:36:41 · 1761 阅读 · 3 评论 -
Android系统驱动介绍
Android中内核的结构和标准的Linux 2.6内核是基本相同的,不过Android在其基础上增加了私有内容。Android在Linux内核中增加的主要是一些驱动程序,这些驱动程主要分为两种:Android专用驱动和Android使用的设备驱动。Android专用驱动 Android专用驱动程序不是Linux的标准驱动,它们的作用是辅助系统运行,一般不操作实际硬件。Ashmem...原创 2019-08-12 09:02:37 · 6999 阅读 · 1 评论