Linux驱动程序
文章平均质量分 87
橙色逆流
这个作者很懒,什么都没留下…
展开
-
Linux Input子系统--概述
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7714188 输入设备总类繁杂,包括按键,键盘,触摸屏,鼠标,摇杆等等,它们本身都是字符设备,不过内核为了能将这些设备的共性抽象出来,简化驱动的开发,建立了一个Input子系统。Input子系统分为三层,从下至上分别是输入设备驱动层,输入核原创 2012-07-04 19:54:25 · 6758 阅读 · 2 评论 -
Linux I/O Scheduler--CFQ(上)
CFQ,即Completely Fair Queueing绝对公平调度器,力图为竞争块设备使用权的所有进程分配一个等同的时间片,在调度器分配给进程的时间片内,进程可以将其读写请求发送给底层块设备,当进程的时间片消耗完,进程的请求队列将被挂起,等待调度。相对于Noop和Deadline调度器,CFQ要复杂得多,因此可能要分几次才能将其分析完。 优先级 每个进程都会有一个IO优先原创 2012-12-15 21:45:58 · 25087 阅读 · 2 评论 -
Linux I/O Scheduler--Deadline
一、原理 Deadline调度器对一个请求的多方面特性进行权衡来进行调度,以期即能满足块设备扇区的顺寻访问又兼顾到一个请求不会在队列中等待太久导致饿死。试想当应用程序频繁访问文件的一部分而此时如果有另一个远端的请求,那么这个请求将会在很长一段时间内得不到响应,这显然是不合理的。Deadline调度器为了兼顾这两个方面,引入了四个队列,这四个队列可分为两类,每一类都由读和原创 2012-12-12 17:52:54 · 12421 阅读 · 1 评论 -
Linux I/O Scheduler--Noop
每个块设备或者块设备的分区,都对应有自身的请求队列(request_queue),而每个请求队列都可以选择一个I/O调度器来协调所递交的request。I/O调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率。在前面讨论递交I/O请求的时候可以发现,每个request_queue都有一个request的队列,队列里的请求将按顺序被响应。实际上,除了这个队列,原创 2012-12-10 21:24:22 · 19129 阅读 · 2 评论 -
Linux I/O Block--递交I/O请求
在通用块层中,bio用来描述单一的I/O请求,它记录了一次I/O操作所必需的相关信息,如用于I/O操作的数据缓存位置,I/O操作的块设备起始扇区,是读操作还是写操作等等。struct bio的定义如下struct bio { sector_t bi_sector; /* device address in 512 byte sectors */ struct bi原创 2012-12-09 20:42:43 · 12363 阅读 · 1 评论 -
Linux I/O Block--块设备的表示
块设备的特点是其平均访问时间较长,因此为了提高块设备的访问效率,Linux内核用了很多的笔墨来设计和块设备相关的部分,这样一来,从代码的角度来看,访问一个文件的过程变得尤其的漫长……整个路径包含的过程基本可以概括为虚拟文件系统-->块设备实际文件系统-->通用块层-->I/O scheduler-->块设备驱动程序。为了提高块设备的访问效率,内核主要是在两个方面下功夫:1.引入缓存,当用户空间原创 2012-12-07 16:05:19 · 19415 阅读 · 2 评论 -
第一个Linux驱动-流水灯
水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7711695 本节介绍如何利用板载的Led和Linux的内核定时器实现一个简单的流水灯的驱动,所使用的开发板是TQ2440,内核版本2.6.30.4。 程序比较简单,也没涉及到什么机制,直接上代码了!原创 2012-07-03 16:02:05 · 5722 阅读 · 1 评论 -
Linux IIC框架(下)
水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7743184 本节结合i2cdev,来阐述Linux下的IIC是如何进行数据传输的。和spidev类似,i2cdev也是一个通用的设备驱动,但是又有些不同。在spidev中,spidev驱动注册会和相应的从设备绑定,也就原创 2012-07-13 11:41:04 · 6839 阅读 · 1 评论 -
Linux IIC框架(上)
IIC的框架结构和SPI是类似的,它们都拥有总线驱动层(IIC主控制器驱动层),核心层和从设备驱动层。本节主要介绍IIC主控制器的注册以及从设备的注册过程。首先要介绍描述IIC主控制器的结构struct i2c_adapter和描述IIC从设备的结构struct i2c_clientstruct i2c_adapter的定义如下:struct i2c_adapter { struct原创 2012-07-12 17:57:59 · 5643 阅读 · 1 评论 -
Linux SPI框架(下)
水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7737833 本节以spidev设备驱动为例,来阐述SPI数据传输的过程。spidev是内核中一个通用的设备驱动,我们注册的从设备都可以使用该驱动,只需在注册时将从设备的modalias字段设置为"spidev",这样才能和spidev驱动原创 2012-07-11 20:44:46 · 13980 阅读 · 3 评论 -
Linux SPI框架(中)
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7734150 上节介绍了SPI子系统中的一些重要数据结构和SPI子系统初始化的第一步,也就是注册SPI总线。这节介绍针对于s3c24xx平台的SPI子系统初始化,在看具体的代码之前,先上一张自己画的图,帮助理清初始化的主要步骤原创 2012-07-11 09:30:32 · 11139 阅读 · 2 评论 -
Linux SPI框架(上)
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7733476 Linux的SPI子系统采用主机驱动和外设驱动分离的思想,首先主机SPI控制器是一种平台设备,因此它以platform的方式注册进内核,外设的信息是以boardinfo形式静态定义的,在创建spi_master时,会根据外设的原创 2012-07-10 16:51:12 · 9988 阅读 · 2 评论 -
Linux Input子系统--设备的注册和打开
水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7718158 这节结合even handler来分析设备的注册和打开的过程,在设备注册之前,必须先初始化INPUT子系统,由input_init()函数来完成static int __init input_init(void){原创 2012-07-05 15:51:17 · 6806 阅读 · 3 评论 -
Linux IO Scheduler--CFQ(下)
前文介绍了CFQ调度器的一些概念和结构之间的关系,这里再结合实际的代码,来分析CFQ的工作流程。CFQ调度器的定义如下:static struct elevator_type iosched_cfq = { .ops = { .elevator_merge_fn = cfq_merge, .elevator_merged_fn = cfq_merged_request,原创 2012-12-17 20:41:54 · 9803 阅读 · 1 评论