接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,,,,);