大家可能都或多或少的了解,对于存储在外存内的文件,当我们对其进行读写时,会通过缓存来对数据进行缓冲。缓存,即用于缓冲作用的内存,本质是内存,作用是缓冲,充分利用文件读写的特点,减少IO通讯。那么,当我们直接去读写mtd块设备时,是否也会有缓存来对数据进行缓冲呢?如果是这样,那么对块设备进行读写一致性测试时,就需要考虑到缓存的情况。
万物皆文件,块设备也是文件,只不过是较特殊的文件而已,那么,对这种文件进行读写,缓存应该也一定是会存在的。于是,我做了一个测试,对块设备文件(这里用于测试的块设备为nor flash)写入4k数据,随后将数据读出,假设设备驱动和设备本身都是正常的,那么写入的数据和读出的数据应该是一致的,如果存在不同,则可认为设备本身或设备驱动存在异常。那么,实际情况如何呢?我在对设备文件调用底层驱动进行真正的写入动作之前,将要写入的4k数据的前10个字节内容进行替换。这样真正写入到设备文件中的数据就不会与预期写入的4k数据内容完全相同。在写入完成之后,对设备文件对应偏移数据进行读取(写入使用write,读取使用read,皆为1对1的系统调用),将读取到的4k数据与写入的4k数据进行比对,这时会发现,数据是一样的,但是此时真正存储在设备文件中的4k数据的前10字节却是被更改过的。因此,写入数据后再读出数据进行比对,通过数据的一致性,是无法判断块设备文件底层驱动或设备本身是否存在问题的。
那么,我们写入后,再从设备文件中读取数据,此时我们到底