创建yaffs文件制作工具

本文档详细介绍了如何移植yaffs文件系统到mini2440开发板,特别是针对64M NAND flash的mkyaffsimage工具的修改,以支持yaffs2新格式。内容包括内核配置选择yaffs的ECC选项,以及修改mkyaffsimage源码,涉及write_chunk函数和nand_ecc.c的调整,以适应不同ECC校验方式。
摘要由CSDN通过智能技术生成

     移植yaffs根文件系统,开发板是mini2440。NAND flash是64M的,由于yaffs2/utils中的mkyaffsimage程序只能生成老式的yaffs1映象文件,需要修改才能支持新格式。yaffs1新、老格式的不同在于oob区的使用发生了变化:一是ECC检验码的位置发生了变化,二是可用空间即标记(tag)的数据结构定义发生了变化。

     移植uboot版本为uboot-2009.11,内核版本2.6.32.2;根文件系统制作采用busybox1.19.3。

1. 内核配置yaffs选项选择yaffs do it's own ECC

     由于yaffs采用自己的ECC校验,那么linux应该关闭ECC校验,否则无法挂载根文件系统,选择kernel为NAND_ECC_NONE。(在/drivers/mtd/nand/s3c2410.c中修改)

2. 没有选择yaffs do it's own ECC

    这时使用的mtd的ecc校验,linux应该选择NAND_ECC_SOFT(不能使用硬件ECC,因为mkyaffsimage程序中使用的是mtd的软件ecc校验)。


拷贝yaffs_packedtags1.c, yaffs_packedtags1.h,linux/drivers/mtd/nand/nand_ecc.c到utils目录

修改Makefile文件:
MKYAFFSSOURCES = mkyaffsimage.c  yaffs_packedtags1.c nand-ecc.c

mkyaffsimage.c添加:

#include "yaffs_packedtags1.h"

extern int nand_calculate_ecc(const unsigned char *buf, unsigned char *code);

主要修改write_chunk函数:

static int write_chunk(u8 *data, u32 obj_id, u32 chunk_id, u32 n_bytes)
{
#ifdef CONFIG_YAFFS_9BYTE_TAGS // old program
    struct yaffs_tags t;
    struct yaffs_spare s;


    error = write(outFile,data,512);
    if(error < 0) return error;

    memset(&t,0xff,sizeof (struct yaffs_tags));
    memset(&s,0xff,sizeof (struct yaffs_spare));

    t.chunk_id = chunk_id;
    t.serial_number = 0;
    t.n_bytes_lsb = n_bytes;
    t.obj_id = obj_id;

   if (convert_endian)
   {
        little_to_big_endian(&t);
   }
    yaffs_calc_tags_ecc(&t);
    yaffs_load_tags_to_spare(&s,&t);
    yaffs_calc_ecc(data,&s);
    nPages++;

    return write(outFile,&s,sizeof(struct yaffs_spare));
#endif  

    struct ya

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值