u-boot-2011.03在mini2440/micro2440上的移植(六)——支持yaffs下載

6.1 include/conskfigs/micro2440.h

添加
#define CONFIG_CMD_NAND_YAFFS

 

【說明】

本人在閱讀cmd_nand.c時發現u-boot-2011.03已經支持yaffs寫入,只需添加如上定義即可,但實際寫入錯誤,再閱讀源代碼,發現只要按下一步修改即可,雖然這是最簡單的方法,但似乎並不是最優的方法。

6.2 drivers/mtd/nand/nand_util.c

int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
   u_char *buffer, int withoob)
{
 ……
 if (need_skip < 0) {
  printf ("Attempt to write outside the flash area/n");
  *length = 0;
  return -EINVAL;
 }

 if (!need_skip && !withoob) {
 ……
 }

 while (left_to_write > 0) {
  ……
#ifdef CONFIG_CMD_NAND_YAFFS
  if (withoob) {
   ……
   ops.len = pagesize;
   ops.ooblen = nand->oobsize;
   ops.mode = MTD_OOB_RAW;
   ops.ooboffs = 0;

   pages = write_size / pagesize_oob;
   for (page = 0; page < pages; page++) {
    ops.datbuf = p_buffer;
    ops.oobbuf = ops.datbuf + pagesize;

    rval = nand->write_oob(nand, offset, &ops);
   if (rval)
     break;

    offset += pagesize;
    p_buffer += pagesize_oob;
   }
  }
  ……
}

 

6.3 下載yaffs鏡像

下載yaffs鏡像的時候要注意分區的第一塊不能寫,比如友善之臂的默認分區如下:

Number of partitions: 4
name            :       offset          size            flag
------------------------------------------------------------
vivi            :       0x00000000      0x00040000      0
param           :       0x00040000      0x00020000      0
kernel          :       0x00060000      0x00500000      0
root            :       0x00560000      0x3fa80000      0

也就是說yaffs鏡像所在分區的起始地址在0x560000,因此使用nand write.yaffs命令下載yaffs時要寫的地址爲0x560000 + 0x20000 (Nand Flash每塊的大小)= 0x580000,即下載命令類似如下

tftp 0x30008000 uImage

nand write.yaffs 0x30008000 0x580000 0x300000


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章