Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31356
  • 博文数量: 16
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 25
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-27 23:26
文章分类
文章存档

2017年(1)

2016年(2)

2015年(7)

2013年(4)

2012年(2)

我的朋友

分类: LINUX

2015-09-09 22:47:36

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



阅读(596) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~