转载地址:http://blog.sina.com.cn/s/blog_4a3946360102wnaj.html

最简单的bootloader的编写步骤:
1. 初始化硬件:关看门狗、设置时钟、设置SDRAM、初始化NAND FLASH
2. 如果bootloader比较大,要把它重定位到SDRAM
3. 把内核从NAND FLASH读到SDRAM
4. 设置"要传给内核的参数"
5. 跳转执行内核

地址的确定:
mov r0, #0       //传参数
ldr r1, =_start  //这个是链接地址即就是第一个标号
ldr r2, =__bss_start//
sub r2, r2, r1
bl copy_code_to_sdram

下面是从以下博客摘录

http://ackerman.iteye.com/blog/796754

http://sdnydubing.blog.163.com/blog/static/13747057020112904958830/

解释:.globl _start
.globl指示告诉汇编器,_start这个符号要被链接器用到,所以要在目标文件的符号表中标记它是一个全局符号(在第 5.1 节 “目标文件”详细解释)。
_start就像C程序的main函数一样特殊,是整个程序的入口,链接器在链接时会查找目标文件中的_start符号代表的地址,把它设置为整个程序的入口地址,
所以每个汇编程序都要提供一个_start符号并且用.globl声明。如果一个符号没有用.globl声明,就表示这个符号不会被链接器用到。

感觉一定要理解一些基本的概念,然后在看懂汇编的基础上,再分析uboot的流程。

1.关于汇编的语法
这里有两套汇编的语法:分为ARM公司的标准ARM汇编语言和GNU对ARM支持的GNU ARM汇编。ARM标准汇编语言即ARM公司的开发工具ADS里用的汇编语言;GNU汇编即在Linux下用GCC编译的汇编。两者语法有少许差异。因此,通常我们下载的LINUX下的ARM接口代码放到ADS下是不能编译通过的,需要进行少许修改。

GNU AS语法即AT&T汇编语法,uboot用到的语法。

2.标签的含义
 

的内容(_start)装载到r2中。
As代码  
ldr r2, _armboot_start  
这样做的目的是因为LDR指令的格式为:LDR{条件}    Rd, <地址>。

3..word 0x0badc0de
含义:保留一个字,初始化一下。实际的值应该在运行时计算出来。(badcode吗,呵呵)。

arm汇编标号globl和word解释相关推荐

  1. arm汇编标号globel和word解释

    bootloader的目标:启动内核   1.从Flash上把内核读入内存       a.能读Flash       b.初始化内存 时钟 其他   2.启动       a.设置参数       ...

  2. ARM汇编伪指令 .word

    ARM汇编伪指令 .word 经常碰到那些以"."打头的一些令人头疼的伪指令,  至于.globl _start .balign .align .data .text等等就算了,最 ...

  3. 伪指令相当于c语言的什么,ARM汇编中关于“.word”伪指令的概念(转)

    PS:在u-boot源码时遇到_armboot_start._bss_start等这些变量,不知道指向什么地址,于是查了一下,弄清了ARM汇编中".word"这个伪指令是什么意思了 ...

  4. GUN ARM汇编中标号的引用在汇编和C语言中区别(monitor_flash_len = _bss_start - _armboot_start;)

    u-boot/cpu/xx/start.S中: _TEXT_BASE:  .word TEXT_BASE /*uboot映像在SDRAM中的重定位地址,我设置为0xa170 0000 */ .glob ...

  5. ARM学习-GNU ARM汇编

    目录 1.GNU汇编语言语句格式 2.汇编程序中的标号symbol(或label) 3.GNU汇编程序中的分段 3.1 .section伪操作 3.2 汇编系统预定义的段名 4.GNU汇编语言定义入口 ...

  6. GNU ARM汇编伪操作(Directives) 命令集

    本文是原创,转载请注明出处 本文链接:http://blog.sina.com.cn/s/blog_574d08530100hzie.html 1.符号定义伪操作 操作符      语法格式      ...

  7. GNU ARM 汇编指令[转载]

    http://blog.sina.com.cn/s/blog_59b189220100au1k.html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程 ...

  8. 操作符指令 - ARM汇编指令(二)

    ARM包含6种重要的数据计算处理指令 数据处理指令格式与条件码 条件码 ARM汇编特点3:指令后缀 同一指令经常附带不同后缀,变成不同的指令.经常使用的后缀有: B(byte)功能不变,操作长度变为8 ...

  9. Linux下ARM汇编教程

    转载:http://blog.csdn.net/denlee/article/details/2501182 第一部分 Linux下ARM汇编语法 尽管在Linux下使用C或C++编写程序很方便,但汇 ...

最新文章

  1. 基于单目的3D人体姿态估计
  2. 程序员,不要急于学习编程语言,先学会如何解决问题
  3. 项目调试之小工具---文件名替换
  4. ajax url参数中文乱码解决
  5. python sendto函数返回值_有返回值的函数amp;闭包(python)
  6. 线性表的顺序存储结构之顺序表类的实现_Java
  7. [html] 说说你对html中的置换元素和非置换元素的理解
  8. cortex系列处理器排行_ARM实时处理器Cortex-R8介绍_Cortex-R系列处理器盘点
  9. uploadify一次上传多个图片:效果展示
  10. 关于5G你所需要知道的一切
  11. Facebook vs Chrome 关公秦琼的未来之战,互联网营销
  12. 【框架设计】泛型的应用
  13. 2022JAVA面试题附答案(长期更新)
  14. 昨天晚上我们组到龙华苹果园附近的“东北人“吃东北菜
  15. 常用Array对象方法详解(微信小程序)
  16. php dingo和jwt,三、Laravel5.4+Dingo+JWT 开发API
  17. 测绘资质高性能数据服务器,测绘资质分级标准2020年
  18. joycon手柄拆解_任天堂Switch手柄腕带勿装反 取下需技巧
  19. 独立游戏——《爱与正义》准备开工啦!
  20. 自动化脚本Cron工具(MAC和Linux系统)

热门文章

  1. 计算机网络课程设计-Socket网络通信(C++, MacOS)
  2. 项目Demo —— socket下载器
  3. c语言球球半径,C/C++编程笔记:C语言开发球球大作战(源码分享),你想试试吗?...
  4. LSP劫持与网络数据转发代理服务器的心得笔记
  5. 共享单车登录显示服务器未响应,ofo共享单车出故障了吗?ofo共享单车无法登陆、连接不上、无法结算怎么回事?[图]...
  6. PHP商城笔记137 —— 商城项目知识点
  7. Arduino的智能语音输入实现——Arduino与LU-ASR01的连接
  8. BITTER(蔓灵花)针对巴基斯坦和沙特阿拉伯发起了一波攻击
  9. Unity Particle System 粒子系统简单介绍
  10. 今天吃什么随机网页_今天吃什么?周末教你做衢州鸭头,便宜、干净又美味