关于Config.bib中,内存分配问题KN,RAM

关于Config.bib中,内存分配问题KN,RAM
分享 
标签: wince  内存 

1 在MEMORY下,我们需要分配好下列空间
NK 96CB8000 01F48000 RAMIMAGE ; SDRAM 31.9MB
RAM 98C00000 01A00000 RAM ; SDRAM 26MB
那么请问:这里的NK分配的空间,是用来存放image的吧?那么刚开始那个image是放在哪里的啊?
2 那我们的image存放在NOR Flash中时,
我们是不是要把这个NK分配到NOR flash的空间上,把整个SDRAM作为系统RAM?
3 如果image存放在NAND FLASH上时,怎么分配啊?
糊涂了,请兄弟们给分析分析

wwei_wang2005-01-13 10:11
我理解应该是这样的:
(1)NK的image文件,即压缩文件存在于NOR flash(或其他外存)上,它只是一个文件而已;
(2)在系统启动的时候,这个压缩文件会被解压到内存中的某一地址范围,这个范围就是由下面的配置确定的:
MEMORY
NK 96CB8000 01F48000 RAMIMAGE

RAM 98C00000 01A00000 RAM
则确定了系统实际可使用的RAM。

不完整之处,还请其他大侠补充:)))

[编辑 - 1/13/05 by wwei_wang]

wxl_506853302005-01-13 13:36
在链接的时候,内核的所有可重定位数据被定址,这时候基地址是根据EXEBASE计算的,这样,对数据池中的数据访问被链接为绝对寻址。接下来,你的这段代码必须放到你EXEBASE指定的空间来运行,否则找不到绝对定址的正确数据。RAMIMAGE需要和EXEBASE一致。

按道理说IMAGE放到NOR里面可以使用XIP执行(ms帮助也说过,但没有详细讲),我调的时候发现不对,第一级页表(我说的是ARM,X86的情况可能类似)被放到OS IMAGE后面64K对齐的地方,这样在NOR里面运行肯定不行,不知道为啥子MS说可以XIP执行...所以把NOR作为空间存放可以,但只能暂时,跳到KernelStart后还是要放到ram里面来跑(你需要在此之前自己搬家)。同理使用nand flash也需要将os image移到sdram里面。

wwei_wang2005-01-13 13:55
我借题发挥,顺便有个很菜的问题想请教wxl_50685330大哥:
在MEMORY下,例如本例中
NK 96CB8000 01F48000 RAMIMAGE
RAM 98C00000 01A00000 RAM

(1)RAMIMAGE空间的长度(此例为01F48000)与nk的实际大小的关系是什么?是不是这个空间的长度不能小于nk的大小?



[编辑 - 1/13/05 by wwei_wang]

chang_nicolas2005-01-13 14:42
1 wxl_50685330大哥,它是可以在在NOR Flash里运行的,我们现在的就是这样的,
所以它在配置里这么分配了内存
NK 80000000 02000000 RAMIMAGE
;80000000是NOR Flash的首地址
;它把64M的SDRAM都作为了系统RAM
RAM 96C00000 03A00000 RAM
2 要是改用NAND Flash时,我们是不是要在SDRAM中分配RAMIMAGE啊
就像这样
NK 96CB8000 01F48000 RAMIMAGE
RAM 98C00000 01A00000 RAM
意思是需要把NAND Flash中的image 拷到RAM中运行
嗯,我认为就是这个意思
3 而RAMIMAGE的长度应该就是你那个bin文件或是nb0文件的大小,我觉得是不能小于nk大小的啦,要不image拷到ram里也放不全啊
4 另外有个问题就是,把image copy到RAM里,是在那个文件里完成的、?

wxl_506853302005-01-13 15:11
wwei_wang
应该是不要小于,不过你定的nk.nb0有时候后面有一段没用的(全0),这个时候不会有问题,但不保证,系统要用这个定出ram的起始地址,从源代码看第一级页表(arm)是放在紧挨os image后的

chang_nicolas
兄弟,你们完全在nor里面跑的?不是吧,我看过源代码,做的时候开始我也没有动,但后来返汇编调的时候发现你把os image放哪儿跑,那也表就会放到它后面,这样在flash里面的话页表地址也在flash里面了,不对阿,我是没办法才自己做的搬家,你们是怎么做的?你们的cpu是什么?你看过页表基址在什么地方吗?

我搬家的代码实现是在startup里面,因为跳到kernelstart后就开始做页表初始化了,我要在这之前搬到sdram

对了,你说的对nand的处理是对的,就那样做

wwei_wang2005-01-13 16:02
To wxl_50685330,我晕了,请大哥赐教
(1)我看了一下pb带的bsp,无论是cepc还是geode,它们的config.bib文件中,对于RAMIMAGE段的配置都是一样的,如下
MEMORY
NK 80220000 009E0000 RAMIMAGE

请问,这里的长度009E0000(等于9.875M),是根据什么定的?如果按照这个配置生成的nk.bin大于这个,如16M(对于debug版这个大小很正常),那么会有什么问题?
值得注意的是:我曾经按照这个配置生成的nk.bin有19M多,但拷贝到目标机后系统仍能正常启动,而且一直工作正常。 所以我不是很清楚,这里RAMIMAGE空间长度的设定到底有什么要求?它的设定应该满足什么要求?怎么设定?
还请大哥耐心解答。如果我有问错的地方还请大哥原谅。

wxl_506853302005-01-13 16:21
嗯,我看了一下,确实是,我说说我的看法哈

它里面提到了chain_address,会不会它使用了分段的方式存放,革命遇到这种问题就要兄弟伙一起上了!:)))这个问题大家好好看看怎么回事

wwei_wang2005-01-13 16:34
我又看了一下:
IF IMGMULTIXIP
#define CHAIN_ADDRESS 80220000
.....
ELSE
.....

实际上,CHAIN_ADDRESS 这段应该没进去,它执行的应该是else后面的。

wxl_506853302005-01-13 16:47
先记下这个问题,大家研究好了就告诉兄弟们!

wxl_506853302005-01-13 17:30
我又看了一下,好像是这样:如果设了AUTOSIZE=ON系统会自动把大小扩展到合适的地方,要不兄弟试试把这个关掉,如果关掉就不对了那就是这个意思

chang_nicolas2005-01-13 17:46
其实真正NK的大小是由ROMESIZE决定的

wwei_wang2005-01-13 21:12
To wxl_50685330: 有可能,我明天试试看。
To chang_nicolas: ROMSIZE是在哪里定义的?请指教。

另外关于内存的配置我还有一个问题:
对于pb里自带的bsp(cepc,geode等),例如当系统的物理内存为64时,内存是这样配置的
MEMORY
NK 80220000 009E0000 RAMIMAGE
RAM 80C00000 01000000 RAM

内存总和计算如下:
009E0000 + 01000000 +ExtraRAM(=36M)=61.875M
另外 从800A0000到80220000一段被保留,这样就有
61.875M+1.5M=63.375M
还有从80000000到800A0000这段(正好0.625M),这一段内存好像没有定义?难道缺省设置为保留状态?还是怎么着?请各位高手明示。

[编辑 - 1/13/05 by wwei_wang]

chang_nicolas2005-01-14 08:53
ROMSIZE在config.bib中CONFIG模块下

liaoxing2005-01-14 09:11
我是在做x86的,初来乍道,有些冒昧。我来谈谈我的一些理解,希望指正:
NK这段定义表示RAMIMGAE这段内存的区域,这段内存在wince里被认为是类似ROM操作的ram区域,并且NK.exe模块就在这个区域中;
RAM这段定义定义内存大小,由IMGRAM16,IMGRAM32,IMGRAM64,IMGRAM128决定;
a0000是vga framebuffer保留地址;a0000以下的地址也是使用了的,比如bios和dos初始化时,定义了gdt,idt;一般2m以下的地址wince是不使用的,都有保留功能(比如eboot,dma。。。);
romsize的定义的说法不是太准确的,wince里每个模块都会在makeimg的时候决定它的romstart,romsize,根据这些东西一起打包成nk.bin;比如x86平台对于nk.bin第1个模块nk.exe的romstart就是0x80220000,然后根据nk.exe的romsize累加得到下一个模块的romstart。。。
nk.bin的大小是根据你选择的组件,并由你选择是否压缩决定的,至于这个nk.bin能否完全解到内存中去,就要由ramimg参数来配合。

[编辑 - 1/14/05 by liaoxing]

wwei_wang2005-01-14 09:24
To liaoxing:谢谢兄弟指点,你太谦虚了:)
(1)NK定义的这段RAMIMGAE内存区域的长度是根据什么确定的?
(2)a0000是否系统缺省为保留?
(3)nk.bin能否完全解到内存中去,对系统有什么影响?是否要求nk.bin一定要解压到内存中?或者说什么情况下需要解到内存中,什么时候不需要??

To chang_nicolas:
不好意思,ROMSIZE在哪里设的呀?怎么设的啊?缺省配置里没有啊。我这个问题好像有点弱:))
config段相关代码如下:
CONFIG
AUTOSIZE=ON

IF IMGMULTIXIP
RAM_AUTOSIZE=ON
ROM_AUTOSIZE=ON
DLLADDR_AUTOSIZE=ON

XIPSCHAIN=$(CHAIN_ADDRESS)

AUTOSIZE_ROMGAP=10000
AUTOSIZE_DLLADDRGAP=0
AUTOSIZE_DLLDATAADDRGAP=0
AUTOSIZE_DLLCODEADDRGAP=0
ENDIF

[编辑 - 1/14/05 by wwei_wang]

chang_nicolas2005-01-14 09:50
我的理解
ROMSTART指定的内核镜像的首地址
ROMSIZE 内核镜像的大小
不如生成的nk.nb0的大小和你ROMSIZE设置的大小是一样的


wwei_wang2005-01-14 10:04
[quote]我的理解
ROMSTART指定的内核镜像的首地址
ROMSIZE 内核镜像的大小
不如生成的nk.nb0的大小和你ROMSIZE设置的大小是一样的

[/quote]
chang_nicolas不好意思,我没明白你最好一句话的意思?另外,ROMSIZE的大小在编译之前是怎么确定的?还是尽量多分配一些?

[编辑 - 1/14/05 by wwei_wang]

chang_nicolas2005-01-14 10:32
写错了,应该是“例如”
我觉得是这个意思了,NK.bin的大小应该是实际的大小,没有给它分配任何多余的空间,而ROMSIZE是分配了比实际上大的空间,如果分配小的话,NK.nb0会被分成两个部分,究竟编译前根据什么计算ROMSIZE大小,我不清楚,不过我认为根据nk.bin文件的大小可以得出ROMSIZE的大小,这是你自己定的

wwei_wang2005-01-14 10:54
你的意思是:
(1)ROMSIZE确定了nk.bin在内存中映像的区域的大小?系统启动时,nk.bin将被解压到这个内存区域。
(2)如果是这样的话,那么
MEMORY
NK 80220000 009E0000 RAMIMAGE
RAM 80C00000 01000000 RAM
中,RAMIMAGE的长度(这里是009E0000)和ROMSIZE到底是什么关系?还是没有关系?


[编辑 - 1/14/05 by wwei_wang]

chang_nicolas2005-01-14 11:09
越来越复杂了,我的理解,不知对否了,请高手们指教吧
RAMIMAGE的大小不是跟ROMSIZE的大小有直接关系的
ROMSIZE只是规定了生成的NK.NB0的大小
RAMIMAGE分配的大小是指运行系统需要的空间,
如果你是吧NAND Flash上的image全部拷到RAM里的话,那么RAMIMAGE的大小应该和ROMSIZE一样,如果只是将image里的内核拷过去的话,那么RAMIMAGE的大小就没有必要分得跟ROMSIZE一样大了,所以RAMIMAGE的大小和ROMSIZE的大小的关系还依赖你所选用何种方式运行你的系统

joyfly2005-01-14 11:16
你们应该先弄清楚你们要编译的IMAGE类型和要运行的目标设备的环境,再来分别讨论每种的设定.

Monolithic还是MultiXIP
NandFlash还是Norflash

wwei_wang2005-01-14 12:05
[quote]你们应该先弄清楚你们要编译的IMAGE类型和要运行的目标设备的环境,再来分别讨论每种的设定.

Monolithic还是MultiXIP
NandFlash还是Norflash
[/quote]

To chang_nicolas:谢谢你的指点。
To joyfly:请joyfly兄弟说说你的高见:
(1)Monolithic和MultiXIP有什么不同?
(2)我目标机的外存是CF或DOC,在这种情况下RAMIMAGE的大小如何设定?和nk.bin的大小有什么关系?

wxl_506853302005-01-14 17:06
[quote]写错了,应该是“例如”
我觉得是这个意思了,NK.bin的大小应该是实际的大小,没有给它分配任何多余的空间,而ROMSIZE是分配了比实际上大的空间,如果分配小的话,NK.nb0会被分成两个部分,究竟编译前根据什么计算ROMSIZE大小,我不清楚,不过我认为根据nk.bin文件的大小可以得出ROMSIZE的大小,这是你自己定的 [/quote]

ROMSIZE是指定NK.NB0大小的,NK.BIN是NK.NB0的RUN LENGTH压缩文件。

WWEI_WANG

试了没?对于.BIN文件,本身包含了自己的大小,AUTOSIZE可能会根据RAMIMAGE和.BIN的大小自动调整OS IMAGE和空闲RAM的边界。

wxl_506853302005-01-14 17:11
chang_nicolas
兄弟,接着上次的话题,你了解你们的OS IMAGE跑起来后是在FLASH里还是被搬到了SDRAM里?页表地址怎么给的?

wwei_wang2005-01-17 14:26
[quote]我又看了一下,好像是这样:如果设了AUTOSIZE=ON系统会自动把大小扩展到合适的地方,要不兄弟试试把这个关掉,如果关掉就不对了那就是这个意思了 [/quote]

老大不愧是老大,眼力果然狠毒,我测试过了,就是AUTOSIZE这个家伙的问题 :P :P :P :P

wxl_506853302005-01-17 15:49
:))你娃又为革命做出了不朽的贡献!记一等功一次哈:)))

那这下就好办了,怪不得有时候可用内存比我指定的大:)))

wwei_wang2005-01-17 16:12
为了革命,我不入地狱谁入地狱?哈哈哈 :cool:

[编辑 - 1/17/05 by wwei_wang]

wxl_506853302005-01-17 17:15
我终于找到接班人了!

wwei_wang2005-01-18 08:02
你是找到下地狱的接班人了吧?呵呵

wxl_506853302005-01-18 14:48
你这个人就是这点不好,老爱说实话...

wwei_wang2005-01-18 16:07
看样子你的马儿已经好了 :D

wxl_506853302005-01-18 16:11
喂,哥哥问你话,没得反应喃!在那两个帖子里面

wwei_wang2005-01-18 16:27
大哥问话,就算兄弟不知道也得有所反应,呵呵,刚才在干别的呢。

wxl_506853302005-01-18 16:30
:)

wwei_wang2005-01-18 19:08
大哥,你为兄弟们费心了 ;)

qindl2007-01-30 17:37
我是新手 我的疑问可能更多 别笑话
1/我的扳子是9315A   flash只16M 型号(E28F16**J3A150A0404**)小弟不懂是NOR FLASH 还是 NAND FLASH ?
2/ 因为我的FLASH小 BIB配置和大家也不一样 我编译出的NK.NBO 都15M多 也可以扳子上运行
看下买内的代码 大侠们分析下

IF EDB9301_02


IF IMGFLASH !
IF BSP_EP93XX_COPY_FLASH_TO_RAM !
;**********************************************************************
;
; Boot from RAM
;
;**********************************************************************
MEMORY
  RESERVED   80000000     00008000     RESERVED
  DRV_GLB     80008000     00001000     RESERVED
  CS8950     80010000     00030000     RESERVED
  EDBG       80040000     00080000     RESERVED
;   FRAMEBUF   800C0000     00140000     RESERVED
;   NK       80200000     00E00000     RAMIMAGE
  NK       800C0000     00740000     RAMIMAGE
  RAM       81000000     00800000     RAM


CONFIG
  COMPRESSION=ON
  PROFILE=OFF
  ROMSTART=800C0000
  ROMSIZE=00740000
  ROMWIDTH=32

  ;
  ; Used for making a copy to RAM 0x80000000
  ;
;   ; 0x80200000 + 0x80000000 = 0x00200000
;   ROMOFFSET=0x80000000
  ; 0x800C0000 + 0x80000000 = 0x000C0000
  ROMOFFSET=0x80000000
  ROMFLAGS=0
  KERNELFIXUPS=ON
  AUTOSIZE=OFF
ENDIF
ENDIF


IF IMGFLASH !
IF BSP_EP93XX_COPY_FLASH_TO_RAM
;**********************************************************************
;
; Copy Flash to RAM and boot from RAM.
;
;**********************************************************************
MEMORY
  RESERVED   80000000     00008000     RESERVED
  DRV_GLB     80008000     00001000     RESERVED
  CS8950     80010000     00030000     RESERVED
  EDBG       80040000     00080000     RESERVED
;   FRAMEBUF   800C0000     00140000     RESERVED
;   NK       80200000     00E00000     RAMIMAGE
  NK       800C0000     00740000     RAMIMAGE
  RAM       81000000     00800000     RAM
;   RAM       80800000     01800000     RAM


CONFIG
  COMPRESSION=ON
  PROFILE=OFF
;   ROMSTART=80200000
;   ROMSIZE=00E00000
  ROMSTART=800C0000
  ROMSIZE=00740000
  ROMWIDTH=32

  ;
  ; NKStart   + ROMOFFSET = Physical Memory Location.
;   ; 0x80200000 + 0xDFE00000 = 0x60000000
;   ROMOFFSET=DFE00000
  ; 0x800C0000 + 0xDFF40000 = 0x60000000
  ROMOFFSET=DFF40000
  ROMFLAGS=0
  KERNELFIXUPS=ON
  AUTOSIZE=OFF


ENDIF
ENDIF

IF IMGFLASH
;**********************************************************************
;
; Boot from FLASH
;                    
;**********************************************************************
MEMORY
  RESERVED   80000000     00008000     RESERVED
  DRV_GLB     80008000     00001000     RESERVED
  CS8950     80010000     00030000     RESERVED
  EDBG       80040000     00080000     RESERVED
;   FRAMEBUF   800C0000     00140000     RESERVED
;   RAM       80200000     00600000     RAM
  RAM       800C0000     00740000     RAM
  NK       88000000     00800000     RAMIMAGE
CONFIG
  COMPRESSION=OFF
  PROFILE=OFF
  ROMSTART=88000000
  ROMSIZE=00800000
  ROMWIDTH=32

  ;
  ; Used for making a copy to RAM 0x80000000
  ;
  ; 0x88000000 + 0xD8000000 = 0x60000000
  ROMOFFSET=0xD8000000
  ROMFLAGS=1
  KERNELFIXUPS=ON
  AUTOSIZE=OFF
ENDIF


ENDIF
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值