码迷,mamicode.com
首页 > 其他好文 > 详细

09课第3节u-boot分析源码第1阶段

时间:2015-05-01 00:31:13      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

一般来说,uboot会干这几件事; 

1:  关开门狗

2:初开始时钟,PLL倍频。上电的时候,是以XTAL的12M运行的运行的,然后你要提高频率,三星2440能以最大400MHZ运行

3:初开始化内存,SDRAM或DDR(2440不支持DDR ,ARM11可以);

4:从NANDfalsh里面把内核读出来,放到SDRAM里面去,然后调转到SDRAM运行; uboot放到SDRAM哪里呢?这个是链接脚本决定的;

     比如现在我放是的链接地址是0x33f80000 ; 那什么又是链接地址,就是程序运行时,这个程序应该位于哪个地址;比如我放在0x33f80000;

     程序调转过去; 你的UBOOT读出来后必须拷贝到0x33f80000,假如不在这个地址会发生什么情况?

     情况会出错嘛,因为你程序里面的全局变量,在编译的时候地址已经确定下来了;

     比如你在uboot里面定义了一个变量a=1;那里a的基地址是0x33f80000+某个偏移,这个偏移是由编译确定的;假如是0x100;那么你的a的地址就是0x33f80100;

     1就存放在0x33f80100这个地址里面;假如你的UBOOT地址不是放在这个链接地址0x33f80100; 你放在0x31000000;那么你的a的地址就是0x31000100;你去读

     a的值就是去这个0x31000100这个地址去读,肯定读不到1,因为1在0x33f80100这个地址嘛,所以会出错;

5:设置栈;所谓栈;就是CPU里面的SP寄存器,你设置栈,就是让这个SP指向内存的某个地方;

     你问我为什么设置栈,我擦,调用C语言你肯定要设置栈啊,不然你的C语言定义的一些局部变量;放在哪里呢,是吧

     然后设置好了后咧,就是C语言程序了(前面都是汇编,称为UBOOT的第一阶段);C语言是第2阶段;那干了什么事;

     主要是干了从nandflash read 读出内核,然后启动;

6:一些其他功能,主要是开发阶段需要用到的,比如USB (你要用USB uboot自己更新自己,下载内核,下载根文件系统),网卡,你要调试打印一些信息,那就是串口了

    现在直接分析代码,从第一个文件开始分析 ,第1个文件是哪个?就是CPU/ARM920T/start.s

 

09课第3节u-boot分析源码第1阶段

标签:

原文地址:http://www.cnblogs.com/zhanglei2015/p/4470166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!