一、Linux驱动开发思维
1、Linux下驱动直接操作寄存器不现实
2、要根据Linux下的各种驱动框架进行开发,一定要满足框架,要对Linux下的各种驱动框架有一定掌握。
3、驱动最终表现是在/dev/xxx下的文件,Linux之下一切皆文件。涉及文件就有打开、关闭、读、写等操作。
4、新内核支持设备树(.dts文件),该文件描述了板子的设备信息。不同设备有不同的信息,将这些信息写到设备树中,内核会分析设备树获得相关信息,相关的驱动和设备就会匹配。所以有设备树的情况下,第一件事就是在设备树中添加板
子的信息到设备树中,让内核知道板子有哪些设备。
二、Linux驱动开发分类
1、字符设备驱动
字符设备是最基本的一类设备驱动,它是以一个字节一个字节按照字节流进行读写操作的设备,读写数据分先后顺序,比如平时点灯、按键、SPI、IIC、LCD等都是字符设备,这些设备的驱动就叫字符设备驱动。字符设备是顺序的数据流设备,按照字节进行读写访问,字符设备不需要缓冲区,都是实时访问。
2、块设备驱动
块设备驱动相对字符设备驱动要复杂一些,块设备是针对存储设备的,比如平时我们熟悉的SD卡、各种Flash(NAND Flash、Nor Flash、 SPI Flash)、EMMC、硬盘等,块设备驱动就是上述这些存储设备的驱动。
块设备只能以块为单位进行读写访问,而且块是Linux虚拟文件系统(VFS)基本的数据传输单位。块设备在结构上可以进行随机访问,并且块设备使用缓冲区来暂时存放数据,等到条件成熟以后在一次性将缓冲区中的数据写入块设备中,这样可以提高存储器的使用寿命。
3、网络设备驱动
网络设备最常见就是网卡,网络设备以数据包的形式交互。