在uboot下,通过tftp nand write.uboot命令更新uboot问题
hi all使用OK6410A开发板,使用原厂提供的uboot image。在uboot下通过tftp命令将更新的uboot image镜像下载到内存中,然后nand erase擦除nand flash中原始uboot分区内容,最后通过nand write.uboot命令将内存中的新uboot image镜像烧写到nand flash中。以上操纵能够实现在uboot下直接更新uboot镜像。查看了原厂提供的uboot1.1.6源码,关于这部分的nand flash操作,代码如下:
else if (!read && s != NULL && (!strcmp(s, ".uboot")) && nand->writesize == 4096) {
size=4096;
nand_write(nand, off, &size, (u_char *)addr);
off+=4096;
addr+=2048;
nand_write(nand, off, &size, (u_char *)addr);
off+=4096;
addr+=2048;
nand_write(nand, off, &size, (u_char *)addr);
off+=4096;
addr+=2048;
nand_write(nand, off, &size, (u_char *)addr);
off+=4096;
addr+=2048;
size=1024*1024-4*4096;
ret = nand_write(nand, off, &size, (u_char *)addr);
}else if(!read && s != NULL && (!strcmp(s, ".uboot")) && nand->writesize == 8192)
{
size=8192;
ret=nand_write(nand, off, &size, (u_char *)addr);
off+=8192;
addr+=2048;
ret=nand_write(nand, off, &size, (u_char *)addr);
off+=8192;
addr+=2048;
ret=nand_write(nand, off, &size, (u_char *)addr);
off+=8192;
addr+=2048;
ret=nand_write(nand, off, &size, (u_char *)addr);
off+=8192;
addr+=2048;
size=1024*1024-4*8192;
ret = nand_write(nand, off, &size, (u_char *)addr);
}
对于上述代码的操作,不清楚该代码为什么要这么做?难道是s3c6410芯片对于nand flash的操作比较特殊?addr为什么是2048?直接使用nand write命令从内存中将新的uboot image镜像烧写到nand flash中,可以吗?这个方法实际操作是失败的,烧写后uboot无法启动。对于以上问题,希望能够给以解答,谢谢!
这里有一篇博文,你可以看一下哈,地址链接:http://blog.csdn.net/rainysky_sj/article/details/8685365 hi 委员长,
这篇博文和我问题不一样哦,我问题的是ok6410a uboot下烧写更新uboot镜像,为什么要使用nand write.uboot命令,使用nand write为什么不行?使用两个命令烧写uboot后,nand dump出nand flash中的内容发现,写入nand flash中的内容是一样的。 lvlovelive 发表于 2014-5-26 09:50 static/image/common/back.gif
hi 委员长,
这篇博文和我问题不一样哦,我问题的是ok6410a uboot下烧写更新uboot镜像,为什么要使用nand...
那些你都可以试试的,没有说规定死了
页:
[1]