- 浏览: 75541 次
- 性别:
- 来自: 北京
感觉一定要理解一些基本的概念,然后在看懂汇编的基础上,再分析uboot的流程。
1.关于汇编的语法
这里有两套汇编的语法:分为ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编。ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言;GNU汇编即在LINUX下用GCC编译的汇编。两者语法有少许差异。因此,通常我们下载的LINUX下的ARM接口代码放到ADS下是不能编译通过的,需要进行少许修改。
GNU AS语法即AT&T汇编语法,uboot用到的语法。
2.标签的含义
.globl _start _start: b reset
标签就是在某行程序代码前作一个标记,标签代表的是这行代码的地址。
.globl _armboot_start _armboot_start: .word _start
.word expression就是在当前位置放一个word型的值,这个值就是expression ,此处的含义就是建立一个全局标签_armboot_start,在这个位置上放置_start的值(可以这样理解,_armboot_start是一个地址,这个地址中的内容是_start),则下面的语句会把地址_armboot_start处的内容(_start)装载到r2中。
ldr r2, _armboot_start
这样做的目的是因为LDR指令的格式为:LDR{条件} Rd, <地址>。
3..word 0x0badc0de
含义:保留一个字,初始化一下。实际的值应该在运行时计算出来。(badcode吗,呵呵)。
4.关于判断是否拷贝到ram
如果是debug下,uboot直接运行在ram中,从而得到的_start值和TEXT_BASE是相等的,不需要拷贝。如果从flash启动,_start为0x0,TEXT_BASE是sdram的地址,二者是不相等的,需要拷贝。(TQ2440的SDRAM为64M,bank6,地址空间为0x30000000-0x34000000,TEXT_BASE设置为0x33D000000,即0x33D00000-0x34000000为uboot使用的空间+bss和其他的空间)。
见映射图
5.汇编中调用c函数
遵循ATPCS(ARM-THUMB procedure call standard)标准。
发表评论
-
排序算法---计数排序
2011-11-27 14:57 611#include <stdio.h> vo ... -
排序算法---归并排序
2011-11-26 19:33 748#include <stdio.h> vo ... -
排序算法---交换排序(冒泡排序、快速排序)
2011-11-26 19:32 702#include <stdio.h> vo ... -
排序算法---选择排序(简单插入排序、堆排序)
2011-11-26 19:31 649#include <stdio.h> vo ... -
排序算法---插入排序(简单排序、shell排序)
2011-11-26 19:29 650#include <stdio.h> vo ... -
删除字符串中的特定字符和重复字符
2011-11-26 13:45 666#include <stdio.h> vo ... -
Linux编程-多线程、同步和互斥(转载)
2011-11-14 15:27 1209http://www.cnblogs.com/skynet/a ... -
寻找字符串中的最大数字子串
2011-09-22 17:17 1523#include <stdio.h> int f ... -
删除子字符串
2011-09-21 15:27 605#include <stdio.h> #incl ... -
c语言随机数
2011-09-18 17:15 687#include <stdio.h> #i ... -
带头结点有序单链表的合并
2011-09-08 14:21 1187typedef int Item; typedef s ... -
链表逆序的递归/非递归算法
2011-09-01 23:37 1414/** *链表逆序的递归/非递归算法 */ # ... -
递归算法---字符串---全/部分组合和全排列
2011-08-30 23:01 1222#include <stdio.h> #i ... -
递归算法---0-1背包问题(面试宝典)
2011-08-28 21:11 1903/** *正整数n,m,从数列1、2、3、...、n中随 ... -
递归算法---字符串全组合(面试宝典)
2011-08-28 17:24 1259/** *求一字符串所有字串的组合 */ #i ... -
递归算法---求解多元一次方程
2011-08-28 10:38 1898/** * 求解x1+x2+x3+...+x10 = ... -
(zz)关于类的sizeof
2011-08-27 18:16 589http://blog.sina.com.cn/s/blog_ ... -
(zz)结构体字节对齐原则
2011-08-27 17:53 1579结构体默认的字节对齐一般满足三个准则: 结构体变量的首 ... -
list.h from linux-2.4
2011-08-25 09:59 607#ifndef _LIST_H_ #define _L ... -
The C Programming Lang (K&R) hash table
2011-08-25 09:52 936hash.h #include <stdio.h ...
相关推荐
在ok2109s5pv210)上移植uboot,现在这个版本刚刚能够启动...买了块飞凌的ok210开发板,s5pv210的,但是nandflash居然不开源,特别痛恨,于是自己准备从uboot到linux,所有的东西重新写,所有的东西均开源,方便大家学习
【uboot阅读笔记】 uboot,全称是U-Boot,是一个开源的、跨平台的嵌入式系统启动加载器,广泛应用于各种嵌入式硬件平台。本文将深入探讨uboot的核心概念,主要包括remap和relocate两个关键部分,帮助读者理解uboot...
### UBOOT源码阅读笔记知识点解析 #### 一、UBOOT简介 UBOOT(Universal Boot Loader)是一款开源的Bootloader程序,广泛应用于嵌入式系统中。它支持多种处理器架构和操作系统,具备高度的可移植性和灵活性。通过...
UBOOT ppt
这涉及到阅读UBoot源代码,理解其架构和工作原理,使用交叉编译工具链进行编译。调试时,可以利用串口通信、JTAG接口或远程网络连接来进行。 6. **安全性考虑** 在嵌入式系统中,UBoot的安全性至关重要。为了防止...
在UBoot 2014-1中,可能会增加或优化一些命令,如网络相关的命令,提升远程固件更新的能力。 5. **启动流程** UBoot的启动过程通常分为几个阶段:ROM Bootloader(如SPL,Secondary Program Loader)、硬件初始化...
6. **其他功能**:uboot 还支持一些额外的功能,比如通过串口进行调试、更新固件、启动备用操作系统等,这些都是通过 uboot 提供的命令行接口实现的。 对于“极1-uboot.zip”这样的压缩包,通常包含的是针对特定...
3. **uBoot结构**:uBoot由两部分组成,Stage1和Stage2。Stage1通常是针对特定硬件的汇编语言代码,负责最基本的硬件初始化;Stage2是C语言编写,完成更复杂的任务,如加载Stage2到内存,启动内核。 4. **ARM平台**...
U-Boot 的设计分为两个阶段:Stage1 和 Stage2。 #### Stage1:Start.S 代码结构 Stage1 通常用汇编语言编写,主要负责处理器级别的初始化工作,这部分代码高度依赖于具体的 CPU 架构。Stage1 的主要任务包括: 1...
Uboot启动过程分析,学习,需要移植uboot的可以看下
3. **BL1(Boot Loader Stage 1)**:在嵌入式系统的启动过程中,BL1是第一阶段的Bootloader,通常由处理器的固件或硬件启动,其任务是初始化最小的系统环境,然后加载更复杂的第二阶段Bootloader(如BL2或SPL)。...
除此之外,本教程还会涉及一些高级主题,如UBoot的固件升级机制和故障恢复策略。这些内容对于维护和更新设备的固件,以及在出现问题时恢复系统至正常状态至关重要。 总的来说,《UBoot调试指南》为VxWorks开发者...
在`start_armboot`函数中,Uboot还会执行一些其他的初始化操作,例如初始化串口、初始化时钟等。这些操作都是Uboot启动过程的重要组成部分。 Uboot启动流程的重要性 Uboot启动流程是一个非常重要的过程,它决定了...
最后,文章中提到了uboot的一些版本信息和版权说明,例如u-boot-1.1.6版本,以及该版本的版权声明和许可证信息,说明了uboot是遵循GPL许可的自由软件。 通过对uboot源代码的解析,我们可以深入理解其启动流程、环境...
1. 复位向量:Uboot 将从 Reset 向量开始执行,Reset 向量是 CPU 的起始地址。 2. 初始化寄存器:Uboot 将初始化寄存器,包括 CPSR、SVC 模式等。 3. 关闭看门狗:Uboot 将关闭看门狗,以防止 CPU 在启动过程中出现...
1. **硬件初始化**:UBoot的首要任务是对Tiny6410的硬件资源进行初始化,包括CPU、内存控制器、中断控制器、时钟系统等。这一步骤确保了后续操作的安全性和稳定性。 2. **内存管理**:UBoot需要配置内存映射,确保...
【小米AX3600 UBOOT】是一款专为小米AX3600路由器设计的固件组件,主要涉及路由器的基础启动部分,即UBOOT(统一 boot loader)。UBOOT是嵌入式系统中的一种开放源码的引导加载程序,它在操作系统内核运行之前负责...
代码解析部分是通过阅读UBOOT源码来理解各个阶段是如何实现的。如上文所提,_start标签是UBOOT入口点的开始,reset标签是复位异常处理的开始,cpu_init_crit函数则在复位异常处理后被调用以执行CPU初始化。 此外,...
1. **移植环境准备**:移植uboot首先需要搭建交叉编译环境,包括选择合适的GCC交叉编译工具链,设置环境变量,确保能正确编译针对目标硬件的代码。 2. **理解硬件平台**:imx287和s3c2440是两种不同的处理器芯片。...
uboot的启动流程分为两个主要阶段:Stage1和Stage2。 #### Stage1 - start.S代码结构 Stage1主要由start.S文件中的汇编代码构成,负责底层硬件初始化和设置: 1. **定义入口**:确保程序的全局入口位于ROM的0x0...