1.字符设备驱动
字符设备驱动是以不定长度的字元来传送资料,字符设备是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流。
字符设备驱动的关键数据结构有cdev(用来描述一个字符设备)和file_operations结构体的操作
struct cdev {
struct kobject kobj;
struct module *owner; //所属的模块
struct file_operation *ops //文件操作结构体
struct list_head list;
dev_t dev;
unsigned int count;
}
字符设备驱动:鼠标,键盘,显示器
2.块设备驱动
块设备驱动是以固定大小长度来传送和转移资料的,块设备能够随机,不需要按照顺序地访问固定大小的数据片。
我们从他们的定义就可以明白,字符设备驱动是按照数据流的方式做数据传输的,并且这个数据流是有一定顺序的,譬如说键盘这种字符设备驱动,输入yes这样的字串的时候,就会按照Y->E->S这样的顺序的数据流传输,块设备驱动是可以随机访问固定大小的数据段(和字符设备驱动的数据流差异点),并且被读的块可以不一定是连续的,这里的连续的是指被映射的虚拟地址,譬如说硬盘就是一个块设备。
块设备驱动:硬盘,U盘
3.网络设备驱动
网络设备是一个比较特殊的设备,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都有网络驱动决定。它并不存在于/dev下面,所以与一般的设备不同。网络设备是一个net_device结构,并通过register_netdev注册到系统里,最后通过IFconfig -a的命令就能看到。
网络设备驱动:蓝牙,wifi,网卡等