阅读:3334回复:12
WinCE中nboot跳往eboot的地址
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就是拷贝到这里了呢? 高手帮忙解答下了 |
|
沙发#
发布于:2007-11-07 11:13
不是……当时mmu还没有开呢~
|
|
板凳#
发布于:2007-11-07 11:26
请问 szterry , 那(#define LOAD_ADDRESS_PHYSICAL 0x30038000) 这个地址就是cpu的物理地址了? 这个地址是怎么确定的呢?
|
|
地板#
发布于:2007-11-07 11:27
eboot也是要加载到内存才能用的,那么我们如何能指定加载eboot的内存地址呢
|
|
地下室#
发布于:2007-11-07 13:58
跳转地址0x30038000是在EBoot的boot.bib配置文件里设定的。
|
|
5楼#
发布于:2007-11-08 10:24
To: cyx77, 那我们能否改变这个地址呢? 我现在对内存的使用有点迷惑. 我回去再思考一下
|
|
6楼#
发布于:2007-11-08 10:46
在boot.bib里面,有一个 eboot 8003_8000 4000 ramimage的定义,那么是否0x30038000被映射到了8003_8000? szterry不是说这个时候mmu还没开,那怎么能用虚拟地址呢?
|
|
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呢? 知道的帮忙解答下了,现在对这个内存似懂非懂的,感觉很压抑啊... |
|
8楼#
发布于:2007-11-09 11:30
nboot的时候没开,eboot的时候开了
|
|
9楼#
发布于:2007-11-10 08:50
多谢楼上的几位,我再去好好看看
|
|
10楼#
发布于:2007-11-16 17:42
看了半天cpu的datasheet,终于明白了^_^
|
|
11楼#
发布于:2007-12-08 09:24
楼主明白了,那就讲讲是怎么回事吧,我也想知道
|
|
12楼#
发布于:2007-12-13 20:57
楼上的, nboot跳往eboot的地址就是物理地址,这个地址就是你的sdram所在的bank的地址. 这个是可以从配置文件boot.bib里面看到的 :)
|
|