1.字符驱动设备
指存取时没有缓存的设备,采用字节流访问的设备,如按键,串口,声卡,触摸屏等
2.块驱动设备
有缓存来支持,块设备必须能够随机存取(random access),字符设备则没有这个要求。 UNIX下,采用一个数据块来进行访问,数据块一般为512字节,1K等,linux下,可以采用任意尺寸的数据来访问,字符设备和块设备的区别在于内核描述它们的使用的数据结构是不一样的,访问它们的操作接口是不一样的。如硬盘、U盘、光盘、SD卡、nandflash等。
块设备使用前一定要先mount挂接. mount -t vfat /dev/sda1, 将U盘挂接到/mnt/目录,以后访问/mnt/目录就是访问U盘里面的内容,然后 就可以使用open ,read, write 对U盘里面的文件进行访问。
网络驱动设备
在/dev/下没有对应的设备文件,必须通过套接字来访问,要结合TCP/IP协议栈来使用
问:应用程序如何访问字符设备驱动和块设备驱动?
字符设备和块设备在用户空间的/dev目录下,都有对应的设备文件(一切皆文件),应用程序通过函数调用open, read, write等访问文件设备,就是访问设备驱动和硬件设备
ls /dev/console -lh 查看设备文件
crw------ 1 root root 5, 1 ... /dev/console
字符设备 主设备号 次设备号 设备结点
主设备号:用于标识设备类型,内核依据该设备号对应设备文件和对应的设备驱动
次设备号:用于标识同类型的不同设备个体,驱动程序依据该号码辨别具体操作的哪个设备个体,比如串口。
问:应用程序如何通过设备文件访问驱动程序呢?
答:通过设备文件附加的主次设备号
应用程序通过主设备号找到对应的驱动程序,表明一个驱动程序有唯一的主设备号,那么驱动程序也就必须和这个主设备号进行关联和绑定。那么如何进行关联和绑定呢?如果有同类型的不同设备个体,比如S5PV210有四个串口, 这四个串口硬件属性几乎一样,所以只需要一个驱动程序即可,表明主设备号只有一个,都相等,那么应用程序通个每个串口对应的设备文件的次设备号在驱动程序中进行区分!