zImage的组成,通过arch/arm/kernel/vmlinux.lds可以看到,代码段引领,起始地址是0xc0008000,当然也可以从System.map文件中得到同样的结论。
一般情况下,uboot会把zImage加载到0x8000内存地址,并跳转到0x8000去执行,在初始化好页表和使能mmu之前必须保证pc不要跑到0xc0008xxx地址去, 怎么保证呢?
主要考虑两点:
1、函数
使用相对跳转指令调用子函数,你会在arch/arm/kernel/head.S函数中发现,在使能mmu之前,都是bl指令(相对跳转)
2、全局变量
一定要在使用全局变量之前,把全局变量-0xc0000000
阅读(3847) | 评论(0) | 转发(1) |