yaffs移植到uboot1.3.1成功

       内核版本是2.6.23,uboot版本是1.3.1,两者的MTD驱动有些区别,还有就是OOB布局也发生了变化,用更新后的Mkyaffsimage生成镜像后,kernel能正常启动,开始在uboot ymount /flash找不到目录。今天终于看到目录,并分别在kernel下和uboot下建立目录测试成功。

     回想起来,主要原因就是OOB问题。我通过相同的目录制作出来的根文件系统做对比(用未修改和修改的mkyaffsimage)。发现其OOB区别主要是:新版本内核前8B为 ecc1[0],ecc1[1],ecc1[2],ecc2[0],pagestatus,blockstatus,ecc2[1],ecc2[2];后8B才是保存的yaffs的TAG,在老版本中有大大的区别,造成了互访的问题,转换的源代码如下:static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob) { oob[0] = spare->ecc1[0]; oob[1] = spare->ecc1[1]; oob[2] = spare->ecc1[2]; oob[3] = spare->ecc2[0]; oob[4] = spare->pageStatus; oob[5] = spare->blockStatus; oob[6] = spare->ecc2[1]; oob[7] = spare->ecc2[2]; oob[8] = spare->tagByte0; oob[9] = spare->tagByte1; oob[10] = spare->tagByte2; oob[11] = spare->tagByte3; oob[12] = spare->tagByte4; oob[13] = spare->tagByte5; oob[14] = spare->tagByte6; oob[15] = spare->tagByte7; } static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob) { spare->tagByte0 = oob[8]; spare->tagByte1 = oob[9]; spare->tagByte2 = oob[10]; spare->tagByte3 = oob[11]; spare->pageStatus = oob[4]; spare->blockStatus = oob[5]; spare->tagByte4 = oob[12]; spare->tagByte5 = oob[13]; spare->ecc1[0] = oob[0]; spare->ecc1[1] = oob[1]; spare->ecc1[2] = oob[2]; spare->tagByte6 = oob[14]; spare->tagByte7 = oob[15]; spare->ecc2[0] = oob[3]; spare->ecc2[1] = oob[6]; spare->ecc2[2] = oob[7]; }

 

yaffs移植到uboot1.3.1成功_第1张图片

再总结下这段时间的心得:

      首先要验证基本读写,保证read_oob,write_oob正确,多对比差异,大胆假设,深入分析源代码。

 

感谢 wangtao: 狗拿耗子 的作者,在期间请教过一些问题,谢谢他的热心帮助。

你可能感兴趣的:(yaffs移植到uboot1.3.1成功)