讲师博文
图文解析u-boot2013.01启动流程 来源 : 未知     2018-09-25

在uboot源码目录下生成tags文件: ctags –R

u-boot起始地址为0x0000000,4字节对其,文本段.text说明第一个执行的文件是在Arch/arm/cpu/armv7/start.o 所以下一步找这个目录的start.s文件

从 arch/arm/cpu/armv7/start.S构建异常向量表

b reset------>

设置cpu为svc模式,关闭所有中断------>

bl cpu_init_cp15

关闭数据和指令

关闭cache TLB

关闭mmu相关的东西------> 

bl cpu_init_crit------>

b lowlevel_init 切换到了board/samsung/fs4412/lowlevel_init.S

设置堆栈,lr入栈

关闭看门狗------>

判断uboot是否已经运行到物理内存中(系统时钟等初始化交给之前的代码完成)------>

bl uart_asm_init

串口的初始化------>

bl _main (arch/arm/cpu/armv7/start.S)

设置C语言运行的基本环境------> arch/arm/lib/alt0.s

bl board_init_f 切换到 arch/arm/lib/board.c

初始化一些全局数据(比如 0x40000100就是给内核传递参数地址)

进行各种板级初始化。

 

b relocate_code 进行uboot代码重定位。 切换到arch/arm/cpu/armv7/start.S

需要对搬移后的代码进行符号重定向,避免绝对跳转失败------>

设置C语言运行终的环境 arch/arm/lib/crt0.S

bss段的清零操作。

第二阶段:完善uboot功能

ldr pc, =board_init_r

完全进入C语言的代码

702 for (;;) {

703 main_loop();

704 }

扫码申领本地嵌入式教学实录全套视频及配套源码

上一篇:单例模式的基本用法

下一篇:Linux内核模块文件组成介绍

400-611-6270

Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5京公海网安备11010802025203号