天天看点

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