我有一个定制的imx6独奏板。 1 GB的DDR3内存和MMC进行引导。
我已经移植了u-boot(fslc社区之一),它似乎工作正常。 我还运行了压力RAM测试,结果正常。 (校准数据用于imximage.cfg)
当我尝试运行内核时,它停留在“ 启动内核”上 命令:
>>ext4load mmc 0 ${loadaddr} zImage
>>ext4load mmc 0 ${fdt_addr} *.dtb
>>bootz ${loadaddr} - ${fdt_addr}
(loadaddr = 0x12000000和fdt_addr = 0x18000000 bootargs具有正确的ttymxc和波特率值)
早期printk表示: “ 解压缩Linux ...完成,启动内核”
printk 不起作用,(猜想初始化未完成)。 幸运的是,我板上有一些LED,因此我尝试使用它们并跟踪代码。 内核似乎无法启用MMU:
/arch/arm/kernel/head.S:
.
.
ENTRY(__turn_mmu_on)
mov r0, r0
instr_sync
mcr p15, 0, r0, c1, c0, 0
mrc p15, 0, r3, c0, c0, 0
instr_sync
mov r3, r3
mov r3, r13
ret r3
__turn_on_mmu_end
ENDPROC(__turn_mmu_on)`enter code here`
...
那些mcr和mrc是我可以在它们之前而不是之后切换GPIO的地方!
我应该添加:要切换到GPIO,我要在它们之前使用物理地址,然后在之后使用虚拟地址。(我还测试了物理添加) 物理地址:例如0x0209c000-> gpio数据寄存器 哪个虚拟地址是:0xf429c000(仅在iMX平台中)
在启动内核之前,我也禁用了I / D缓存。 不知道如何禁用MMU,但根据u-boot似乎已禁用。
请帮助我找到解决方案。 谢谢 瓦希德(Vahid)