摘要:
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线。 因此,I2C总线被非常广泛地应用在EEPROM,实时钟,小型LCD等设备与CPU的接口中。linux下的驱动思路 在linux系统下编写I2C驱动,目前主要有两种方法,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux下I2C驱动体系结构来完成。下面比较下这两种方法: 第一种方法: 优点:思路比较直接,不需要花很多时间去了解linux中复杂的I2C子系统的操作方... 阅读全文
摘要:
linux操作系统下nand flash驱动框架 当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使nand flash是一个块设备,它也能作为一个字符设备使用,因为说到底,也只是从寄存器内部读取值而已。 2.对于不同的文件系统,会有不同的文件组织形式。 3.由于块设备的硬件操作繁琐,就像nand flash的读写操作就需要发送地址跟命令... 阅读全文
摘要:
总线设备驱动框架 总线设备驱动框架是一种类似于输入子系统的框架。 总线设备驱动,顾名思义,共有三个模块负责硬件资源的设备(device)负责处理硬件事务并且连接其他功能模块的驱动(driver)连接这两者的总线(bus)。以usb为例子展示总线设备驱动其过程分为以下步骤: 1.当加入一个设备时, 如果该设备支持中断唤醒线程,那么在中断处理程序内部就获取该设备的资源信息,然后构建device结构体,加入总线的device链表, 或者我们可以自己编写模块,在模块中填写该硬件的资源,然后构建device结构体,加入device链表。 2.对于新加入的device,通过比对driv... 阅读全文
摘要:
大体上跟windows的消息处理机制差不多app所要做的事情 1.绑定信号处理函数 2.通知驱动该程序的pid,好让驱动能够通过pid返回信号 3.设置异步标志位驱动程序所要做的事情 1.添加.fasync函数 2.构造fasync_struct结构体指针,该结构体用于存放pid 3.中断处理函数内部调用kill_fasync,当中断到来的时候就会发送信号流程如下 阅读全文
摘要:
input输入子系统整体流程 input子系统在内核中的实现,包括输入子系统(Input Core),事件处理层(Event Handler)和设备驱动层。 在开头部分会从设备驱动层做为线索,分析输入子系统和事件处理层是如何配合的,最后从用户角度出发,从“/dev/input/*”接口如何使用输入子系统提供的服务。 既然需要详细分析,有一个这样的流程图能够帮助我们在被绕进代码的过程中,找到出口,你能够知道你现在位于代码框架的什么位置,不会忘记正在分析的代码的“身份”。 设备驱动层注册到input子系统 以S3C2440触摸屏的驱动代码代例,初始化函数定义了struct input... 阅读全文