先做个说明:我的平台环境是:CE5.0(S3C2450)。
我的config.bib定义的镜像起始地址为0x8c20 0000(虚拟地址), EBoot将镜像下载到以0x8c20 0000为起始地址的RAM中, 但实际上OS跳转的地址却是0x8c20 1000, 也就是说, 传递到Lauch函数的参数应该是对应的物理地址0x3020 1000, 也就是镜像开始后4K的位置.
为什么跳到4K后的位置执行呢? 如果直接在下载的其实地址(0x3020 0000)执行会怎么样呢? 答案是:程序同样会跳转到后4K的位置.
我看了一下NK.nb0中的机器码, 最前面4字节的内容是FE 03 00 EA, 它对应的指令是B跳转, 偏移地址是(0x3FE+2)*4正好就是4K, 也就是将跳转到偏移地址为0x1000的地方, 这也就很好的解释了上面的现象.
nk.bin是nk.nb0的压缩形式.把nk.bin下载到ram里后就是nk.nb0了.你说用烧录器烧入nk.nb0应该是烧到flash去了.如果你的平台用的是nor flash可以XIP的话,就把flash里存放nk.nb0的首地址(物理地址)传递给launch函数,就可以跳转到os启动了.如果在内存里运行os,那么就要在eboot里把nk.nb0复制到内存的某个位置,然后把这个位置的物理地址给launch就可以了.一般说来,这个位置就是bib里定义的imagestart。