Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98950
  • 博文数量: 19
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-20 09:35
文章分类
文章存档

2010年(3)

2009年(16)

我的朋友

分类: LINUX

2009-05-14 14:57:41

               
 
 选择这个打补丁
文件: u-boot-patch.tar.bz2
大小: 110KB
下载: 下载
上面是u-boot-1.2.0的补丁
随便选个补丁一个
tar  vxf  u-boot.tar.bz2
patch  -p1 < 07   是补丁
本文实现u-boot烧写yaffs根文件系统映象,摘自《嵌入式Linux应用开发完全手册》韦东山著。
    在上一篇笔记中,增加了NAND Flash 功能的 u-boot-1.1.6已经可以通过"nand write..."、"nand write.jffs2..."等命令来烧写cramfs、jffs2文件系统映象文件,下面增加"nand write.yaffs..."命令实现yaffs文件系统映象的烧写。
   "nand write.yaffs..."命令中,"nand"是具体命令,"write.yaffs..."是参数。nand命令在 commom/cmd_nand.c中实现,在其中增加"nand write.yaffs..." 的使用说明,我们可以在 u-boot 下通过 ?nand 命令查看到所加信息,代码添加如下:

1、在commom/cmd_nand.c中增加"nand write.yaffs..." 的使用说明,代码添加如下:

U_BOOT_CMD(nand, 5, 1, do_nand,
    "nand    - NAND sub-system\n",
    "info                  - show available NAND devices\n"
    "nand device [dev]     - show or set current device\n"
    "nand read[.jffs2]     - addr off|partition size\n"
    "nand write[.jffs2]    - addr off|partiton size - read/write `size' bytes starting\n"
    "    at offset `off' to/from memory address `addr'\n"
    "nand read.yaffs addr off size - read the `size' byte yaffs image starting\n"
    "    at offset `off' to memory address `addr'\n"
    "nand write.yaffs addr off size - write the `size' byte yaffs image starting\n"
    "    at offset `off' from memory address `addr'\n"

    "nand erase [clean] [off size] - erase `size' bytes from\n"
    "    offset `off' (entire device if not specified)\n"
    "nand bad - show bad blocks\n"
……………………

……………………

然后,在 nand 命令的处理函数 do_nand 中增加对"nand yaffs..."的支持。do_nand 函数仍在 commom/cmd_nand.c 中实现,代码修改如下:

……………………

……………………

opts.quiet      = quiet;

                ret = nand_write_opts(nand, &opts);

            }

}

else if (  s != NULL && !strcmp(s, ".yaffs")){    
            if (read) {
               
                nand_read_options_t opts;
                memset(&opts, 0, sizeof(opts));
                opts.buffer = (u_char*) addr;
                opts.length = size;
                opts.offset = off;
                opts.readoob = 1;
                opts.quiet      = quiet;
                ret = nand_read_opts(nand, &opts);
            } else {
               
                nand_write_options_t opts;
                memset(&opts, 0, sizeof(opts));
                opts.buffer = (u_char*) addr;
                opts.length = size;
                opts.offset = off;
               
                opts.noecc = 1;
                opts.writeoob = 1;
                opts.blockalign = 1;
                opts.quiet      = quiet;
                opts.skipfirstblk = 1;
                ret = nand_write_opts(nand, &opts);
            }   

 } else {

             if (read)

                 ret = nand_read(nand, off, &size, (u_char *)addr);

             else

                ret = nand_write(nand, off, &size, (u_char *)addr);

        }

…………………

…………………

2include/nand.h 中进行如下修改,增加 skipfirstblk 成员:

struct nand_write_options {
u_char *buffer;

………………

………………

int pad;

int blockalign;

int skipfirstblk;

}

3drivers/nand/nand_util.c 修改 nand_write_opts 函数,增加对 skipfirstblk 成员的支持:

int nand_write_opts(nand_info_t *meminfo, const nand_write_options_t *opts)

{

    int imglen = 0;

………………

………………

int result;

    int skipfirstblk = opts->skipfirstblk;

………………

………………

 

} while (offs < blockstart + erasesize_blockalign);

         }


        if (skipfirstblk) {     
            mtdoffset += erasesize_blockalign;
            skipfirstblk = 0;
            continue;
        }

 readlen = meminfo->oobblock;

………………

进行上面移植后,u-boot 已经支持 yaffs 文件系统映象的烧写,由于前面设置"opts.noecc=1" 不使用ECC校验码,烧写时会提示很多提示信息,可以修改 drivers/nand/nand_base.c 文件中的 nand_write_page 函数,将其注释掉。

    case NAND_ECC_NONE:
        //printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");

 

 最后在u-boot顶层目录执行:make s3c2410_config

 

 
或者打补丁yaffs
文件: yaffs.gz
大小: 2KB
下载: 下载
 
完整补丁
 
阅读(2215) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

pxues2009-07-31 15:18:10

请下载u-boot-patch.tar.bz2,打上补丁就行了