移植过程主要参考《Mini2440之 U-boot使用及移植详细手册》和Tekkaman提供的源码。
一、cpu/arm920t/start.S
1、 包括关闭看门狗、关闭所有中断、设置时钟的分频比、初始化SDRAM控制器。
2、 代码位置确定:SDRAM、norflash、nandflash。
3、 代码搬移:nandflash读函数构建;norflash代码搬移循环。这里比较重要的几个地址_TEXT_BASE、_armboot_start、_bss_start。
4、 设置堆栈:注意malloc area和bdinfo相关的两部分空间。
5、 清除bss段
6、 跳转C代码点:
ldr pc, _start_armboot
_start_armboot: .word start_armboot
在nandboot和norboot时,此处也是向SDRAM进行跳转的地点。
二、lib_arm/board.c中的start_armboot()函数
1、 gd_t结构体:详见《【转】bd_t gd_t 及board.c的分析》。
2、 函数指针数组
init_fnc_t *init_sequence[] = {
cpu_init,
board_init,
interrupt_init,
env_init,
init_baudrate,
serial_init,
console_init_f,
display_banner,
dram_init,
display_dram_config,
NULL,
};
详细介绍见《【原创】函数指针数组*init_sequen…》。
3、 初始化堆、norflash、显存。
4、 初始化 Nand Flash控制器。
5、 初始化环境变量,如果认为没有找到存储其中的,就用默认值并打印“*** Warning - bad CRC, using default environment”。对于环境变量的介绍,见《【原创】环境变量概述》。
6、 初始化 VFD、串口、标准输入输出设备等。
7、 初始化SD卡、网卡。
8、 其中会读取bootdelay和bootcmd,在bootdelay时间内按下键进入命令行,否则执行 bootcmd的命令。
9、 bootcmd:uboot自动执行的命令,一般用来加载和启动内核。对于加载方式和命令参照《mini2440之U-boot移植详细手册-20100419》4.4内核引导;对于启动内核的命令bootm见《[转载]BOOTM浅析(转)》。
10、bootargs:详见《[转载][转]bootargs参数意义》。