一、uboot有两种模式:
1.启动加载模式:存储在nand上,上电将操作系统加载到DRAM运行。正常启动时的模式,自动加载linux内核。
2.下载模式:调试模式,通过网络或串口从主机获得文件,控制启动流程。按下任意键进入下载模式。
二、bootloader有两个阶段:
1.第一阶段代码用汇编:arch/arm/cpu/armv7/start.S和board/samsung/smart210/lowlevel_init.S,从ISRAM运行。
第一:建立中断向量表和异常向量表
第二:获取启动参数,设置SVC32模式,拷贝前8k代码到ISRAM。
第三:cpu_init_crit:
关I/D cache,关看门狗,清TLB,关MMU等
第四:cpu_init_crit调用lowlevel_init.S:
设置TCPZ,禁止中断,初始化系统时钟、内存、串口、nand等
第五:设置栈,判断启动开关,sd卡启动就跳转到board_init_f,nand启动就跳转到board_init_f_nand。
第六:搬运代码,从sd卡或nand到DRAM(内存)。
第七:初始化栈,清bss段,跳转到board_init_r,完了启动过程结束。
2.第二阶段代码用c:arch/arm/lib/board.c和common/main.c,从内存运行。
common/main.c:引导内核
移植关心的文件夹:
board文件夹 :和开发板相关的,是移植需要修改的。
arch/arm/文件夹 :和处理器相关的,主流的cpu都是支持的.
lib文件夹 :u-boot的通用的自己的库。
arch/arm/lib文件夹 :根据arm处理器创建的库。
include/configs文件夹:里面是头文件,需要修改。
drivers文件夹 :驱动文件夹.
common文件夹 :u-boot核心代码。
net文件夹 :网络协议相关代码。
tools文件夹 :u-boot提供的编译运行等辅助工具。
3、u-boot启动过程:
start.S :arch/arm/cpu/armv7/start.S,程序的入口;
board.c :arch/arm/lib/board.c,不用修改,可以用于所有arm;
main.c :common/main.c,与硬件无关,不用修改,所有开发板通用,用来启动内核。
说明:
arch/arm/cpu/armv7/start.S调用board/samsung/smart210/lowlevel_init.s进行初始化(主要初始化内存DRAM)。
arch/arm/lib/board.c初始化和硬件相关的函数,调用相关的初始化函数进行初始化开发板上资源。
common/main.c是整个u-boot程序的主函数,主要负责运行维护uboot的shell命令行。
原文:https://www.cnblogs.com/aiziyoudexinxin/p/13731637.html