MSDN中在关于BIB文件的MEMORY Section部分中提到RAMIMAGE类型时说:
Specifies that the region should be treated like RAM. The memory addresses in this entry can physically correspond to RAM or to linear flash memory.
原文见:
http://msdn.microsoft.com/en-us/library/ms923584.aspx
我们都知道,RAMIMAGE是Eboot或内核映像存放的区域。
我以前一直以为RAMIMAGE只能是RAM中的地址而不可能是Flash中的地址,因为Eboot需要通过这个地址来决定将自己或是内核拷贝到RAM中的什么位置
但是上面msdn上却说也可以是flash的地址。那我就纳闷了,如果是flash中的地址,Eboot如何知道要将内核拷贝到RAM中的什么地方呢?
不知道我把问题描述清楚没有,请各位大侠指教!!
flash有2种,nor flash可以直接运行程序。我认为这里的flash指的就是nor flash。
你是指直接本地执行(XIP)而不需要拷贝到内存吗?
应该来说在Flash上执行的只是最开始的少部分代码吧,大部分代码最终还是要拷贝到内存中去执行的。
理论上说,如果不考虑速度的话,整个系统都可以放在nor上运行;
当然,像你说的那样,只在上面运行bootloader,其它放在RAM中运行,也是可以的。
那问题还是存在,如果需要放在RAM上执行的话,这个地址由谁来指定?
难道就是随便指定一个可用的地址吗?
楼上能说具体一点吗?比如用什么函数,或是什么变量指定地址。最好是能给段程序的例子。
引用: 引用 6 楼 tianix 的回复:
难道就是随便指定一个可用的地址吗?
楼上能说具体一点吗?比如用什么函数,或是什么变量指定地址。最好是能给段程序的例子。
好像确实如此,不过这个地址后的空间要足够容纳你的NK,config.bib里面指定了一些设备的内存地址和范围,NK的入口地址也在这里指定了,当然这个地址要与bootloader准备跳转的地址对应
RAMIMAGE的地址是虚拟地址,你自己的内核代码会对RAMIMAGE的地址和物理地址作一个映射,如果映射到ram上了,那就是ram,如果映射到flash上了,那就是flash!
不管是NAND还是NOR都可以存放BIB的
NAND的话可以将BIB放在第一个BLOCK之后的第N个好块(NBB:not bad block)中。
NOR就更好办,直接放到某个固定地址处即可
FLASH可以是NOR,也可以是NAND。因为这个定义的地址是给boot程序来更新BOOT或者OS镜像,以及引导加载OS镜像用的,所以只要是合法的虚拟地址即可。
至于烧录的地址,的确是随便定义的,只要确保这个地址是合法的可寻址地址,并且不会造成误重叠、溢出、误擦写等等就行,还要确保此地址和boot中的下载、加载对应的Image地址一致。