u-boot移植启动流程详细分析(2)

学习底层的东西,首要的就是去了解他的架构,整体的思路知道了,就会在出现问题的时候有很清晰的思路,知道哪里出的问题,以及程序是如何执行的,相信做到上面的,所遇到的问题,大都会迎刃而解了吧,高手是有很多的,所谓的高手,不过也就那样吧,努力努力也是可以赶超的。

之前,介绍了u-boot的第一阶段的启动流程,那么接下来就来说说第二阶段的具体执行流程:

(1)初始化gloabl data和board data,这里所谓的初始化就是给他们分配一块内存空间。

(2)初始化序列(init_sequence)

在初始化的序列当中包括有:

设置系统时钟操作函数 arch_cpu_init

设置开发板的机器码 board_init

初始化定时器 timer_init

初始化环境变量 env_init

初始化波特率 init_boudrate

初始化串口 serial_init

控制台设备一级初始化 console_init

打印u-boot的版本编译时间 disoplay_banner

打印cpu类型和当前的运行频率 print_cpuinfo

打印开发板的名称 checkboard

配置可用的内存 dream_init

显示当前的内存大小 display_dram_config

(3)NAND Flash 初始化 nand_init

(4)读取NAND Flash 的环境变量,然后做CRC校验,如果错误,则使用默认的环境变量,如果正确则使用从
NAND Flash中读取的环境变量

(5)从环境变量中获得板子的ip地址

(6)初始化输入输出设备stdio_init

(7)初始化控制台,默认用串口作为控制台设备

(8)使能IRQ异常,enable——interrupts()

( 9) 初始化网卡设备,eth_initialize(gd->bd)

(10)进入main_loop()中开始判断是否设置了环境变量bootdelay和bootcmd两个参数,如果已经设置过了的话,

再判断在bootdelay的时间内串口是否有输入,如果没有的话则执行bootcmd所设置的接下来的命令,如果

两个参数没有设置过,则循环读取串口中所输入的命令,然后去执行。

以上就是整个第二阶段的内容了,接下来的几天里我会陆续的总结一下关于u-boot移植的具体操作,以及NAND Flash 的相关介绍,学习的过程总是需要把心放下来,然后专注的去体会你所认知的一些事物,每件事情都是这样,只有我们认真的去对待,才会得到应有的回报。

时间: 2024-12-14 13:33:45

u-boot移植启动流程详细分析(2)的相关文章

lk启动流程详细分析

转载请注明来源:cuixiaolei的技术博客 这篇文章是lk启动流程分析,将会详细介绍下面的内容: 1).正常开机引导流程 2).recovery引导流程 3).fastboot引导流程 4).ffbm引导流程 5).lk向kernel传参 start---------------------------------------- 在bootable/bootloader/lk/arch/arm/crt0.S文件中有下面代码,所以从kmain()开始介绍 bl kmain kmain函数位于b

u_boot启动流程详细分析(1)

闭上眼睛,仔细的回忆一下从NAND FLASH 启动的整个流程,首先,当我们打开板子的时候,先运行的就是嵌入在芯片上的iROM,它的作用就是为了把,NAND Flash 中的bootloader的一部分代码拷贝到芯片上面的sRAM中,之后,程序在sRAM中运行,它的主要任务就是初始化我们的内存,时钟,以及存储设备,当然更重要的就是从存储设备NAND Flash上拷贝剩下的bootloader到我们的内存的相关位置,之后,运行接下来的bootloader程序,加载运行我们的OS,以及挂在根文件系统

Flink on Yarn模式启动流程源代码分析

此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Flink on yarn的启动流程可以参见前面的文章 Flink on Yarn启动流程,下面主要是从源码角度看下这个实现,可能有的地方理解有误,请给予指正,多谢. --> 1.命令行启动yarn session bin/yarn-session.sh -n 3 -jm 1024 -nm 1024 -st我们去看下启动脚本   $JAVA_RUN $JVM_ARGS -classpath "$CC_

activity的四种启动模式详细分析

1.android中通过任务队列来管理activity 采用栈的结构就是后进先出 手机里面如果启动多个应用就会启动多个任务栈来管理对应的activity. 主要解决下面的问题:对应的四种启动模式: 1.界面1去启动界面2,在界面2中再去启动界面1,是新创建一个界面1的实例,还是使用后来栈中的已经存在的实例,这就和界面1的设置的模式有很大的关系. 标准的模式:每次去调用都会产生一个新的实例,比如当前activity,你在当前的activity中点击按钮再创建当前的activity,在任务栈就会存在

spring boot应用启动原理分析

spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过spring boot可以通过下面的demo来感受下. 下面以这个工程为例,演示如何启动Spring boot项目: git clone [email protected]:hengyunabc/spring-boot-demo.git mvn spring-b

spring boot 源码解析 启动流程

spring boot 源码解析 启动流程 在面试过程中经常被问到过spring boot的启动流程,今天就翻一下源码整体看一下: 首先,新建一个启动类,可以看到是首先调用的SpringApplication的静态方法run @SpringBootApplication public class SourceReadApplillcation { public static void main(String[] args) { SpringApplication.run(SourceReadAp

U-BOOT-2016.07移植 (第一篇) 初步分析

U-BOOT-2016.07移植 (第一篇) 初步分析 目录 U-BOOT-201607移植 第一篇 初步分析 目录 编译和移植环境 更新交叉编译工具 1 下载arm-linux-gcc 443 2 安装arm-linux-gcc 443 安装环境Ubuntu 910 下载u-boot-201607并解压 分析顶层Makefile 1 找出目标依赖关系 2 总结 初次编译u-boot 1 配置 2 编译 分析u-boot启动流程 1 分析startS 2 分析crt0S 3 总结 1. 编译和移

neutron-dhcp-agent服务启动流程

在分析nova boot创建VM的代码流程与neutron-dhcp-agent交互之前,首先分析neutron-dhcp-agent服务启动流程.与其他服务的启动入口一样.查看setup.cfg文件. [entry_points] console_scripts = neutron-db-manage = neutron.db.migration.cli:main neutron-debug = neutron.debug.shell:main neutron-dhcp-agent = neu

Nginx(一):启动流程解析

nginx作为高效的http服务器和反向代理服务器,值得我们深入了解. 我们带着几个问题,深入了解下nginx的工作原理.首先是开篇:nginx是如何启动的? nginx是用c写的软件,github地址: https://github.com/nginx/nginx 其目录结构如下,我们主要关注 src 目录下的文件. nginx.c 是main函数入口,我们也是通过这里进行启动流程分析的. 零.启动流程时序图 我们先通过一个时序图进行全局观察nginx是如何跑起来的,然后后续再稍微深入了解些细