U-Boot移植之前期分析(下)
接U-Boot移植之前期分析(上):
2. 顶层目录下mkconfig的分析过程
在上面的分析中知道了语句:“@$(MKCONFIG) $(@:_config=) arm arm920t MY_JZ2440 sumsung s3c24x0”对应于执行顶层目录下的mkconfig文件并传递了六个参数 ($0-$6):100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0。下面分析这句话的到底做了什么事情,具体可以阅读源码,由于比较简单这里直接列出具体所做事情:
1. BOARD_NAME = 100ask24x0;
2. echo "Configuring for ${BOARD_NAME} board..."
3. cd ./include
rm -f asm
ln -s asm-$2 asm 建立asm链接目录,它指向asm-arm
4. rm -f asm-$2/arch
ln -s ${LNPREFIX}arch-$6 asm-$2/arch => ln -s arch-s3c24x0 asm-arm/arch
5. rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc => ln -s proc-armv asm-arm/proc
6. #Create include file for Make
echo "ARCH = $2" > config.mk > :新建一个文件
echo "CPU = $3" >> config.mk >> :追加内容
echo "BOARD = $4" >> config.mk
echo "VENDOR = $5" >> config.mk
echo "SOC = $6" >> config.mk
7. # Create board specific header file
> config.h
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h => echo "#include <configs/100ask24x0.h>" >>config.h
三、u-boot启动流程
U-boot终极目标:读出并启动内核
U-boot第一阶段
1. 设置SVC管理模式
2.关看门狗
3. 屏蔽中断
4. 初始化SDRAM
5. 设置栈
6. 设置时钟
7. 代码从flash拷贝到内存
8. 清bss段:未初始化或初始值为0的全局变量或静态变量
9. 调用第二阶段的C函数:start_armboot()
U-boot第二阶段
1. gd设置机器号
2. flash_init():NOR FLASH初始化
3. nand_init():
4. env_relocate():环境变量初始化
4.1 代码默认的
4.2 flash上保存的
5. main_loop();
6. u-boot界面:
readline();读入串口数据
run_command();
7. 启动内核:
s = getenv("bootcmd");
run_command(s,,,,);