u-boot第二阶段启动流程分析
来源:互联网 发布:深入浅出数据分析 mobi 编辑:程序博客网 时间:2024/05/18 01:02
第一阶段的初始化结束后进入start_armboot函数,也就是进入第二阶段的初始化。下面来分析第二阶段的主要流程。
在此之前,我们先来明确u-boot的目标,u-boot要做的事情是1、把内核中flash中读出 2、启动内核
248行,gd_t是一个结构体指针,保存一些全局变量,这条语句是给它分配一个内存空间
258行,init_sequence是一个函数指针,具体如下:
也就是用for语句依次初始化这些函数。
接下来是对flash的初始化。在开头我们就说了u-boot的目标,所以得先对flash进行初始化,就是能够实现flash的读写功能。
297行是对malloc的初始化,因为u-boot是一个单片机程序,所以需要申请相应的内存空间
301行是nand flash的初始化
310行是对环境变量的初始化,其中环境变量有两种。1、默认的 2、Flash上保存的。当u-boot启动之后,先去flash上找是否有可用的环境变量,如果没有话就使用默认的。
在前面做了一些初始化之后,u-boot就拥有对flash的读写功能,也就是能把内核从flash中读出。至于如何启动,就是这个主循环要做的事情了。
在整个main_loop循环中,有两个函数是最为关键的。一个是432行的s = getenv ("bootcmd");其中bootcmd是一个环境变量,定义如下:
bootcmd=nand_read.jffs 0x30007FC0 kernel:bootm 0x30007FC0
也就是把内核从nand_flash中的kernle分区中读到0x30007FC0这个地址 而第二条语句bootm 0x30007FC0是启动内核。
第二关键的函数是444行的run_command (s, 0); 去执行各种读到的命令。而整个u-boot的核心就是这个run_command函数。
- u-boot第二阶段启动流程分析
- u-boot源码分析 --- 启动第二阶段001
- u-boot源码分析 --- 启动第二阶段002
- u-boot源码分析 --- 启动第二阶段003
- u-boot源码分析 --- 启动第二阶段004
- u-boot源码分析 --- 启动第二阶段005
- u-boot源码分析 --- 启动第二阶段006
- u-boot源码分析 --- 启动第二阶段007
- U-Boot启动第二阶段代码分析
- u-boot源码分析 --- 启动第二阶段001
- u-boot源码分析 --- 启动第二阶段002
- u-boot源码分析 --- 启动第二阶段003
- u-boot源码分析 --- 启动第二阶段004
- u-boot源码分析 --- 启动第二阶段005
- u-boot源码分析 --- 启动第二阶段006
- u-boot源码分析 --- 启动第二阶段007
- U-Boot启动第二阶段代码分析
- U-Boot启动第二阶段代码分析
- opencv之生成BOW特征
- 正交矩阵和Gram-Schmidt正交化
- [Error!]the type java.lang.object cannot be resolved. it is indirectly reference
- react 小例子
- Spring MVC @ModelAttribute注解总结
- u-boot第二阶段启动流程分析
- oracle sql语句优化总结
- 一个数被质数分解
- 11种行为型模式之:策略模式(Strategy)
- 在centos6.5 以 anaconda2的方式安装tensorflow
- JAVA获取图片大小和尺寸【转】
- Spring-quartz使用以及动态修改cronExpression
- 编程之美二 : 中国象棋将帅问题
- iOS添加自定义自体 [UIFont fontWithName: size:](英文有效)