Chinaunix首页 | 论坛 | 博客
  • 博客访问: 520370
  • 博文数量: 52
  • 博客积分: 1223
  • 博客等级: 少尉
  • 技术积分: 751
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-23 21:32
文章分类

全部博文(52)

文章存档

2016年(1)

2015年(5)

2013年(1)

2012年(45)

分类: LINUX

2012-09-25 16:32:52

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) |
给主人留下些什么吧!~~