分类:
2011-04-10 15:41:18
参考资料:
1 tekkaman博客
2 韦东山《嵌入式linux应用开发完全手册》第15章
1。到下载u-boot-2010.06.tar.bz2,解压进入根目录,列出根目录文件。源码整体框架如下:
蓝色:目录
黑色:文件
绿色:可执行文件
[root@localhost u-boot-2010.06]# tree -L 1
.
├── api
├── arch
├── board
├── CHANGELOG
├── CHANGELOG-before-U-Boot-1.1.5
├── common
├── config.mk
├── COPYING
├── CREDITS
├── disk
├── doc
├── drivers
├── examples
├── fs
├── include
├── lib
├── MAINTAINERS
├── MAKEALL
├── Makefile
├── mkconfig
├── nand_spl
├── net
├── onenand_ipl
├── post
├── README
├── rules.mk
└── tools
16 directories, 11 files
源码解压以后,我们可以看到以下的文件和文件夹:
cpu | 与处理器相关的文件。每个子目录中都包括cpu.c和interrupt.c、start.S、u-boot.lds。 cpu.c初始化CPU、设置指令Cache和数据Cache等 interrupt.c设置系统的各种中断和异常 start.S是U-boot启动时执行的第一个文件,它主要做最早其的系统初始化,代码重定向和设置系统堆栈,为进入U-boot第二阶段的C程序奠定基础 u-boot.lds链接脚本文件,对于代码的最后组装非常重要 | |
board | 已经支持的所有开发板相关文件,其中包含SDRAM初始化代码、Flash底层驱动、板级初始化文件。 其中的config.mk文件定义了TEXT_BASE,也就是代码在内存的其实地址,非常重要。 | |
common | 与处理器体系结构无关的通用代码,U-boot的命令解析代码/common/command.c、所有命令的上层代码cmd_*.c、U-boot环境变量处理代码env_*.c、等都位于该目录下 | |
drivers | 包含几乎所有外围芯片的驱动,网卡、USB、串口、LCD、Nand Flash等等 | |
disk fs net | 支持的CPU无关的重要子系统: 磁盘驱动的分区处理代码 文件系统:FAT、JFFS2、EXT2等 网络协议:NFS、TFTP、RARP、DHCP等等 | |
include | 头文件,包括各CPU的寄存器定义,文件系统、网络等等 configs子目录下的文件是与目标板相关的配置头文件 | |
doc | U-Boot的说明文档,在修改配置文件的时候可能用得上 | |
lib_arm | 处理器体系相关的初始化文件 比较重要的是其中的board.c文件,几乎是U-boot的所有架构第二阶段代码入口函数和相关初始化函数存放的地方。 | |
lib_avr32 lib_blackfin lib_generic lib_i386 lib_m68k lib_microblaze | lib_mips lib_nios lib_nios2 lib_ppc lib_sh lib_sparc | |
api examples | 外部扩展应用程序的API和范例 | |
nand_spl onenand_ipl post | 一些特殊构架需要的启动代码和上电自检程序代码 | |
libfdt | 支持平坦设备树(flattened device trees)的库文件 | |
tools | 编译S-Record或U-Boot映像等相关工具,制作bootm引导的内核映像文件工具mkimage源码就在此 | |
Makefile MAKEALL config.mk rules.mk mkconfig | 控制整个编译过程的主Makefile文件和规则文件 | |
CHANGELOG CHANGELOG-before-U-Boot-1.1.5 COPYING CREDITS MAINTAINERS README | 一些介绍性的文档、版权说明 |
标为红色的是移植时比较重要的文件或文件夹。
2。u-boot 模式
a。启动加载(Boot loading)模式
上电后,Bootloader从板子上的某个固态存储器设备上讲操作系统加载到RAM中运行,整个过程没有用户的接入。产品发布时,Bootloader工作于这种模式下。
如果设置了bootm命令就会进入这种模式。
如果设置了bootdelay命令就可以在这个设定的时间内进入下载模式。
b。下载(Downloading)模式
在这种模式下,开发人员可以使用各种命令。操作flash,设置环境变量,下载kernel image、文件系统image 等等。完全用于开发阶段。
3。Bootloader 在嵌入式Linux系统中的位置
Bootloader Boot-parameter kernel Root-filesystem
4。Bootloader 与 内核的交互。
Bootloader与内核的交互是单向的,Bootloader将各类参数传递给内核。在Linux-2.4.x以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。标记,就是一种数据结构;标记列表就是挨着存放多个标记。
标记列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。在地址0x30000100的地方。
5。几个重要的地址
内存起始地址--0x3000 0000
内存大小64M --0x0400 0000
内存最后地址--0x33FF FFFF
ATAG_CORE开始地址--0x3000 0100
Nor/Nandflash起始地址--0x0
内核存放地址2M处--0x2000 0000
yaffs2文件存放地址5M处--0x5000 0000