chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
阅读:3939回复:36

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

楼主#
更多 发布于:2005-01-13 09:50
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上时,怎么分配啊?
糊涂了,请兄弟们给分析分析

最新喜欢:

ltgbjltgbj
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-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]
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-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_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-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]
Come on, let us drive the world.
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-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_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-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_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-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空间长度的设定到底有什么要求?它的设定应该满足什么要求?怎么设定?
 还请大哥耐心解答。如果我有问错的地方还请大哥原谅。
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-13 16:21
嗯,我看了一下,确实是,我说说我的看法哈

它里面提到了chain_address,会不会它使用了分段的方式存放,革命遇到这种问题就要兄弟伙一起上了!:)))这个问题大家好好看看怎么回事
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-13 16:34
我又看了一下:
IF IMGMULTIXIP
#define CHAIN_ADDRESS 80220000
.....
ELSE
.....

实际上,CHAIN_ADDRESS 这段应该没进去,它执行的应该是else后面的。
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-13 16:47
先记下这个问题,大家研究好了就告诉兄弟们!
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-13 17:30
我又看了一下,好像是这样:如果设了AUTOSIZE=ON系统会自动把大小扩展到合适的地方,要不兄弟试试把这个关掉,如果关掉就不对了那就是这个意思了
根据地的兄弟们,团结就是力量
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-13 17:46
其实真正NK的大小是由ROMESIZE决定的
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-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]
Come on, let us drive the world.
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-14 08:53
ROMSIZE在config.bib中CONFIG模块下
liaoxing
驱动牛犊
驱动牛犊
  • 注册日期2005-01-14
  • 最后登录2007-08-28
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-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_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-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]
Come on, let us drive the world.
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-01-14 09:50
我的理解
ROMSTART指定的内核镜像的首地址
ROMSIZE 内核镜像的大小
不如生成的nk.nb0的大小和你ROMSIZE设置的大小是一样的

wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-01-14 10:04
我的理解
ROMSTART指定的内核镜像的首地址
ROMSIZE 内核镜像的大小
不如生成的nk.nb0的大小和你ROMSIZE设置的大小是一样的

 

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

[编辑 -  1/14/05 by  wwei_wang]
Come on, let us drive the world.
chang_nicolas
驱动小牛
驱动小牛
  • 注册日期2004-08-26
  • 最后登录2007-03-29
  • 粉丝0
  • 关注0
  • 积分370分
  • 威望39点
  • 贡献值0点
  • 好评度34点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-01-14 10:32
写错了,应该是“例如”
我觉得是这个意思了,NK.bin的大小应该是实际的大小,没有给它分配任何多余的空间,而ROMSIZE是分配了比实际上大的空间,如果分配小的话,NK.nb0会被分成两个部分,究竟编译前根据什么计算ROMSIZE大小,我不清楚,不过我认为根据nk.bin文件的大小可以得出ROMSIZE的大小,这是你自己定的
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-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]
Come on, let us drive the world.
上一页
游客

返回顶部