[国嵌笔记][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)因为每个用户 ...
随机推荐
- ES6 函数的扩展1
1. 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,为了避免这个问题,通常需要先判断一下参数y是否被赋值,如果没有,再等于默认值. ES6允许为函数的参数设置默认值,即直接 ...
- Java企业微信开发_11_异常:java.net.UnknownHostException: qyapi.weixin.qq.com
原因: 网络原因导致 dns解析失败. 解决方案: 方案一 : 1.查看你的服务器能否ping通外网,不过不行说明你的网络出了问题. (我的情况是客户的应用服务器只能内网访问,所以是网络出问题 ...
- 每天学一点Docker(2)
容器runtime 容器runtime是容器真正运行的地方,runtime需要和操作系统kernel紧密结合,为容器提供运行环境. 比如说,java程序比作一个容器,JVM就是runtime.JVM为 ...
- 6月22日项目CodeReview问题及总结
后台代码部分 1. 枚举类的使用:当定义的某个字段有多种状态值或表示值时,可以创建一个枚举类将所有状态表示出来,并供其他使用到该字段的方法统一调用.枚举类定义可参考 '/banking-dbbp-pr ...
- .net随笔--不好归类的
1..cs .Designer.cs .resx三种文件 cs是类文件,不介绍了.Designer.cs是visual studio对cs类文件的自动生成代码的一种补充,在编辑器里用视图的方式对win ...
- ERP中自定义报表制作流程
查询制作流程 新增单表查询--查询语句设置--表格设置(列信息)--参数设置--关联设置--着色设置 报表设计需求(以差旅报销单为例) 1.制作按部门统计每个月的 报销金额并且可以关联到明细进行比对 ...
- 使用FormatMessage函数编写一个内核错误码查看器
在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以 ...
- Java JSON数据处理
比方说要处理这么 {"data":[{"salt":"","plaintext":"xiaoxu", ...
- 意外断电数据库无法启动牵扯到异步IO的参数设置
一客户机房新装的UPS不太稳定,好几次意外断电,第3次意外断电之后问题终于来了, 数据库起不来了-- 数据库的硬件环境是一台IBM DS5020存储,2台IBM X3850 X5 软件环境是Linux ...
- 五分钟学习React(三):纯HTML代码搭建React应用
上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...