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

一般来说,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

时间: 2024-10-15 10:55:56

09课第3节u-boot分析源码第1阶段的相关文章

easyloader [easyui_1.4.2] 分析源码,妙手偶得之

用easyui很久了,但是很少去看源码. 有解决不了的问题就去百度... 今日发现,easyui的源码不难懂. 而且结合 easyloader 可以非常方便的逐个研究easyui的组件. 但是, easyloader 的官方API介绍非常简略. easyloader.base = '../'; // 设置 easyui 基础目录 easyloader.load('messager', function(){ // 加载指定模块 $.messager.alert('Title', 'load ok

java分析源码-ReentrantLock

一.前言 ReentrantLock表示下面具体分析ReentrantLock源码. 二.ReentrantLock数据结构 ReentrantLock的底层是借助AbstractQueuedSynchronizer实现,所以其数据结构依附于AbstractQueuedSynchronizer的数据结构,关于AQS的数据结构,在前一篇已经介绍过,不再累赘. 三.ReentrantLock源码分析 3.1 类的继承关系 public class ReentrantLock implements L

tensorflow运行原理分析(源码)

tensorflow运行原理分析(源码)  https://pan.baidu.com/s/1GJzQg0QgS93rfsqtIMURSA 原文地址:https://www.cnblogs.com/liuzhongfeng/p/8778422.html

Spring Boot 启动源码解析系列六:执行启动方法一

1234567891011121314151617181920212223242526272829303132333435363738394041424344 public ConfigurableApplicationContext (String... args) { StopWatch stopWatch = new StopWatch(); // 开始执行,记录开始时间 stopWatch.start(); ConfigurableApplicationContext context =

Struts流程分析+源码分析

1.初始化工作 读取配置---转换器-----读取插件 当struts-config.xml配置文件加载到内存,则会创建两个map:ActionConfigs,FromBeans.这两个map都交由ModuleConfig对象管理 a.ActionConfigs的Map装载每个Action配置信息---ActionMapping b.名为FromBeans的map装载FormBean配置信息---FormBeanConfig 接收请求ActionServlet的doPost方法进行处理,调用pr

第2课 Scala面向对象彻底精通及Spark源码SparkContext,RDD阅读总结

第2课:Scala面向对象彻底精通及Spark源码阅读本期内容:1 Scala中的类.object实战详解 2 Scala中的抽象类.接口实战详解 3 综合案例及Spark源码解析 一:定义类class HiScala{private var name = "Spark" def sayName(){println(name)}def getName = name} Scala中,变量与类中的方法是同等级的,可以直接赋值给方法. scala中的get与set与Java中的get,set

Servlet-Cookie源码分析 源码环境:Tomcat8

最近在学习servlet的一些实现细节,阅读了Cookie的源码. Cookie本质上是服务器发送给客户端(主要是浏览器)的一个会话临时数据. 其源码注释文档的说明: Creates a cookie, a small amount of information sent by a servlet to a Web browser, saved by the browser, and later sent back to the server. A cookie's value can uniq

PC微信(WeChat)电脑端多开分析+源码

0x00 前言 不知道大家有没有多个微信号,我反正有一两三个. 现在电脑端微信使用频率也比较高,主要用于大文件传输,或者手机电脑文件互传等等,除了不能收红包和看朋友圈,貌似电脑端没其他毛病. 哦,还有个毛病,只能开一个微信,只能开一个,开一个,一个- 不管这些有的没的,今天的主题是,怎么样在电脑上开多个微信客户端! 0x01 分析 了解过单实例的同学,应该都知道大概是怎么实现的单开. 简单说下,大都通过判断Mutex.Event.File等等是否已经存在,存在则退出当前开启进程(说明已经有一个进

snownlp情感分析源码解析

最近发现了snownlp这个库,这个类库是专门针对中文文本进行文本挖掘的. 主要功能: 中文分词(Character-Based Generative Model) 词性标注(TnT 3-gram 隐马) 情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决) 文本分类(Naive Bayes) 转换成拼音(Trie树实现的最大匹配) 繁体转简体(Trie树实现的最大匹配) 提取文本关键词(TextRank算法) 提取文本摘要(TextRank算法) tf,id