
u-boot
chenbang110
学习是最快乐的事
展开
-
uboot分析之u-boot.lds
//下面是Uboot/board/QQ2440/u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/ /*指定输出可执行文件是elf格式,32位ARM指令,小端*/ O转载 2012-07-30 22:05:16 · 1191 阅读 · 0 评论 -
uboot的两个stage
大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。 1、Stage1 start.S代码结构 u-boot的stage1代码通常放在start.S文件中,他用汇转载 2012-07-30 20:24:31 · 1181 阅读 · 0 评论 -
uboot.lds分段的分析
gcc等编译器内置有缺省的连接脚本。如果采用缺省脚本,则生成的目标代码需要操作系统才能加载运行。为了能在嵌入式系统上直接运行,需要编写自己的连接脚本文件。编写连接脚本,首先要对目标文件的格式有一定了解。GNU编译器生成的目标文件缺省为elf格式。elf文件由若干段(section)组成,如不特殊指明,由C源程序生成的目标代码中包含如下段:.text(正文段)包含程序的指令代码;.data(数据段)转载 2012-07-30 22:10:02 · 957 阅读 · 0 评论 -
为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。 而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图来解释一下,为何要初始化堆栈,即: 为何C语言的函数调转载 2012-07-31 08:14:10 · 1307 阅读 · 0 评论 -
DM365 u-boot 启动分析
第一阶段:汇编语言启动 先看u-boot/board/davinci/dm365_ipnc/下的文件。 u-boot.lds OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . =转载 2013-02-21 08:59:39 · 771 阅读 · 0 评论 -
uboot 与系统内核中 MTD分区的关系
uboot 与系统内核中 MTD分区的关系: 分区只是内核的概念,就是说A~B地址放内核,C~D地址放文件系统,等等。 1:在内核MTD中可以定义分区A~B,C~D。。。。。。并且以绝对的地址赋上值。 bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统。。。这些起始地址在MTD的分区信息中能找到。 bootloader对分区的转载 2012-11-19 08:16:40 · 699 阅读 · 0 评论 -
bootargs参数意义
U-boot的环境变量值得注意的有两个: bootcmd 和bootargs。 u-bootcmd 前面有说过bootcmd是自动启动时默认执行的一些命令,因此你可以在当前环境中定义各种不同配置,不同环境的参数设置,然后设置bootcmd为你经常使用的那种参数。 u-bootargs bootargs是环境变量中的重中之重,甚至可以说整个环境变量都是围绕着bootargs来转载 2013-04-07 00:46:35 · 955 阅读 · 0 评论 -
U-Boot启动过程完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 Ø 设置好栈 Ø 跳转到第二阶段代码入口 (2)第二阶段的功能 Ø 初始化本阶段使用的硬件设备 Ø 检测系统内存映射 Ø 将内核从Fla转载 2013-04-12 10:07:55 · 673 阅读 · 0 评论