阅读:2035回复:2
提一个关于BSP中OAL与boot之间共享数据的问题
Hi All,
以下选自2440的BSP上的代码。 在BSP中,boot loader和OAL之间有一些数据可以共享。这段数据被存放在(BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START这块内存里。 #define IMAGE_SHARE_ARGS_UA_START 0xA0020000 #define IMAGE_SHARE_ARGS_CA_START 0x80020800 #define IMAGE_SHARE_ARGS_SIZE 0x00000800 可以看出来,IMAGE_SHARE_ARGS_UA_START指向的是虚拟内存中的Uncached段,而IMAGE_SHARE_ARGS_CA_START指向虚拟内存中的Cached段。 我的g_oalAddressTable中这样定义: DCD 0x80000000, 0x30000000, 64 ; 32 MB DRAM BANK 6 因此,它们分别是指向物理地址0x30020000和0x30020800。 然后看config.bib中,可以看到有这段定义: ; Common RAM areas AUD_DMA 80002000 00000800 RESERVED SDIO_DMA 80010000 00010000 RESERVED ARGS 80020800 00000800 RESERVED DBGSER_DMA 80022000 00002000 RESERVED SER_DMA 80024000 00002000 RESERVED IR_DMA 80026000 00002000 RESERVED SLEEP 80028000 00002000 RESERVED EDBG 80030000 00020000 RESERVED DISPLAY 80100000 00100000 RESERVED 其中ARGS对应的物理地址的0x30020800是为IMAGE_SHARE_ARGS_CA_START保留的吧。 我有几个问题: 1. 为什么没有为IMAGE_SHARE_ARGS_UA_START保留一段内存空间呢? 2. IMAGE_SHARE_ARGS_CA_START这段空间是做什么用的呢?我在代码中并没有看到IMAGE_SHARE_ARGS_CA_START被使用到。 3. 按照命名来看,这两个宏应该是指向同一个物理地址的两个不同虚拟地址才对,而为什么实际上却是指向了不同的物理地址呢? 大家讨论一下呵呵。 |
|
沙发#
发布于:2008-06-27 17:51
0x80 和 0xa0 都是指向相同地址, 一个ca, 一个ua. 不需要额外在给ua再次保留. 所以你的值应该是有错误的, 要修改0xA0020800
这个是eboot传递给kernel的参数. 保存BSP_ARGS结构, 定义在args.h中. 所以eboot中在OEMPlatformInit()初始化它, OAL在OEMInit()中读出. |
|
板凳#
发布于:2008-06-28 10:50
是,我也觉得是定义错了,但我发现2410和2440的BSP似乎都在这个地方有这样的问题。感到很奇怪。
大家不妨看看自己的BSP(尤其是2410和2440),image_cfg.h里面,IMAGE_SHARE_ARGS_UA_START和IMAGE_SHARE_ARGS_CA_START的定义是否一致。 |
|