专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 驱动开发

怎么算出指令 bootm 后面的地址

发布时间:2010-06-14 16:35:51 文章来源:www.iduyao.cn 采编人员:星星草
如何算出指令 bootm 后面的地址
各位大神,
我有一台设备, 把firmware 写入16M flash后, 就可以启动设备.
我看了烧录firmware程序源码, 但我未明白如何算出指令:bootm 0x9f040000 ,  请问"0x9f040000"是如何知道的?


部分代码如下:
try:
    if BOARD_8M_FLASH:
        UBOOT_SIZE = 0x30000  # 192KB - uboot
        UBOOTENV_SIZE = 0x10000   # 64KB -  uboot env
        FW_SIZE = 0x700000   # kernel + rootfs
        DATA_SIZE = 0x90000  # 576KB - data
        CFG_SIZE = 0x20000   # 128 KB - cfg
        ART_SIZE = 0x8000   # 32 KB
        WXEE_SIZE = 0x8000  # 32 KB
        CFG_OFFSET = UBOOT_SIZE + UBOOTENV_SIZE + FW_SIZE + DATA_SIZE
    else:
        UBOOT_SIZE = 0x30000  # 192KB - uboot
        UBOOTENV_SIZE = 0x10000   # 64KB -  uboot env
        FW_SIZE = 0x780000   # 1024KB + 6656KB - kernel + rootfs
        DATA_SIZE = 0x90000  # 576KB - data
        CFG_SIZE = 0x20000   # 128 KB - cfg
        ART_SIZE = 0x8000   # 32 KB
        WXEE_SIZE = 0x8000  # 32 KB
        CFG_OFFSET = UBOOT_SIZE + UBOOTENV_SIZE + FW_SIZE + FW_SIZE + DATA_SIZE
except:
    UBOOT_SIZE = 0x30000  # 192KB - uboot
    UBOOTENV_SIZE = 0x10000   # 64KB -  uboot env
    FW_SIZE = 0x780000   # 1024KB + 6656KB - kernel + rootfs
    DATA_SIZE = 0x90000  # 576KB - data
    CFG_SIZE = 0x20000   # 128 KB - cfg
    ART_SIZE = 0x8000   # 32 KB
    WXEE_SIZE = 0x8000  # 32 KB
    CFG_OFFSET = UBOOT_SIZE + UBOOTENV_SIZE + FW_SIZE + FW_SIZE + DATA_SIZE
    BOARD_8M_FLASH = False

ART_OFFSET  = CFG_OFFSET + CFG_SIZE
WXEE_OFFSET = ART_OFFSET + ART_SIZE

16M flash框架图:

------解决方案--------------------
引用:
Quote: 引用:

0x9f040000  这个地址是你ddr mem的地址。
看意思你应该用的是256M的ddr,物理地址从0x8000 0000 ~ 0xa000 0000


我发的图上已经显示DDRAM大小, 是 64MB = 521Mb. 

引用:
bootm 中m是内存的意思,就是从内存某个地址起动。单从这个命令来说只要是内存范围的地址都是可取的。你的程序加载到什么地址,bootm就使用什么地址。
如果要运行的这段程序是由uboot加载到内存中的,那么这个地址自然是由uboot决定的。至于,uboot怎么知道加载到哪里,那是移植uboot的人在其配置文件中指定的……
够清楚了么?


楼上两位都说 0x9f040000是 内存地址, 但还是有疑惑, 因为此设备可以通过u-boot的 tftp来升级固件, 升级方法如下:
tftp 0x80060000 firmwarename 
erase 0x9f040000 +{$firmware大小};  cp.b 0x80060000 0x9f040000 {$firmware大小}

上面代码的0x80060000应该是内存地址,  cp.b 指令应该是把内存地址0x80060000的内容复制到 0x9f040000地址中去, 难道此处0x9f040000还是内存地址? 好像说不通吧




这个,你是不是有NON-Flash ?  0x9f040000 在你的Flash上??Non Flash好你也是可以接内存接口的。

再不然就是loader中开了MMU映射过去的,总之 0x9f040000那地方是一个可以执行代码的……
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: