摘要:
对于字符设备驱动,当file_operations注册好了之后,这只是实现了该驱动的内部功能,我们还要向用户提供操作接口,也就是在/dev/目录下创建字符设备节点,其中device_create函数就用于实现该功能。 创建设备节点是device_create的功能之一,下面主要分析该功能的主要流程。 阅读全文
摘要:
DMA(Direct Memory Access,直接内存存取) 一般来说,计算机对内存数据进行处理的时候,需要从内存把数据读进寄存器,然后进行进一步的操作(比如运算处理)。 但是有些数据并不需要运算处理这一类型的操作,只是单纯的移动数据,而把数据读进寄存器,然后再把数据从寄存器写进内存会消耗cpu 阅读全文
摘要:
首先来了解新的字符设备驱动注册方式。 对于Linux字符设备驱动注册方式 2.4及其之前的内核: register_chrdev(0,"hello",hello_fops); 该函数所注册的字符设备是以主设备号为单位的,一个主设备号只能对应一个fops,只能支持256个驱动 2.4以后的内核 : a 阅读全文
摘要:
本驱动基于linux2.6.32.2 i2c遵循的也是总线设备驱动框架,具体流程如下: 当加入驱动(driver)时: i2c_add_driver //进行驱动注册 i2c_register_driver(THIS_MODULE, driver); driver_register(&driver- 阅读全文
摘要:
IIC 即 inter-integrated-circuit,又称 I2C 一种总线结构,具体接受请度娘。 I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。 以下为m 阅读全文
摘要:
说到网络,对于学过计算机网络的人来说,大概会先想到网络5层协议,但是由于一般的操作系统都集成了网络协议模块,所以网卡驱动模块跟协议模块的关系其实是微乎其微的,硬要说是在协议中的哪一部分的话,应该是在物理层,网卡驱动就是连接物理层跟其它上层协议的模块。 网卡驱动的主要功能有: 1.接收硬件传来的数据, 阅读全文
摘要:
首先,nor flash驱动作为块设备驱动,大部分的流程跟nand flash一样,只是最底层的硬件操作层跟协议层有区别, 代码如下 不过Linux的nor驱动一般使用总线设备驱动框架,在probe函数内部进行芯片识别(do_map_probe)跟分区(add_mtd_partitions). 最后 阅读全文
摘要:
当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备 NAND FLASH就作为一个最底层的块设备。 而我们写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。 框架如下: 1.即使 阅读全文
摘要:
总线设备驱动框架是一种类似于输入子系统的框架。 总线设备驱动,顾名思义,共有三个模块,负责硬件资源的设备(device),负责处理硬件事务并且连接其他功能模块的驱动(driver),还有就是连接这两者的总线(bus)。 上图以usb为例子展示了总线设备驱动,其过程分为以下步骤: 1.当加入一个设备时 阅读全文
摘要:
平台:S3C2440 触摸屏的硬件相关模块其实有两个: 一个是触摸屏本身,当然就是用于触摸响应。当被触摸屏被按下的时候产生电信号,当按下被松开的时候又产生电信号。 另外一个就是adc,也就是模数转换模块。当触摸屏被按下的时候会产生电信号(电压)而我们需要通过该电压得到触摸屏按下的位置,因此需要利用a 阅读全文