fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
阅读:3205回复:12

WinCE中nboot跳往eboot的地址

楼主#
更多 发布于:2007-11-05 19:15
nboot的main函数主要如下

main
{

   SetupCopySection(pTOC);
 
    MMU_EnableICache();
 
    Port_Init();  

    Uart_Init();    
    
    NF_Init();    

    pCopyPtr = (BYTE *)LOAD_ADDRESS_PHYSICAL;  

    ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();  //跳转去执行eboot代码

}


(#define  LOAD_ADDRESS_PHYSICAL   0x30038000)



在执行nboot时,最后一步是跳转到某个地址去执行eboot的代码,((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();
那么这个地址0x3003_8000是代表物理地址还是虚拟地址?如果是物理地址,那是否就是在g_oalAddressTable中定义的
DCD   0X8000_0000   0X3000_0000,64   ;32 MB DRAM BANK 6
这样的话,跳转地址是否就是虚拟地址0x8003_8000 ?
另外,在config.bib里有这么一个地址定义
EDBG      80030000  00020000  RESERVED
那么是否eboot就是拷贝到这里了呢?

高手帮忙解答下了
szterry
驱动牛犊
驱动牛犊
  • 注册日期2007-02-05
  • 最后登录2011-01-13
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-11-07 11:13
不是……当时mmu还没有开呢~
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-07 11:26
请问 szterry ,  那(#define  LOAD_ADDRESS_PHYSICAL  0x30038000) 这个地址就是cpu的物理地址了?  这个地址是怎么确定的呢?
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-07 11:27
eboot也是要加载到内存才能用的,那么我们如何能指定加载eboot的内存地址呢
cyx77
驱动牛犊
驱动牛犊
  • 注册日期2003-05-18
  • 最后登录2022-08-07
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望28点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2007-11-07 13:58
跳转地址0x30038000是在EBoot的boot.bib配置文件里设定的。
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-11-08 10:24
To: cyx77,   那我们能否改变这个地址呢? 我现在对内存的使用有点迷惑. 我回去再思考一下
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-11-08 10:46
在boot.bib里面,有一个 eboot  8003_8000   4000  ramimage的定义,那么是否0x30038000被映射到了8003_8000?  szterry不是说这个时候mmu还没开,那怎么能用虚拟地址呢?  
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-11-08 17:21
nboot的main函数主要如下

main
{

  SetupCopySection(pTOC);

    MMU_EnableICache();

    Port_Init();  

    Uart_Init();    
    
    NF_Init();    

    pCopyPtr = (BYTE *)LOAD_ADDRESS_PHYSICAL;  

    ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();  //跳转去执行eboot代码

}


(#define  LOAD_ADDRESS_PHYSICAL  0x30038000)

这个0x3003_8000 是表示物理地址吧.我用的是cpu是三星的2440-a43,内置了64M的SDRAM,关于cpu物理地址的定义如下


; TABLE FORMAT
;       cached address, physical address, size
------------------------------------------------------------------------------
g_oalAddressTable

        DCD     0x80000000, 0x30000000, 64      ; 32 MB DRAM BANK 6
        DCD     0x84000000, 0x10000000, 32      ; nGCS2: PCMCIA/PCCARD
        DCD     0x86000000, 0x18000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 3
        DCD     0x88000000, 0x20000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 4
        DCD     0x8A000000, 0x28000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 5
        DCD     0x8C000000, 0x08000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 1
        DCD     0x90800000, 0x48000000,  1      ; Memory control register
        DCD     0x90900000, 0x49000000,  1      ; USB Host register
        DCD     0x90A00000, 0x4A000000,  1      ; Interrupt Control register
        DCD     0x90B00000, 0x4B000000,  1      ; DMA control register
        DCD     0x90C00000, 0x4C000000,  1      ; Clock & Power register
        DCD     0x90D00000, 0x4D000000,  1      ; LCD control register
        DCD     0x90E00000, 0x4E000000,  1      ; NAND flash control register
        DCD     0x90F00000, 0x4F000000,  1      ; Camera control register
    DCD     0x91000000, 0x50000000,  1      ; UART control register
        DCD     0x91100000, 0x51000000,  1      ; PWM timer register
        DCD     0x91200000, 0x52000000,  1      ; USB device register
        DCD     0x91300000, 0x53000000,  1      ; Watchdog Timer register
        DCD     0x91400000, 0x54000000,  1      ; IIC control register
        DCD     0x91500000, 0x55000000,  1      ; IIS control register
        DCD     0x91600000, 0x56000000,  1      ; I/O Port register
        DCD     0x91700000, 0x57000000,  1      ; RTC control register
        DCD     0x91800000, 0x58000000,  1      ; A/D convert register
        DCD     0x91900000, 0x59000000,  1      ; SPI register
        DCD     0x91A00000, 0x5A000000,  1      ; SD Interface register
        DCD     0x92000000, 0x00000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 0
        DCD     0x00000000, 0x00000000,  0      ; end of table

;------------------------------------------------------------------------------



那么是不是说我的板子上的内存是对应BANK6? 但是我在代码里没有找到选择Bank的代码,硬件上就是直接将相应的一个片选地址拉低,就是表示用片内的sdram了. 如果我外接了一个sdram,那么如何确定这个sdram是被分配到了哪一个bank呢?
知道的帮忙解答下了,现在对这个内存似懂非懂的,感觉很压抑啊...
szterry
驱动牛犊
驱动牛犊
  • 注册日期2007-02-05
  • 最后登录2011-01-13
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望31点
  • 贡献值0点
  • 好评度27点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-11-09 11:30
nboot的时候没开,eboot的时候开了
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-11-10 08:50
多谢楼上的几位,我再去好好看看  
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-11-16 17:42
看了半天cpu的datasheet,终于明白了^_^
freducn2002
驱动小牛
驱动小牛
  • 注册日期2002-06-26
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望29点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2007-12-08 09:24
楼主明白了,那就讲讲是怎么回事吧,我也想知道
fishly_0
驱动小牛
驱动小牛
  • 注册日期2005-09-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分51分
  • 威望466点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-12-13 20:57
楼上的, nboot跳往eboot的地址就是物理地址,这个地址就是你的sdram所在的bank的地址. 这个是可以从配置文件boot.bib里面看到的 :)
游客

返回顶部