Linux mpc85xx(P2040)使用Nor闪存启动,Nor闪存映射到哪里?

Linux mpc85xx(P2040)使用Nor闪存启动,Nor闪存映射到哪里?,linux,linux-kernel,bootloader,powerpc,u-boot,Linux,Linux Kernel,Bootloader,Powerpc,U Boot,最近我正在把u-boot移植到基于P2040的主板上 正如u-boot/arch/powerpc/mpc85xx/start.s评论的那样: 处理器从0xffff_fffc开始,代码首先在flash/rom的最后4K页中执行 在u-boot/arch/powerpc/mpc85xx/resetvec.S中: .section .resetvec,"ax" b _start_e500 在u-boot.lds链接器脚本中: .resetvec RESET_VECTOR_ADDRESS : {

最近我正在把u-boot移植到基于P2040的主板上

正如u-boot/arch/powerpc/mpc85xx/start.s评论的那样: 处理器从0xffff_fffc开始,代码首先在flash/rom的最后4K页中执行

在u-boot/arch/powerpc/mpc85xx/resetvec.S中:

.section .resetvec,"ax"
b _start_e500
在u-boot.lds链接器脚本中:

.resetvec RESET_VECTOR_ADDRESS :
{
     KEEP(*(.resetvec))
} :text = 0xffff
重置向量位于0xffff_fffc,其中包含到_start_e500的跳转指令

E500MCRM第6.6章提到: 此默认TLB条目将resetat有效地址0xffff\u fffc的第一条指令提取转换为resetat。 本说明应作为本页开头的一个分支

因此,如果我将HCW配置为允许powerpc从Nor闪存启动,为什么我要假设Nor闪存 最后4K映射到0xffff_f000~0xffff_ffff?因为还没有法律设置和本地总线的默认BR0/OR0 与该范围不匹配。我很困惑,在core初创公司的一开始,如何访问Nor Flash

另一个问题是: P2040是否始终启用MMU,以便即使在u-boot阶段也能将有效地址转换为实际地址? 如果是这样,除了访问CCSRBAR之外,所有其他内存访问都应该首先设置TLB条目

致以最良好的祝愿,
郭钩

再读一遍这个。阅读u-boot 2014.xx最新的arch/powerpc/cpu/mpc85xx/start.S,从第60行开始。Hi@sessyargc.jp,我注意到start.S中的注释。但我还是很困惑。UM说:8Mbytes引导窗口在核心启动时有效,从0xffc0_0000到0xffff_ffff。但我为什么要认为这个范围不是闪烁的呢?为什么.bootpg部分位于由MMU L2 TLB1 Entry0映射的最后一页?请注意地址,0xfffc0000不是8Mb。好的,HW最初将此引导窗口设置为NOR闪烁。您可以通过修改RCW来更改它。您应该查看参考手册中的引导空间转换和E500CORERM.pdf中的说明流程。bootpg总是在最后4Kb,因为这是内核重置后唯一可用的页面。HW设置了这些,但HW只能做这么多。因此,过去4Kb中的代码非常重要。您会注意到,它设置了TLB和法律。感谢您的帮助@sessyargc.jp。通过说HW最初将此引导窗口设置为NOR Flash,您的意思是:是预引导加载程序使用PBL命令将引导窗口设置为NOR Flash?Hi@sessyargc.jp,我想我几乎明白了这一点。当RCW将eLBC GPCM Nor Flash 16位设置为引导ROM时,引导窗口指向eLBC,处理器从0xFFFF_FFFC开始,实际地址映射到Nor Flash的最后2个字。如P2040RM 13.4.2所述:在系统复位时,可使用全局芯片选择,在系统完全配置之前提供引导ROM芯片选择LCS0_B。Nor闪存的最后两个字是指向_start_e500的分支指令,该指令位于.bootpg的开头。.bootpg部分中的代码设置更多TLB条目以使u-boot代码的重置生效。