[国嵌笔记][030][U-Boot工作流程分析]
uboot工作流程分析
程序入口
1.打开顶层目录的Makefile,找到目标smdk2440_config的命令中的第三项(smdk2440)
2.进入目录board/samsung/smdk2440/,找到u-boot.lds文件。uboot的链接都是由这个链接器脚本来控制的
3.打开u-boot.lds文件,找到.text(代码段)的第一个文件cup/s3c24xx/start.o,该文件就是uboot的入口代码。链接器脚本中的ENTRY用来表明整个程序的入口,那么标号_start就是整个程序的入口
4.第一阶段入口在cup/s3c24xx/start.S文件的_start处
5.第二阶段入口在lib_arm/board.c文件的start_armboot处
第一阶段(BL1)代码分析
1.打开source insight工程,并打开start.S文件,[shift]+F8高亮显示
2.分析代码是只关心做了什么,不关怎么做。可以通过注释找到做了什么。边分析边通过思维导图记录下来。
3.通过make smdk2440_config执行相应的配置项
4.执行make,编译uboot。在顶层目录下会产生u-boot(elf)文件和u-boot.bin(二进制)文件
5.通过反汇编u-boot(elf)文件可以查看相关信息
arm-linux-objdump -D -S u-boot >dump
搜索start_armboot可以找到start_armboot的地址为0x30001100, 在内存中。说明在这个时候BL1会跳转到内存中执行BL2
6.打开顶层目录下的config.mk文件,config.mk文件会由Makefile 包含进去。搜索TEXT_BASE(代码段的基地址),会找到 -T(LDSCRIPT) -Ttext $(TEXT_BASE) 表示指定链接器脚本的地址由TEXT_BASE覆盖掉。TEXT_BASE变量在boot/samsung/smdk2440/config.mk文件中定义,该值为0x30000000
7.b指令相对跳转,只会在SteppingStone中跳转,不会跳转到内存中。ldr pc, start_armboot会修改pc指针的值,使跳转到内存中运行
8.2440、6410和210的第二阶段执行的代码都相同
9.2440和6410的BL1和BL2产生的是一个bin文件,210的BL1和BL2产生的是两个bin文件
10.210的BL1的链接脚本位于spl/u-boot-spl.lds。入口程序在arch/arm/cpu/armv7/start.S
11.BL1会把BL2复制到内存中的0x23E00000处。BL1(16KB)与BL2之间有8KB的填空,所以BL2的地址在BL1后24KB处
12.210的BL2的链接器脚本位于arch/arm/cpu/armv7/u-boot.lds。程序入口同样在arch/arm/cpu/armv7/start.S中
2440第一阶段启动流程分析
1.设置中断向量表
2.设置处理器为svc模式
3.刷新I/D cache
4.关闭mmu和cache
5.关闭看门狗
6.关闭所有中断
7.初始化时钟
8.初始化串口
9.简单初始化nand flash
10.内存初始化
11.复制nand flash中的bl2到内存中
12.设置堆栈,为C语言做准备
13.清除bss段
14.跳转到BL2
2440第二阶段启动流程分析
1.分析时,只关心硬件的初始化,不关心软件的初始化
2.初始化串口
3.初始化LCD
4.初始化网卡
5.初始化LED
6.执行用户输入的命令

[国嵌笔记][030][U-Boot工作流程分析]的更多相关文章
- [国嵌笔记][029][ARM处理器启动流程分析v2]
2440启动流程 启动方式:nor flash启动.nand flash启动 地址布局: 选择nor flash启动时,SROM(nor flash)地址为0x00000000 选择nand flas ...
- [国嵌笔记][021-022][ARM处理器工作模式]
[ARM处理器工作模式] 处理器工作模式 1.User(urs):用户模式,linux应用程序运行在用户模式 2.FIQ(fiq):快速中断模式 3.IRQ(irq):中断模式 4.Superviso ...
- [国嵌笔记][008-009][远程登录Linux]
[国嵌笔记][008][远程登录Linux] 1.windows与Linux能够相互ping通 2.关闭Linux防火墙 /etc/init.d/iptables stop 3.通过ssh(字符界面) ...
- u-boot分析(二)----工作流程分析
u-boot分析(二) 由于这两天家里有点事,所以耽误了点时间,没有按时更新,今天我首先要跟大家说说我对于u-boot分析的整体的思路,然后呢我以后的博客会按照这个内容更新,希望大家关注. 言归正传, ...
- 【转】Hostapd工作流程分析
[转]Hostapd工作流程分析 转自:http://blog.chinaunix.net/uid-30081165-id-5290531.html Hostapd是一个运行在用户态的守护进程,可以通 ...
- 第2章 rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...
- rsync算法原理和工作流程分析
本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...
- nodejs的Express框架源码分析、工作流程分析
nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...
- Mysql工作流程分析
Mysql工作流程图 工作流程分析 1. 所有的用户连接请求都先发往连接管理器 2. 连接管理器 (1)一直处于侦听状态 (2)用于侦听用户请求 3. 线程管理器 (1)因为每个用户 ...
随机推荐
- C#序列化总结
贴一下自己序列化的代码: public class XMLUtil { /// <summary> /// XML & Datacontract Serialize & D ...
- 文件上传之伪Ajax方式上传
From: <由 Windows Internet Explorer 8 保存> Subject: =?gb2312?B?zsS8/snPtKvWrs6xQWpheLe9yr3Jz7SrI ...
- DEDECMS最新5.7版在Windows下的Memcache安装
一,织梦后台后台设置进入系统后台,在[系统基本参数]下面的"性能选项"卡当中,关于memcache进行如下配置: cfg_memcache_enable : 是否启用memcach ...
- SecureCRT 历史版本下载
最近在使用SecureCRT时,存在网络卡顿现象,然而.同事的SecureCRT工具却一点都不卡,我的SecureCRT是比较老的版本6,同事使用的是版本7,所以就更换下自己的SecureCRT版本. ...
- 理解css伪类和伪元素
伪类就是可以通过直接添加一个类样式达到同等效果,而伪元素,则需要先添加一个元素,然后在元素上添加样式才能达到同等效果 伪类 :active 向被激活的元素添加样式. :focus 向拥有键盘输入焦点的 ...
- eclipse环境下日志打印输出
1.先将jdk配置一下 选Preferences---- 找到自己的jdk所在的位置 2.配置Tomcat window-----preferences------- 找到自己的tomcat所在位置 ...
- python3基础(二)
loops循环语句 一 if语句,if语句配合else使用,可以没有else. 单分支if语句 age = input('Age:') password = '67' if age == passwo ...
- android官网文档学习笔记
1.android的四大组件的了大概功能 activity:负责显示界面,和用户交互. service:运行在后台. content provider:为程序app之间的数据访问提供接口. broad ...
- 平衡树Treap模板与原理
这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么). 而平衡树在排序二叉树的 ...
- Java学习笔记4(方法)
方法和c++中的函数类似,区别在于java的方法定义不限位置,而c++中的定义在主函数后面的函数调用前要声明: 求矩形面积方法示例: public class MethodDemo{ public s ...