4.1.Linux设备分类
linux是文件型系统,所有硬件就会在对应的目录(/dev)下边用相应的文件表示。在windows系统中linux 驱动设备,设备你们挺好理解,像硬碟,c盘指的是实实在在硬件。而在文件系统的linux下边,都有对于文件与那些设备关联的linux 驱动设备,访问那些文件就可以访问实际硬件。像访问文件那样去操作硬件设备,一切就会简单好多红旗linux操作系统,不须要再调用先前com,prt等插口了。直接读文件,写文件就可以向设备发送、接收数据。根据读写储存数据形式,我们可以把设备分为以下几种:字符设备、块设备和网路设备。
字符设备:指应用程序按字节/字符来读写数据的设备。这种设备节点一般为传真、虚拟终端和并口调制混频器、键盘之类设备提供流通信服务,它一般不支持随机存取数据。字符设备在实现时,大多不使用缓存器。系统直接从设备读取/写入每一个字符。诸如,鼠标这些设备提供的就是一个数据流,当你敲入“cnblogs”这个字符串时,鼠标驱动程序会根据和输入完全相同的次序返回这个由七个字符组成的数据流。它们是次序的,先返回c,最后是s。
块设备:一般支持随机存取和主存,并使用缓存器。操作系统为输入输出分配了缓存以储存一块数据。当程序向设备发送了读取或则写入数据的恳求时linux驱动下载,系统把数据中的每一个字符储存在适当的缓存中。当缓存被塞满时,会采取适当的操作(把数据传走),而后系统清空缓存。它与字符设备不同之处就是,是否支持随机储存。字符型是流方式,逐一储存。典型的块设备有硬碟、SD卡、闪存等,应用程序可以轮询c盘上的任何位置,并由此读取数据。据悉,数据的读写只能以块的倍数进行。
网路设备:是一种特殊设备,它并不存在于/dev下边,主要用于网路数据的收发。
Linux内核中处处彰显面向对象的设计思想,为了统一形形色色的设备,Linux系统将设备分别具象为structcdev,structblock_device,structnet_devce三个对象,具体的设备都可以包含着三种对象因而承继和三种对象属性和操作,并通过各自的对象添加到相应的驱动模型中,因而进行统一的管理和操作
字符设备驱动程序适宜于大多数简单的硬件设备,并且比起块设备或网路驱动愈发容易理解,因而我们选择从字符设备开始,从最初的模仿,到渐渐熟悉,最终成长为驱动界的前辈。