按照常规分类方法,linux驱动可以分为字符设备,块设备,和网络设备。
字符设备是一种按字节来访问的设备,字符驱动则负责驱动字符设备,这样的驱动通常支持open,close,read和write系统调用。例:串口,LED,按键。
块设备:在Unix系统中,块设备定义为:以块(通常是512字节)为最小传输单位的设备,块设备不能按字节处理数据。而Linux则允许块设备传送任意数目的字节。因此,块货和字符设备的区别仅仅是驱动的与内核的接口不同。常见的块设备包括硬盘,flash,SD卡
网络接口可以是一个硬件设备,如网卡;但也可以是一个纯粹的软件设备,比如回环接口(lo)。一个网络接口负责发送和接收数据报文。
按照总线分类法,可分为USB设备,PCI设备,平台总线设备
驱动程序控制设备,主要是通过访问设备内的寄存器来达到控制目的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器了。
设备使用
字符设备,对应用程序而言,字符设备就体现成一个文件。比如串口,在/dev目录下有一个文件。当我们需要通过串口发送数据的时候,实际上,我们就将数据写到文件里面去。当我们通过串口接收数据的时候,就直接读取文件。
块设备,通过文件系统这个载体,就可以访问设备。
网络接口设备,socket。
如何使用字符设备驱动驱动程序
1、编译、安装驱动
在linux系统中,驱动程序通常采用内核模块的程序结构来进行编码。因此,编译/安装一个驱动程序,其实质就是编译一个内核模块。
安装:使用insmod命令安装
2、字符设备文件
应用程序通过文件名找到字符设备文件,我们向字符设备文件里写入或读出数据,实际上就是在操作设备了。字符设备文件是应用程序和设备驱动程序之间的媒介。字符设备文件和设备驱动程序之间通过设备号建立联系。字符设备文件会对应一个设备号,设备驱动程序也会对应一个设备号。若设备号相同,则它们产生一一对应的关系。
创建字符设备文件的方法一般有两种:
1、 使用函数在驱动程序中创建
2、 使用mknod命令
mknod /dev/文件名 c 主设备号 次设备号
文件名:自定义,但不要和已有的重复
小c 表示字符设备文件
主设备号:使用 cat /proc/devices 可查看设备驱动主设备号
次设备号: 0-255之间的数字。