一、概述

因squashfs文件系统无法处理坏块,当使用squashfs文件系统时,必须要考虑坏块的影响。

二、解决方案

为解决squashfs无法处理坏块问题,以下有三种解决方案

1.使用nor flash,坏块由硬件保证;

2.使用nand flash, 文件系统使用ubifs, squashfs作为其上的卷,坏块处理由ubifs处理;

3.使用nand flash,文件系统使用squashfs, 在read操作中增加坏块处理;

下面会针对第3种方案提供一种算法。

三、算法描述

1.烧录squashfs镜像时,会跳过坏块

2.文件系统挂载时,在mtd相应的squashfs分区上面建立一个逻辑块与物理块的映射表。

逻辑块表示squashfs要访问的块地址,而物理块表示实际存储的物理块地址。

例,#2是坏块,则逻辑块与物理块的映射关系建立如下:

logic[0] = phys[0],

logic[1] = phys[1],

logic[2] = phys[3],

logic[3] = phys[4],

建立映射关系后,就知道squashfs访问的地址对应的物理地址了。

3.访问时,会通过映射表访问对应物理块,即使遇到坏块,也能访问到正确地址。从而达到预期效果。

四、具体实现

1.文件系统挂载时,做映射表

fs/squashfs/super.c

2.part_read时,对地址进行转换,达到跳过坏块效果
driver/mtd/mtdpart.c

代码实现

五、注意

4.19 不使用part_read函数,改为使用mtdcore.c中mtd_read函数,需要做相应调整

最后修改:2022 年 03 月 29 日
如果觉得我的文章对你有用,请随意赞赏