NAND for SQUASHFS design

概述

Squashfs一般存放于nor flash中,但是也可以使用Nand flash存储squashfs文件系统,但是需要绕过坏块。

 

算法描述

bootloader中烧写squashfs分区时,顺序的将squashfs烧到Nand flash中,如果碰上坏块,则顺序写入下一个好块。例如:#2是坏块,则数据写到#1, #3, #4上面。

引导linux后,在mtd相应的squashfs分区上面建立一个逻辑块与物理块的映射表。逻辑块表示squashfs要访问的块地址,而物理块表示实际存储的物理块地址。

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

logic[0] = phys[0],

logic[1]=phys[1],

logic[2]=phys[3],

logic[3]=phys[4],

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

 

程序实现:

 

声明结构:

struct part_map{

    struct mtd_info *part_mtd;  /* Mapping partition mtd */

    unsigned *map_table;        /* Mapping from logic block to phys block */

    unsigned nBlock;            /* Logic block number */

};

 

修改nandpart.c即可实现。

1. 声明一个partition mapping表。

2. add_mtd_partitions()函数中,当mtd分驱创建成功后,创建partition mapping表。

3. part_read ()函数中时,如果匹配到partition mappingpart_mtd,则先通过map_table获取到物理地址后,再调用part->master->read_ecc读取nand flash中的数据。

4. del_mtd_partitions()函数中,匹配到partition mapping分区,则删除之.

 

原码补丁如下:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值