您现在的位置: 爱51代码网 >> 范文 >> 文章正文
OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
        看了这段代码就明白了,在使能了MMU之后,这段代码相当于对地址做了一个重映射,经过(MEMORY_BASE_ADDRESS + (TEXT_BASE - 0xC0000000))计算后,因为MEMORY_BASE_ADDRESS  为0x50000000(可以在文件开始找到定义)所以经过这样的一个计算,0xc0008000就是0x5000c000。而0xc0008000是内核启动的起始虚拟地址,因此需要做这样的一个映射来和内核对应。

        到这儿可能很多人和我当初有一样的疑惑,那就是如果tftp烧写文件系统应该烧写到哪一个地址去呢?在回到上面的地址图表,在最开始我就说过,这个表是针对使用地址总线与数据总线操作的设备而言,因此对于NOR flash、SRAM、DRAM等都是可以直接寻址读写的,而对于Nand Flash,可以参考下电路图,使用的是8个IO进行操作,右Nand控制器等相关的操作,因此是没有一个绝对的地址的。需要注意图表中的黄色框部分,One Nand并不是普通Nand Flash,区别就在于这种Nand是和NOR、SRAM一样的通过地址总线、数据总线进行操作的方式,因此它是有地址的,对于板子所用的Nand Flash来说只有偏移地址,没有绝对地址。

        到这里,对于tftp下载内核、文件系统的相关操作应该清楚了,具体地址其实看看uboot源码就清楚了,可以参考代码1中的这部分:

#define CONFIG_BOOTCOMMAND  "nand led-start;nand erase  ;fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x200000;fatload mmc 0:1 0x50008000 zImage;nand write.e    0x50008000 0x200000 0x500000; fatload mmc 0:1 0x50008000 rootfs.yaffs2; nand write.yaffs2 0x50008000 0x00700000 $filesize;  nand  beep; nand led-end"如果通过sd卡启动时跳过自动操作进入手动选择操作的话就应该有印象,可以单独选择烧写某一个文件,例如单独烧写文件系统,操作如下图所示:

 

那么通过找到对应的命令源码也是可以的,源码位于common/mian.c 343行:


void arm_USBfuse(void)
{
    unsigned char select;
    while(1)
    {
        printf("\n##### Select the fuction #####\n");
        printf("[1] Flash u-boot\n");
        printf("[2] Flash kernel\n");   
        printf("[3] Flash system\n");       
        printf("[4] Exit\n");
        printf("Enter your Selection:");
   
        select = getc();
        printf("%c\n", select >= ' ' && select <= 127 ? select : ' ');   
void arm_sdfuse(void)
{
    unsigned char select;
    while(1)
    {
        printf("\n##### flash from SDcard  #####\n");
        printf("\n##### Select the fuction #####\n");
        printf("[1] Flash all image\n");
        printf("[2] Flash u-boot\n");
        printf("[3] Flash kernel\n");
        printf("[4] Flash system\n");           
        printf("[5] Exit\n");
        printf("Enter your Selection:");
   
        select = getc();
        printf("%c\n", select >= ' ' && select <= 127 ? select : ' ');   
   
        switch(select)
        {
            case '1':
                ExecuteCmd("nand erase");
                ExecuteCmd("fatload mmc 0:1 50008000 u-boot.bin");
                ExecuteCmd("nand write.uboot 50008000 0 200000");
                ExecuteCmd("fatload mmc 0:1 50008000 zImage");
                ExecuteCmd("nand write.e 50008000 200000 500000");
                ExecuteCmd("fatload mmc 0:1 50008000 rootfs.yaffs2");
                ExecuteCmd("nand write.yaffs2 50008000 700000 $filesize");
                break;
           
            case '2':
                ExecuteCmd("nand erase 0 200000");
                ExecuteCmd("fatload mmc 0:1 50008000 u-boot.bin");
                ExecuteCmd("nand write.uboot 50008000 0 200000");
                break;
                   
            case '3':
                ExecuteCmd("nand erase 200000 500000");
                ExecuteCmd("fatload mmc 0:1 50008000 zImage");
                ExecuteCmd("nand write.e 50008000 200000 500000");
                break;

            case '4':
                ExecuteCmd("nand erase 700000");
                ExecuteCmd("fatload mmc 0:1 50008000 rootfs.yaffs2");
                ExecuteCmd("nand write.yaffs2 50008000 700000 $filesize");
                break;
            case '5':
                return;
            default:
                break;
        }
    }
}
通过tftp单独烧写内核或者文件系统时只需要参考一键烧写的命令烧写到对应的nand 偏移地址即可。

 

好了,写了那么多,就是想把这中间原由写清楚,而不是简单告诉大家怎样做就完事了,授人以鱼不如授人以渔。

上一页  [1] [2] 

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    青少年吸烟心理探析
    保险受益人制度相关问题的探讨
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    java实现u盘指定内容的自动复
    一个简单实用的轮播器源代码
    js只能输入数字和小数点的文
    ExtJS & GTGrid 简单用户管理
    设置<img>在表格<table>中的
    Android init进程启动过程分
    应用内购买 In-App Purchase
    Android之Activity的taskAff
    Redis系列-key相关主要操作函
    Redis存储篇sorted set主要操
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |