Linux驱动开发基础
驱动分类
常规分类法
1、 字符设备
字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常实现open,close,read和write系统调用。例如:串口、LED、按键。
2、 块设备
在大部分的UIIX系统,块设备不能按字节处理数据,只能一次传输一个或多个长度是512字节(或一个更大的2次幂的数)的整块数据。而Linux则允许块设备传送任意数目的字节。因此,块和字符设备的区别仅仅是驱动的与内核的接口一同。例如硬盘、flash、SD卡。
3、网络接口
网络接口可以是一个硬件设备,如网卡;但也可以是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。
总线分类法
USB设备、PCI设备、平台总线设备。
字符设备驱动程序的使用
用户程序通过设备文件(又名:设备节点)来使用驱动程序操作字符设备和块设备。设备驱动是通过内核模块来实现。编译安装一个驱动程序实质就是编译安装一个内核模块。首先我们先说一下关于设备号的概念。
设备号:用来表示与设备文件相连的驱动程序。次编号被驱动程序用来辨别操作的是哪个设备。
创建字符设备文件的方法一般有两种:
1、 使用mknod命令
mknod /dev/文件名 c 主设备号次设备号
2、使用函数在驱动程序中创建