主题 : 关于dnw为什么能下载uboot到0x23e00000运行的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 68915
精华: 0
发帖: 27
金钱: 135 两
威望: 27 点
贡献值: 0 点
综合积分: 54 分
注册时间: 2012-04-28
最后登录: 2016-08-06
楼主  发表于: 2015-04-22 23:24

 关于dnw为什么能下载uboot到0x23e00000运行的问题

我的板子是512M的s5pv210,在usb启动模式下,可以通过dnw直接下载到三星的官方uboot中运行,具体步骤参考Sate210 android使用手册V1.0,百度文库就有。
我查看了源码,对链接地址有些疑惑。
三星的uboot在aftercopy之后开启了MMU功能,我的板子是512M内存,物理内存地址空间为0x3000 0000 ~0x4FFF FFFF,uboot源码设置的链接地址为0xc3e00000

根据uboot的mmu映射表:
#ifdef CONFIG_ENABLE_MMU

    #ifdef CONFIG_MCP_SINGLE
/*
* MMU Table for SMDKC110
* 0x0000_0000 -- 0xBFFF_FFFF => Not Allowed
* 0xB000_0000 -- 0xB7FF_FFFF => A:0xB000_0000 -- 0xB7FF_FFFF VA = PA
* 0xC000_0000 -- 0xCFFF_FFFF => A:0x3000_0000 -- 0x3FFF_FFFF 256M
* 0xD000_0000 -- 0xDFFF_FFFF => Not Allowed
* 0xE000_0000 -- 0xFFFF_FFFF => A:0xE000_0000 -- 0XFFFF_FFFF VA = PA
*/

    /* form a first-level section entry */
.macro FL_SECTION_ENTRY base,ap,d,c,b
    .word (\base << 20) | (\ap << 10) | \
          (\d << 5) | (1<<4) | (\c << 3) | (\b << 2) | (1<<1)
.endm
.section .mmudata, "a"
    .align 14
    // the following alignment creates the mmu table at address 0x4000.
    .globl mmu_table
mmu_table:
    .set __base,0
    // Access for iRAM
    .rept 0x100            //对应虚拟地址0 ~ 256M
    FL_SECTION_ENTRY __base,3,0,0,0
    .set __base,__base+1
    .endr

    // Not Allowed
    .rept 0x200 - 0x100    //对应虚拟地址256M ~ 512M
    .word 0x00000000
    .endr

    .set __base,0x200
    // should be accessed
    .rept 0x600 - 0x200//对应虚拟地址512M ~ 1.5G
    FL_SECTION_ENTRY __base,3,0,1,1
    .set __base,__base+1
    .endr

    .rept 0x800 - 0x600//对应虚拟地址1.5G ~ 2G
    .word 0x00000000
    .endr

    .set __base,0x800
    // should be accessed
    .rept 0xb00 - 0x800//对应虚拟地址2 ~ 2.75G
    FL_SECTION_ENTRY __base,3,0,0,0
    .set __base,__base+1
    .endr

/*    .rept 0xc00 - 0xb00
    .word 0x00000000
    .endr */

    .set __base,0xB00
    .rept 0xc00 - 0xb00//对应虚拟地址2.75G ~ 3G 256MB
    FL_SECTION_ENTRY __base,3,0,0,0
    .set __base,__base+1
    .endr

    .set __base,0x300
    // 256MB for SDRAM with cacheable
    .rept 0xD00 - 0xC00//对应虚拟地址3G ~ 3.25G, 256MB
    FL_SECTION_ENTRY __base,3,0,1,1
    .set __base,__base+1
    .endr

    // access is not allowed.
    @.rept 0xD00 - 0xC80//对应虚拟地址3G ~ 3.125G
    @.word 0x00000000
    @.endr

    .set __base,0xD00
    // 1:1 mapping for debugging with non-cacheable
    .rept 0x1000 - 0xD00//对应虚拟地址3.125G ~ 4G,
    FL_SECTION_ENTRY __base,3,0,0,0
    .set __base,__base+1
    .endr    
    
    #else    // CONFIG_MCP_AC, CONFIG_MCP_H, CONFIG_MCP_B

内存映射后的地址为:0xC0000000~0xCFFF FFFF请教各位前辈,dnw下载uboot到DDR中,链接地址(MMU转换后为0x33e00000)与0x23e0 0000并不对应,后面的代码为什么还能正常运行呢?