1.为什么进行移植
不同的cpu结构,板级设备的不同,即硬件资源和配置不同。
2.bootloader流程
一般为两个阶段:stage1和stage2,stage1运行在flash中,汇编语言;stage2运行在内存中,C语言程序。
stage1完成硬件初始化;(cpu内部寄存器,内存等)
为加载stage2准备RAM空间;
拷贝stage2的内容到RAM空间;
设置好堆栈;
跳转到stage2的C入口处。
stage2初始化本阶段使用到的硬件设备;(板级硬件串口、网卡)
将内核映像和根文件系统映像从flash映射到内存RAM中;
调用内核。
3.U-BOOT 目录结构
|-- board |-- common |-- cpu |-- disk |-- doc |-- drivers |-- dtt |-- examples |-- fs |-- include |-- lib_arm |-- lib_generic |-- lib_i386 |-- lib_m68k |-- lib_microblaze |-- lib_mips |-- lib_nios |-- lib_nios2 |-- lib_ppc |-- net |-- post |-- rtc `-- tools
board:和一些已有开发板有关的文件. 每一个开发板都以一个子目录出现在当前目录中, 比如说:SMDK2410,子目录中存放与开发板相关的配置文件. common:实现 U-BOOT 命令行下支持的命令,每一条命令都对应一个文件。例如 bootm 命令对应就是cmd_bootm.c。 cpu:与特定 CPU 架构相关目录,每一款 U-BOOT 下支持的 CPU 在该目录下对应一个子目录,比如有子目录arm920t 等。 disk:对磁盘的支持。 doc:文档目录。U-BOOT 有非常完善的文档,推荐大家参考阅读。 drivers:U-BOOT支持的设备驱动程序都放在该目录,比如各种网卡、支持 CFI的 Flash、串口和 USB等。 fs: 支持的文件系统,U-BOOT 现在支持 cramfs、fat、fdos、jffs2 和 registerfs 。 include:U-BOOT 使用的头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件 和对文件系统支持的 文件。该目录下 configs 目录有与开发板相关的配置头文件,如 smdk2410.h。该目录下的 asm 目录有与 CPU 体 系结构相关的头文件,asm 对应的是 asm-arm. lib_xxxx: 与体系结构相关的库文件。如与 ARM 相关的库放在 lib_arm 中。 net:与网络协议栈相关的代码,BOOTP 协议、TFTP 协议、RARP 协议和 NFS 文件系统 的实现。 tools:生成 U-BOOT的工具,如:mkimage, crc 等等。
4.uboot的makefile编译
(1)执行每种board相关的配置
(2)编译生成uboot.bin文件