uboot启动流程

一、uboot 启动流程

启动入口 arch/arm/cpu/armv7/start.S

1.汇编阶段

(1)异常向量表

(2)初始化基本CPU 协处理器等  

cpu_init_cp15:  初始化 L1缓存 、 关闭mmu 、 关闭看门狗 、 单纯化,

执行完cpu_init_cp15后,跳转到cpu_init_crit执行。

(3)运行地址检查

1)如果运行在 flash上

初始化内存  初始化时钟  

b  relocate_code   代码自搬移

将 在 flash/SD卡 中的 uboot代码  复制到 RAM   重启uboot  在RAM中  

2)运行在RAM上 

板载设备初始化 进入  board_init_f

2.C阶段

arch/arm/lib/board.c:277  board_init_f

核心代码:

for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {

if ((*init_fnc_ptr)() != 0) {

    hang ();

    }

}

其他更多设备的初始化  定时器  串口 终端 ...

board_init_r:  中断初始化

for (;;) {

main_loop();    // 交互模式 主循环

}

二、uboot 命令了解

uboot常用命令:

1.help:      查看uboot支持的命令

2.printenv:  查看环境变量

3.set 环境变量名  参数值     // 设置环境变量

4.save  保存环境变量

5.bootargs : 引导Linux内核时 传递给内核的参数

6.bootcmd  : 自启动模式下  uboot 会自动执行该参数给定的 命令表

7.bootdelay=3 : 进入自启动模式的 延时时间 单位S

8.tftp 通过tftp客户端 向服务器下载数据

tftp 内存地址  文件名

9.boom 引导Linux内核

boom 内核的位置  根文件系统位置  设备树的位置

10.loadb   通过串口下载文件

11.go    跳转指定内存地址 执行程序  

12.系统固化到flash中 会用到的命令  

movi  read  u-boot/kernel  addr

movi  write u-boot/kernel  addr

movi  read  rootfs  addr   size

movi  write rootfs  addr   size

你可能感兴趣的:(嵌入式,linux,ubuntu,驱动开发)