科创园

科创园地,分享技术知识,为科技助力发展,贡献一己之力。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年4月17日

摘要: 下面结合移植uboot到 s3c2440来分析如何改写相关的uboot源码(上节已经给出uboot源码,可以参考)根据cpu/arm920t/u-boot.lds中指定的连接方式: 看一下uboot.lds文件,在board/smdk2410目录下面,uboot.lds是告诉编译器这些段改怎么划分,GUN编译过的段,最基本的三个段是RO,RW,ZI,RO表示只读,对应于具体的指代码段,RW是数据段,ZI是归零段,就是全局变量的那段。Uboot代码这么多,如何保证start.s会第一个执行,编译在最开始呢?就是通过uboot.lds链接文件进行OUTPUT_FORMAT("elf32- 阅读全文

posted @ 2012-04-17 21:57 科创园 阅读(4143) 评论(0) 推荐(0) 编辑

摘要: 还记得上节中,u-boot.lds文件连接的内容吗??代码段 数据段 命令段 bss段下面来看第一部分:代码段,对应于uboot的第一阶段 start.S文件附上代码:#include <config.h>#include <version.h>/* ************************************************************************* * * Jump vector table as in table 3.1 in [1] * ***************************************** 阅读全文

posted @ 2012-04-17 21:41 科创园 阅读(696) 评论(0) 推荐(0) 编辑

摘要: 首先来回顾一下上节,主要介绍了uboot的第一个文件Makefile,注意点有哪两个呢?第一:交叉编译第二:配置下面主要分析第二个文件:u-boot.lds先看源码:*/OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/OUTPUT_ARCH(arm)ENTRY(_start) 阅读全文

posted @ 2012-04-17 21:02 科创园 阅读(857) 评论(0) 推荐(0) 编辑

摘要: B跳转指令是代码位置无关的,经过汇编后会替换为当前PC值加(减)一个修正值,不管这条指令是在哪一个地址执行,都能跳转到指定的位置。B只能在当前PC的32M范围内跳转,LDR只能在当前PC的4KB(0xfff范围)跳转。LDR PC,=xxx指令将向PC直接装载一个标号xxx的值,但标号经过编译后将被替换为一个与RO相对应的值,这样无论指令在何处执行都能跳转到一个指定的位置。 归纳如下:(1) b step1 :b跳转指令是相对跳转,依赖当前PC的值,偏移量是通过该指令本身的bit[23:0]算出来的,这使得使用b指令的程序不依赖于要跳到的代码的位置(位置无关码),只看指令本身。(2) ldr 阅读全文

posted @ 2012-04-17 19:13 科创园 阅读(3976) 评论(0) 推荐(0) 编辑

摘要: 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐.其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次 阅读全文

posted @ 2012-04-17 09:26 科创园 阅读(708) 评论(0) 推荐(0) 编辑