eboot系列问题--------------请教EBOOT.BIB和CONFIG.BIB中的内容!

4543464   2009-5-22 11:51 楼主
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的虚拟地址
请问这么定义是否正确呢??

回复评论 (19)

ROMSTART=80020000 这个是什么?
这个地址是你Eboot在运行前需要被存放的内存地址,也就是所谓的Eboot在内存中起始地址

也就是原来SDRAM的虚拟内存起始位置 + B8000 (为什么 + B8000?)
前面这段内存空间不是留给Eboot使用吗?至于加多少要看你自己的情况来定义了,不一定是B8000的

#define RAMSTART 81F00000    这两个有什么区别?
这只是个定义而已,没有看到你的代码中用在哪个地方了
点赞  2009-5-22 12:37
make
点赞  2009-5-22 13:10
mark
点赞  2009-5-22 13:19
#define NKSTART 80100000 ——就是NK的起始地址,是只读的。
#define NKLEN 01E00000

#define RAMSTART 81F00000    这两个有什么区别? ——NK 调入内存的起始地址,可以读写。
#define RAMLEN 02100000
点赞  2009-5-22 13:47
楼主,搞来搞去咋还是原地打转呢?

等过阵子我看看,我搞个PXA270 来用用。和你一起学习。
点赞  2009-5-22 13:48
    #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
可以。
点赞  2009-5-22 14:08
RAM_IMAGE_START定义为:0x81F00000
不好意思 因该是这个。
点赞  2009-5-22 14:13
引用: 引用 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呢????
点赞  2009-5-22 14:19
引用: 引用 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区域。
点赞  2009-5-22 14:29
引用: 引用 7 楼 papapa123123 的回复:
RAM_IMAGE_START定义为:0x81F00000
不好意思 因该是这个。



按您说的RAM_IMAGE_START应该是  NKSTART 80100000  这个地址啊

我的SDRAM的起始地址是0x80000000 而NKSTART 80100000,其中的100000 = 1M >> 256K

按照您说的RAMSTART是 RAM预留做内存使用的??这个是WINCE跑起来之后的内存还是???
点赞  2009-5-22 14:32

我和2440 做个对比。
引用: 引用 4 楼 gooogleman 的回复:
(1)
#define NKSTART 80100000 ——这是NK调入内存的虚拟地址。 这个地址在bootloader会用到,启动NK用到。
#define NKLEN 01E00000

MEMORY
    NK      80200000  01E00000  RAMIMAGE——这个和(1)作用相同
    RAM     82910000  016F0000  RAM————这个和(2)的作用相同
    FLASH   92000000  00100000  RESERVED

(2)
#define RAMSTART 81F00000     ——用作wince RAM的起始地址,wince内存大小就从这里开始算。
#define RAMLEN 02100000


我的理解就是这样了。
点赞  2009-5-22 14:34
这个有点像2440 4.2BSP的写法。
点赞  2009-5-22 14:39
此处为去除内核占,跑起来之后的内存..
一般我们是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跑起来之后的内存还是???
点赞  2009-5-22 14:39


是否应该是这样理解:

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下使用的内存大小?

点赞  2009-5-22 14:54
恩..是这样.
居然用的128M SDRAM...
引用: 引用 14 楼 wangxin_801115 的回复:


是否应该是这样理解:

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
而  RAMST…
点赞  2009-5-22 15:02
恩是啊
因为这个128
改动了很多地方!!
点赞  2009-5-22 15:07
SDRAM从8000_0000开始的
留流出来前面的放map table
点赞  2009-5-23 02:12
哦??
8000_0000 + 100_0000 其中100_0000放BOOT(256K)的大小

这100_0000的大小除了放EBOOT还有放map table 的吗??
点赞  2009-5-24 21:31
引用: 引用 17 楼 zhenwenxian 的回复:
SDRAM从8000_0000开始的
留流出来前面的放map table

根据??
点赞  2009-10-22 14:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复