帮助客户成功!
写在前面的话
为配合 ARM 技术交流网推出的 ARM 培训系列视频,我们编写了此教程。
本文档从 12 月 6 日一直写到 12 月 13 日,每天晚上下班写 2 小时,终于写完。
它系统地介绍了整个 u-boot 移植的过程:从 u-boot 起源开始,到代码的获取,
到系统启动工作分析,再到 flash 驱动及其他相关驱动分析,最后到 u-boot 移植
成功,进入 u-boot 命令行界面。
本移植手册面向的对象,是对 ARM 体系结构初步了解,并有一定的汇编基
础的初学者,以及 ARM 的 fans。毫不夸张地说,本教程可以使得初学者从一无
所知,直至完全掌握 u-boot 移植技术,至此,您真正地入门了!
然而,本移植手册希望达到的目的,不仅仅是 ARM 的入门。我们希望借助
u-boot 移植的过程,让大家对系统启动有一个清晰的认识,甚至能自己写出一个
boot 代码来进行项目设计。同时,我们也希望大家能对项目开发使用的 C 语言,
有更深入的掌握和认识。因为在 u-boot 源代码中,很多思路是我们原先编写小
程序中无法练习的。
——END——
☆翔子★ 于陋室
2009.12.06
ARM 技术交流网 版权所有 请勿用于商业用途 违者必究
2
帮助客户成功!
目 录
写在前面的话 ............................................................................................2
目 录.........................................................................................................3
1. u-boot介绍 .............................................................................................5
1.1 U-Boot的来源.....................................................................................................................5
1.2 U-Boot在系统中的地位.....................................................................................................5
2. U-Boot移植准备工作 ............................................................................6
2.1 U-Boot源码的获取.............................................................................................................6
2.2 U-Boot体系结构...............................................................................................................7
3. U-Boot源码分析 ....................................................................................9
3.1 源码入口的解释................................................................................................................9
3.2 stage1:启动分析 ...............................................................................................................10
3.3 stage2:C代码分析.............................................................................................................19
4. U-Boot移植过程参考 ..........................................................................22
4.1 移植准备..........................................................................................................................22
4.2 U-Boot移植过程分析.......................................................................................................22
5. U-Boot命令 ..........................................................................................32
5.1 Help命令...........................................................................................................................32
5.2 flinfo命令..........................................................................................................................34
5.3 version与date命令 ............................................................................................................35
5.4 coninfo命令 ......................................................................................................................35
5.5 printenv命令 .....................................................................................................................35
5.6 setenv命令 ........................................................................................................................36
5.7 saveenv命令......................................................................................................................36
5.8 cmp命令............................................................................................................................37
5.9 cp命令...............................................................................................................................38
5.10 mm命令 ..........................................................................................................................38
5.11 mtest命令 ........................................................................................................................39
5.12 mw命令...........................................................................................................................39
5.13 nm命令 ...........................................................................................................................40
5.14 md命令 ...........................................................................................................................40
5.15 bdinfo命令 ......................................................................................................................41
5.16 ping命令 .........................................................................................................................41
ARM 技术交流网 版权所有 请勿用于商业用途 违者必究
3
帮助客户成功!
5.17 TFTP命令 .......................................................................................................................41
5.18 go命令.............................................................................................................................42
5.19 reset命令 .........................................................................................................................43
5.20 set命令 ............................................................................................................................44
5.21 run命令 ...........................................................................................................................44
附 录: ..................................................................................................45
附A、U-Boot的lds文件详解 .................................................................................................45
附B、ARM GCC 内嵌(inline)汇编手册.........................................................................47
附C、typedef用法小结..........................................................................................................57
附D、U-Boot中typedef应用解析..........................................................................................64
附E: Ping命令使用的ARP协议 .............................................................................................68
附F:TFTP协议详解 .............................................................................................................70
参考文献: ..............................................................................................75
感 谢 ..................................................................................................76
ARM 技术交流网 版权所有 请勿用于商业用途 违者必究
4
帮助客户成功!
1. u-boot介绍
1.1 U-Boot的来源
U-Boot,全 称 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。它
最早是由 DENX 软件工程中心的 Wolfgang Denk 基于 8xxrom 的源码创建的
PPCBOOT 工程,并且不断添加处理器的支持。后来,Sysgo Gmbh 把 ppcboot
移植到 ARM 平台上,创建了 ARMboot 工程。然后以 ppcboot 工程和 armboot
工程为基础,创建了 U-Boot 工程。
现在,U-Boot 作为通用的 Bootloader,已经成功地移植到包括 PowerPC、
ARM、X86、MIPS 体系结构的上百种开发板,已经成为功能最多、灵活性最强
并且开发最积极的开放源码 Bootloader。目前仍然由 DENX 的 Wolfgang
Denk 维护。
U-boot 对我们来说,最大的优势就是,它加快了项目开发的进度,节省了
工程师的时间。
1.2 U-Boot在系统中的地位
对于一个项目系统来说,u-boot 到底处于什么样地位呢?
目前,在专用的嵌入式板子上运行 GNU/Linux 系统,应该算比较流行的。对
于一个嵌入式 Linux 系统,从软件的角度看通常可以分为四个层次:
1、引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和
BootLoader 两大部分。
2、Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。
3、文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用
ramdisk 来作为 rootfs。
4、用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间
可能还会包括一个嵌入式图形用户界面。常用的嵌入式 GUI 有:MicroWindows
和 MiniGUI 等。
按照这个层次,U-Boot 处于引导加载程序阶段。引导加载程序是系统加电后
运行的第一段软件代码。PC 机中的引导加载程序由 BIOS(其本质就是一段固件程
序)和位于硬盘 MBR 中的 OS BootLoader(比如,LILO 和 GRUB 等)一起组成。BIOS
在完成硬件检测和资源分配后,将硬盘 MBR 中的 BootLoader 读到系统的 RAM 中,
然后将控制权交给 OS BootLoader。
BootLoader 的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳
转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常并没有像 BIOS,因此整个系统的加载启动任务就完
全由 BootLoader 来完成。简单地说,BootLoader 就是在操作系统内核运行之前
运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间
ARM 技术交流网 版权所有 请勿用于商业用途 违者必究
5