Ralink-Uboot学习
2019独角兽企业重金招聘Python工程师标准>>>
起动文件
cpu/ralink_soc/start.S
.set noreorder
默认汇编器处在reorder的模式下,该模式允许汇编器对指令进行重新排序,以避免流水线堵塞并获得更好的性能,在这种模式下,是不允许在代码中插入nop指令的。反之,在noreorder模式下,指令的顺序不会被改变也不会对代码进行任何优化。
.globl _start .text /*标记代码部分的开始*/_start:RVECENT(reset,0) /* U-boot entry point */RVECENT(reset,1) /* software reboot */
RVECENT的定义如下,标记reset入口
#define RVECENT(f,n) \
b f; nop
B跳转指令是代码位置无关的,经过汇编后会替换为当前PC值加(减)一个修正值,不管这条指令是在哪一个地址执行,都能跳转到指定的位置。
B只能在当前PC的32M范围内跳转,LDR只能在当前PC的4KB(0xfff范围)跳转。
LDR PC,=xxx指令将向PC直接装载一个标号xxx的值,但标号经过编译后将被替换为一个与RO相对应的值,这样无论指令在何处执行都能跳转到一个指定的位置。
#if defined(CONFIG_INCA_IP).word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */.word 0x00000000 /* phase of the flash */
#elif defined(CONFIG_PURPLE).word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */.word INFINEON_EBU_BOOTCFG /* EBU init code, fetched during booting */
#elseRVECENT(romReserved,2)
#endif
word expression就是在当前位置放一个word型的值,这个值就是expression
#ifdef CONFIG_PURPLE/* 0xbfc00400 */.word 0xdc870000.word 0xfca70000.word 0x20840008.word 0x20a50008.word 0x20c6ffff.word 0x14c0fffa.word 0x00000000.word 0x03e00008.word 0x00000000.word 0x00000000/* 0xbfc00428 */.word 0xdc870000.word 0xfca70000.word 0x20840008.word 0x20a50008.word 0x20c6ffff.word 0x14c0fffa.word 0x00000000.word 0x03e00008.word 0x00000000.word 0x00000000#endif /* CONFIG_PURPLE */.align 4
.align伪指令:
我们并不是第一次遇到align这个词,回想一下链接脚本一节,关键字ALIGN的作用是在链接时,迫使被修饰的内容对齐。这里的.align与ALIGN关键字意义相同,也能够更新位置计数器的值,使代码对齐到某一边界。但此处需要强调的是,该伪指令针对ARM汇编的用法与其他体系结构稍有不同。例如,在m68k、sparc以及运行有ELF文件格式的x86结构中,.align后边的数字直接代表了要对齐的字节数,比如.align 8表示此处代码会按照8字节边界对齐,而在ARM体系结构下,.align后边的数是以幂的形式出现的,正如代码2-5中那样,.align 2表示此处是以4字节对齐的。
为什么需要字节对齐?计算机组成原理教导我们这样有助于加快计算机的取数速度,否则就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本数据类型(int等)都位于能被 4整除的地址上,以此类推。这样,两个数中间就可能需要加入填充字节,所以整个结构体的sizeof值就增长了。
汇编程序结构框架
汇编源程序代码本质上是文本文件。由数据声明、代码段 两部分组成。程序文件应该以.s结尾,以在Spim软件中进行模拟。
数据声明部分
在源代码中,数据声明部分以 .data开始。声明了在代码中使用的变量的名字。同时,也在主存(RAM)中创建了对应的空间。
程序代码部分
在源代码中,程序代码部分以 .text开始。这部分包含了由指令构成的程序功能代码。
代码以main: 函数开始。main的结束点应该调用exit system call,参见后文有关system call 的介绍。
or $1,$0, $0or $2,$0, $0or $3,$0, $0or $4,$0, $0or $5,$0, $0or $6,$0, $0or $7,$0, $0or $8,$0, $0or $9,$0, $0or $10,$0, $0or $11,$0, $0or $12,$0, $0or $13,$0, $0or $14,$0, $0or $15,$0, $0or $16,$0, $0or $17,$0, $0or $18,$0, $0or $19,$0, $0or $20,$0, $0
or $des,$src1, $src2即 $des=$src1+$src2
常用MIPS指令集及格式:
http://blog.chinaunix.net/uid-26941022-id-3319288.html
MIPS 指令集(共 31条) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
注 意:因为MIPS16只有16个16位的寄存器,所以JAL指令中$31改成$15, 所有立即数均无需扩展,LUI指令直接就是将立即数付给RT寄存器。 |
转载于:https://my.oschina.net/yuyang/blog/287010
Ralink-Uboot学习相关推荐
- UBOOT学习1——UBOOT移植流程
UBOOT学习1--UBOOT移植流程 1.创建板级目录 在board/ 目录下创建目录更改文件(使用imx6ull) (1)创建板级.c文件 (2)更改镜像配置文件imximage.cfg 2.创建 ...
- uboot和系统移植-第1部分-2.1 uboot学习前传
uboot和系统移植-第1部分-2.1 uboot学习前传 第一部分.章节目录 2.1.1. 为什么要有uboot (1)uboot最主要作用是用来启动操作系统内核.因为操作系统内核本身不能自己启动自 ...
- OK6410开发板Uboot学习总结----(三)从SD卡启动分析
前面讲了Uboot启动流程和如何修改调试串口,相信大家对Uboot已经有了初步的了解,今天来进行更深一点的分析.上篇文章 OK6410开发板Uboot学习总结----(二)修改调试打印串口 遗留一个问 ...
- f1c100s入坑笔记(4)-uboot学习stepbystep-1
一. 分析uboot之前先简单学习一下Lin参考下的汇编指令,参考 http://blog.sina.com.cn/s/blog_59b189220100au1k.html 1. Linux汇编与wi ...
- Uboot和系统移植----------(1)uboot学习前传
Author: 想文艺一点的程序员 自动化专业 工科男 再坚持一点,再自律一点 CSDN@想文艺一点的程序员 来自朱有鹏嵌入式的学习笔记 文章目录 一.为什么要有uboot 1.计算机系统的主要部件 ...
- U-BOOT学习之2014.4版Uboot启动流程分析
一.前言 老大给我布置了一个任务:某某项目uboot开发之usb增强ic驱动. 不知道大家看到这个任务懵不懵,反正我最开始是蒙的.后来又问了一下,才明白到底要做啥. 任务是这样的:因为这个项目的usb ...
- uboot学习预备知识
为什么要有uboot 计算机系统的主要部件 (1)计算机系统就是有CPU来做核心进行运行的系统.典型的计算机系统有:PC机(台式机+笔记本).嵌入式设备(手机.平板电脑.游戏机).单片机(家用电器像电 ...
- 1 uboot学习前传
2.1.1.为什么要有uboot 2.1.1.1.计算机系统的主要部件 (1)计算机系统就是有CPU来做核心进行运行的系统.典型的计算机系统有:PC机(台式机+笔记本).嵌入式设备(手机.平板电脑.游 ...
- uboot学习 0.1
1.为什么要有uboot uboot的使用,和相关应用 环境变量和命令得连接 ddr和flash如何使用Uboot来管理, Uboot是如何来引导操作系统的? uboot是来启动操作系统内核的,操作系 ...
- uboot学习之BL3的流程
BL2的最后通过汇编调用了board_init_r函数,此时进入BL3的阶段,此时的主要工作: 这一阶段涉及的文件及任务如下 arch/arm/lib/board.c 1. bo ...
最新文章
- SQL优化的一些知识
- C#教程01:关于C#
- 显示部分数据标签_长春市农贸市场监测数据显示:粮油和水果价格平稳,部分副食品价格小幅波动...
- 上厕所时间超长也能被开除?法院:超出正常生理需求范围!
- [.net基础]访问修饰符
- Uniapp 微信小程序登陆页面
- wps2005导致图标全无解决方案
- 我的世界java版版本号_我的世界JAVA版1.17版本内容预览
- 科研入门必备知识之论文种类--Journal、magazine、transactions、proceedings
- Error: rendered manifests contain a resource that already exists.
- 泰坦尼克号Python数据分析
- 创建一个8*8的国际象棋棋盘(黑块为0,白块为1)
- C. NEKO's Maze Game
- Java集成流行的打印插件lodop
- 【爬树合集】难啃的骨头——红黑树
- Mysql聚簇索引和非聚簇索引原理(数据库)
- 数据结构-----引论
- Incaseformat 蠕虫病毒威胁通告
- 南邮《算法分析与设计A》2018-2019学年第一学期期末考试回忆
- 【资源下载】动手为王 - 整合迁移与数据恢复实践