Linux 块设备
- 块设备驱动要远比字符设备驱动复杂得多,不同类型的存储设备又对应不同的驱动子系统
- 块设备是针对存储设备的,比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、机械硬盘、固态硬盘等。
- 因此块设备驱动其实就是这些存储设备驱动,块设备驱动相比字符设备驱动的主要区别如下:
-
①、块设备只能以块为单位进行读写访问,块是 linux 虚拟文件系统(VFS)基本的数据传输单位。
-
②、块设备在结构上是可以进行随机访问的,对于这些设备的读写都是按块进行的,块设备使用缓冲区来暂时存放数据,等到条件成熟以后在一次性将缓冲区中的数据写入块设备中。
-
- 这么做的目的为了提高块设备寿命,为了提高块设备寿命而引入了缓冲区,数据先写入到缓冲区中,等满足一定条件后再一次性写入到真正的物理存储设备中,这样就减少了对块设备的擦除次数,提高了块设备寿命。
- 字符设备是以字节为单位进行数据传输的,不需要缓冲。
- 字符设备是顺序的数据流设备,字符设备是按照字节进行读写访问的。字符设备不需要缓冲区,对于字符设备的访问都是实时的,而且也不需要按照固定的块大小进行访问。
- linux 内核使用 block_device 表示块设备, block_device 为 一 个 结 构 体 , 定 义 在include/linux/fs.h 文件
- bd_disk 成员变量,此成员变量为gendisk 结构体指针类型
- linux 内核使用 gendisk 来描述一个磁盘设备,这是一个结构体,定义在 include/linux/genhd.h
- 编写块的设备驱动的时候需要分