config.bib:
; 8000.0000 -+
; | Bootloader Stack (64KB)
; 8001.0000 -+
; | Bootloader RAM (64KB)
; 8002.0000 -+
; | Bootloader Code (256KB)
; 8006.0000 -+
; | GAP (reserved for future)
; 800F.F000 -+
; | ARGS (4KB)
; 8010.0000 -+
; |
; | OS (NK) Code (DEBUG: 37MB, RELEASE: 32MB)
; |
; 8260.0000 -+ **auto-size**
; |
; | OS (NK) RAM (DEBUG: 23MB, RELEASE: 32MB)
; |
; 8400.0000 -+
#define NKSTART 80100000
#define NKLEN 01E00000
#define RAMSTART 81F00000 这两个有什么区别?
#define RAMLEN 02100000
1、请问NKSTART和RAMSTART的区别?
EBOOT.bib:
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
STACK 80000000 00010000 RESERVED
RAM 80010000 00010000 RAM
EBOOT 80020000 00040000 RAMIMAGE
RSVD 80060000 0009F000 RESERVED
ARGS 80FF0000 00001000 RESERVED
CONFIG
AUTOSIZE=OFF
COMPRESSION=OFF
PROFILE=OFF
KERNELFIXUPS=ON
ROMSTART=80020000 这个是什么?
ROMWIDTH=32
ROMSIZE=00040000
OEMaddressTable:
DCD 0x80000000, 0xA0000000, 128 ; MAINSTONEII: SDRAM (128MB).
DCD 0x88000000, 0x5C000000, 1 ; BULVERDE: Internal SRAM (64KB bank 0).
DCD 0x88100000, 0x58000000, 1 ; BULVERDE: Internal memory PM registers.
DCD 0x88200000, 0x4C000000, 1 ; BULVERDE: USB host controller.
DCD 0x88300000, 0x48000000, 1 ; BULVERDE: Memory controller.
DCD 0x88400000, 0x44000000, 1 ; BULVERDE: LCD controller.
DCD 0x88500000, 0x40000000, 32 ; BULVERDE: Memory-mapped registers (peripherals).
DCD 0x8A500000, 0x3C000000, 16 ; BULVERDE: PCMCIA S1 common memory space.
DCD 0x8B500000, 0x38000000, 64 ; BULVERDE: PCMCIA S1 attribute memory space.
DCD 0x8F500000, 0x30000000, 1 ; BULVERDE: PCMCIA S1 I/O space.
DCD 0x8F600000, 0x2C000000, 16 ; BULVERDE: PCMCIA S0 common memory space.
DCD 0x90600000, 0x28000000, 64 ; BULVERDE: PCMCIA S0 attribute memory space.
DCD 0x94600000, 0x20000000, 1 ; BULVERDE: PCMCIA S0 I/O space.
DCD 0x9A500000, 0xE0000000, 1 ; MAINSTONEII: Zero-bank (in reserved slot - no physical memory
DCD 0x9A600000, 0x14000000, 1 ; MAINSTONEII: nCS5: eXpansion board header.
DCD 0x9A700000, 0x10000000, 1 ; MAINSTONEII: nCS4: SMSC 91C111 Ethernet controller.
DCD 0x9A800000, 0x0A000000, 1 ; MAINSTONEII: nCS2 (upper half): 2MB SRAM.
DCD 0x9A900000, 0x08000000, 1 ; MAINSTONEII: nCS2 (lower half): Board registers (FPGA).
DCD 0x9CA00000, 0x00000000, 32 ; MAINSTONEII: nCS0: Boot Flash 32MB).
DCD 0x9EA00000, 0x50000000, 1 ; BULVERDE: Camera peripheral interface.
DCD 0x00000000, 0x00000000, 0 ; end of table
现在的问题是:
我把以前的BOOT中UsbDown移植到新的EBOOT(正在完善中...)中
其中有个函数是将 从PC中下载的内核存储到SDRAM中
PBYTE pImgStart = (PBYTE) RAM_IMAGE_START;
while(Imglen != 0)
{
Bufflen = 1024;
OEM_USBReceiveHandler( (PUCHAR) pImgStart, &Bufflen);
.....
然后解析内核
其中 RAM_IMAGE_START 在原来的BSP中的定义是#define RAM_IMAGE_START 0x96CB8000
而原来的OEMaddressTable:
DCD SDRAM_BASE_C_VIRTUAL, SDRAM_BASE_PHYSICAL, 128 ; (96C0 0000, A000 0000)
; everything SDRAM-related (eboot RAM, eboot RAMIMG, nk RAM, nk RAMIMAGE, nk MEMDEFS, ethdbg buffs)
也就是原来SDRAM的虚拟内存起始位置 + B8000 (为什么 + B8000?)
所以我现在将RAM_IMAGE_START定义为:0x80100000 即:上面分布图中NKSTART的虚拟地址
请问这么定义是否正确呢??
ROMSTART=80020000 这个是什么?
这个地址是你Eboot在运行前需要被存放的内存地址,也就是所谓的Eboot在内存中起始地址
也就是原来SDRAM的虚拟内存起始位置 + B8000 (为什么 + B8000?)
前面这段内存空间不是留给Eboot使用吗?至于加多少要看你自己的情况来定义了,不一定是B8000的
#define RAMSTART 81F00000 这两个有什么区别?
这只是个定义而已,没有看到你的代码中用在哪个地方了
#define NKSTART 80100000 ——就是NK的起始地址,是只读的。
#define NKLEN 01E00000
#define RAMSTART 81F00000 这两个有什么区别? ——NK 调入内存的起始地址,可以读写。
#define RAMLEN 02100000
楼主,搞来搞去咋还是原地打转呢?
等过阵子我看看,我搞个PXA270 来用用。和你一起学习。
#define NKSTART 80100000
#define NKLEN 01E00000
#define RAMSTART 81F00000 这两个有什么区别?
#define RAMLEN 02100000
(1)前面将NK拷贝到的地址。 关于NKLEN具体可以在EBoot中设置你要拷贝的长度。
RAMSTART是 RAM预留做内存使用的。 即你的内存起始地址。
ROMSTART=80020000 这个是什么?
ROMWIDTH=32
ROMSIZE=00040000
如2楼所诉。
B8000 如果流给Eboot的话256K就够了 或者更多点,即B800 700多K当然你该到256k的地方也可以。
RAM_IMAGE_START定义为:0x80100000
可以。
RAM_IMAGE_START定义为:0x81F00000
不好意思 因该是这个。
引用: 引用 4 楼 gooogleman 的回复:
#define NKSTART 80100000 ——就是NK的起始地址,是只读的。
#define NKLEN 01E00000
#define RAMSTART 81F00000 这两个有什么区别? ——NK 调入内存的起始地址,可以读写。
#define RAMLEN 02100000
什么意思啊??
我想把NK下到SDRAM中
我需要定义哪个地址是SDRAM的起始地址呢???
RAMSTART 81F00000 ???
NKSTART 80100000 ????
如果是RAMSTART 为什么NK的起始地址跑到RAMSTART后面了?》??
TO hzdysymbol大侠:
按照您说的
我只需要在我的SDRAM定义的虚拟地址起始位置 + EBOOT(256K) 就是我现在需要的,下载NK到SDRAM的地址了?
也就是
0x80000000 + 40000(256*1024) = 0x80040000
那么是否需要跟config.bib和eboot.bib中哪里对应上呢,需要修改RAMSTART还是NKSTART呢????
引用: 引用 4 楼 gooogleman 的回复:
#define NKSTART 80100000 ——就是NK的起始地址,是只读的。
#define NKLEN 01E00000
#define RAMSTART 81F00000 这两个有什么区别? ——NK 调入内存的起始地址,可以读写。
#define RAMLEN 02100000
#define RAMSTART 81F00000 这两个有什么区别? ——NK 调入内存的起始地址,可以读写。
#define RAMLEN 02100000
——这个说法有点不好,应该是是NK占用的地方之后的RAM区域。
引用: 引用 7 楼 papapa123123 的回复:
RAM_IMAGE_START定义为:0x81F00000
不好意思 因该是这个。
晕
按您说的RAM_IMAGE_START应该是 NKSTART 80100000 这个地址啊
我的SDRAM的起始地址是0x80000000 而NKSTART 80100000,其中的100000 = 1M >> 256K
按照您说的RAMSTART是 RAM预留做内存使用的??这个是WINCE跑起来之后的内存还是???
此处为去除内核占,跑起来之后的内存..
一般我们是64M内存。。NK占掉后留下来的内存空间33M,你内核定义的大小31M
引用: 引用 10 楼 wangxin_801115 的回复:
引用 7 楼 papapa123123 的回复:
RAM_IMAGE_START定义为:0x81F00000
不好意思 因该是这个。
晕
按您说的RAM_IMAGE_START应该是 NKSTART 80100000 这个地址啊
我的SDRAM的起始地址是0x80000000 而NKSTART 80100000,其中的100000 = 1M >> 256K
按照您说的RAMSTART是 RAM预留做内存使用的??这个是WINCE跑起来之后的内存还是???
哦
是否应该是这样理解:
SDRAM从8000_0000开始的
8000_0000 + 100_0000 其中100_0000放BOOT(256K)的大小
从8010_0000开始放NK, 也就是我需要的下载NK到SDRAM的起始地址
8010_0000+1E0_0000 其中IE0_0000(30M)放NK的大小
而RAMSTART 81F00000 这个地址是WINCE启动之后所用的内存的起始地址
即:8000_0000 + 128M = 88000000 这个是SDRAM的终止地址(暂时这样叫它),SDRAM共:128M
而 RAMSTART 81F00000
88000000 - 81F00000 = 6100000 (97M)这个是CE下使用的内存大小?
SDRAM从8000_0000开始的
留流出来前面的放map table
哦??
8000_0000 + 100_0000 其中100_0000放BOOT(256K)的大小
这100_0000的大小除了放EBOOT还有放map table 的吗??