Chinaunix首页 | 论坛 | 博客
  • 博客访问: 95056
  • 博文数量: 19
  • 博客积分: 1471
  • 博客等级: 上尉
  • 技术积分: 272
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-09 19:48
文章分类

全部博文(19)

文章存档

2011年(2)

2010年(17)

分类: LINUX

2010-12-23 12:11:57


1,uboot分为两个阶段,
1.1阶段1代码在rom上运行,栈在cache,可以运行c语言代码,但是全局和静态变量不能被赋值。

1.2阶段2代码在ram上运行,可以完全运行c语言
1.3从rom搬运到ram所有全局变量,函数的地址都发生了改变,当然栈里面的变量是不用考虑这个地址问题的,都是临时的相对地址。为了解决这个问题,uboot链接的时候使用了GOT全局偏移地址表,即全局变量地址,静态变量地址,函数地址组成的。 搬运后,表里的每一项都统一加减搬运地址的差值就可以啦。代码中对这些变量,函数的访问都是通过 gp + GOT offset 来实现的。


多核启动时候,首先是主核启动,其他核等待主核初始化。主核初始化差不多了,已经把linux内核的起始地址给每个核填充好了,通过写寄存器,唤醒从核们reset。


进入linux后,仍然是主核做初始化,start_kernel。 初始化完毕后,逐个唤醒处于忙等中的从核。linux看到的主核是uboot传给linux的参数标识出来的。

 

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

chinaunix网友2010-12-23 14:34:08

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com