一、字符设备
字符设备就是在对某设备进行操作时,该设备的读取以字节为单位进行。字符设备的操作是通过linux系统直接调用驱动程序完成的,在驱动程序的上一层并没用文件系统。因此字符设备的特点如下:
1、以字节流的方式进行读写、一个字节一个字节的读写设备(有先后顺序)。
2、未经过文件系统,读取速度快。
3、每个字符设备都在 /dev 目录下存在一个设备文件。
二、块设备
块设备对于数据的操作是依靠数据块的形式进行的,在操作块设备时除了操作字符设备接口之外,还有专门用于操作块设备的接口。这些专门用于块设备的接口使得在块设备上可以构建文件系统,而应用程序在操作块设备时也往往通过文件系统。块设备的一些特点:
1、块设备以数据块形式进行操作。
2、块设备的数据能够随机存取。
3、操作块设备往往通过文件系统,而不是直接与设备进行通讯。
块设备的 I/O 操作方式与字符设备存在较大的不同,引入了 request_queue、request、bio等一系列数据结构。在整个块设备的I/O操作中,贯穿与始终的就是”请求“,字符设备的I/O操作则是直接进行不绕弯,而块设备的I/O操作会排队和整合。
个人的一些理解:
块设备上的文件系统进行挂载的时候:
mount -t ext4 /mnt /dev/mmcblk0p2
上面的指令,将mmcblk0的第二个分区 挂载到了 /mnt 目录下 并指定文件系统格式为 ext4。
mount的过程中,就已经将mmcblk0的块设备驱动的一系列操作和 /mnt的ext4文件操作相绑定。