一、正确的理解块设备驱动的概念

1、块设备和字符设备的差异

(1)块和字符是两种不同的访问设备的策略

(2)同一个设备可以同时支持块和字符两种访问策略

(3)设备本身的物理特性决定了哪一种访问策略更适合

(4)块设备本身驱动层支持缓冲区,而字符设备驱动层没有缓冲

(5)块设备驱动最适合存储设备

 

2、块设备驱动的特点

(1)字符设备只能顺序访问(如串口发送数据顺序),而块设备可以随机访问(不连续块访问)。

(2)传统的机械式块设备(如硬盘、DVD)虽然可以随机访问,但是连续访问效率更高,因此块设备驱动中有排序逻辑将用户的随机访问重新调整成尽量连续访问以提升效率

(3)Nand、SD卡(电储存)等随机访问效率等同于顺序访问

 

3、块设备相关的几个单位

(1)扇区(Sector),概念来自于早期磁盘,在硬盘、DVD中还有用,在Nand/SD中已经没意义了,扇区是块设备本身的特性,大小一般为512的整数倍,

因为历史原因很多时候都向前兼容定义为512,任何块设备硬件对数据处理的基本单位都是扇区。

(2)块(block),概念来自于文件系统,是内核对文件系统数据处理的基本单位,大小为若干个扇区,常见有512B、1KB、4KB等

(3)段(Section),概念来自于内核,是内核的内存管理中一个页或者部分页,由若干个连续为块组成。

(4)页(Page),概念来自于内核,是内核内存映射管理的基本单位。linux内核的页式内存映射名称来源于此。

总结:块设备驱动对下以Sector为单位管理块设备,对上以Block为单位和文件系统交互。

注意:块设备驱动和字符设备驱动不同,应用层对块设备驱动的访问一般不是直接操作设备文件(/dev/block/xxx,或者/dev/sdax),

而是通过文件系统来简洁操作,例如在某个目录下touch创建一个文件或者是mkdir创建一个目录。(思考裸机阶段时刷机烧录

SD卡时说过的对SD卡的2种访问:文件系统下访问和扇区级访问)。

 

二、块设备驱动框架简介