--by FeCen
在开始看Xloader_Entry的代码之前,我想先总结一下从芯片上电到开始运行Xloader的代码的过程,这是我目前理解的一个过程,可能有所出入,待以后继续完善。
当系统上电之后,首先会将PC寄存器设置成BootRom里面的代码对应的一个地址。BootRom是芯片内部集成的一块很小的存储区,里面一般会固化一段启动代码。至于BootRom所占用的地址空间,每个芯片的定义可能会有所不同,具体的可以参考芯片的用户手册中的Memory Map部分的说明。在spearplus中,BootRom位于从0xFF000000到0xFFFFFFFF的16M大小的地址区间。当然,BootRom的大小不一定要那么大,这只是说,这些地方给你用了,具体你用了多少随你自己,够用就行。在spearplus里面是32k。
那么BootRom有那么大的一片地址区域可以用,具体系统上电的时候会跳转到哪一个地址去执行代码呢?这就取决于CPU的定义了。对于spearplus里面使用的ARM926EJS来说,它是这么定义的:Following reset, the ARM core starts to fetch instructions either from 0x00000000 or 0xFFFF0000 depending on the signal level of VINITHI* input signal to ARM core. If after reset VINITHI signal level is LOW then ARM core will start fetching code from address 0x00000000 otherwise ARM core will start fetching code from 0xFFFF0000. So there must be some executable code accessible