Linux 中的三大类驱动:字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是占用篇幅最大的一类驱动,因为字符设备最多,从最简单的点灯到 I2C、 SPI、音频等都属于字符设备驱动的类型。块设备和网络设备驱动要比字符设备驱动复杂,就是因为其复杂所以半导体厂商一般都给我们编写好了,大多数情况下都是直接可以使用的。所谓的块设备驱动就是存储器设备的驱动,比如 EMMC、 NAND、 SD 卡和 U 盘等存储设备,因为这些存储设备的特点是以存储块为基础,因此叫做块设备。网络设备驱动就更好理解了,就是网络驱动,不管是有线的还是无线的,都属于网络设备驱动的范畴。一个设备可以属于多种设备驱动类型,比如 USB WIFI,其使用 USB 接口,所以属于字符设备,但是其又能上网,所以也属于网络设备驱动。

1、字符设备驱动  
  定义:字符设备驱动是以不定长度的字元来转送资料,字符设备是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流;
  组成:字符设备驱动的模块加载和卸载函数;字符设备驱动的file_operation结构体的成员函数;
  举例:鼠标,键盘,显示器;
2、块设备驱动
  定义:块设备驱动是以固定大小长度来传送和转移资料,块设备能够随机,不需要按照顺序地访问固定大小的数据片;
  举例:硬盘,U盘;
3、网络设备驱动
  定义:网络设备是一个比较特殊的设备,他负责接受和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都由网络驱动决定,他并不存在于/dev下面。所以与一般设备不同。网络设备是一个net_device结构,并通过register_netdev注册到系统里,最后通过IFconfig -a的命令就能看到;
  举例:蓝牙,WIFI,网卡等。