2.1. Linux三大驱动¶
在讲Linux三大驱动前,先讲一下Linux设备分类。
linux是文件型系统,所有硬件都会在对应的目录(/dev)下面用相应的文件表示。在文件系统的linux下面,都有对应文件与键盘、鼠标、硬盘等实实在在硬件硬件设备关联,访问这些文件就可以访问实际硬件。
按照读写存储数据方式,我们可以把设备分为以下几种:字符设备、块设备和网络设备。
而Linux三大驱动就是指对这些设备的驱动,即字符设备、块设备驱动和网络设备驱动。
2.1.1. 字符设备¶
字符设备指能够像字节流串行顺序依次进行访问的设备,对它的读写是以字节为单位。
字符设备的特点:
一个字节一个字节读写的设备
读取数据需要按照先后数据(顺序读取)
每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称 设备节点)来使用驱动程序操作字符设备。
常见的字符设备有鼠标、键盘、串口、SPI、I2C等
2.1.2. 块设备¶
块设备是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。
块设备的特点:
数据以固定长度进行传输,比如512K
块设备能够随机访问,而字符设备则只能顺序访问。
块设备包括硬盘、磁盘、U盘和SD卡等
每个块设备在/dev目录下对应一个设备文件,linux用户程序可以通过设备文件(或称设备节点)来使用驱动程序操作块设备。
块设备可以容纳文件系统,所以一般都通过文件系统来访问,而不是/dev设备节点。
2.1.3. 网络设备¶
网络设备驱动不同于字符设备和块设备,不在/dev下以文件节点代表,而是通过单独的网络接口来代表。
网络设备的特点:
网络接口没有像字符设备和块设备一样的设备号和/dev设备节点,只有接口名,如eth0,eth1
对网络设备的访问只能通过socket操作,而不是open、closc、read、write