u_boot启动过程中的具体分析(1)

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

那么在载入我们的OS之前程序到底做了哪些事情呢?

接下来,就具体的叙述一下,u-boot第一阶段的启动过程:

(1)设置异常向量表:表中存放的是一些跳转指令,能够跳转到相关的异常处理函数。

(2)设置ARM的核位SVC(管理模式)。禁止IRQ,FIQ异常的产生。

(3)关闭cache ,MMU。关闭cache是由于此时我们用cpu所调用的过程中cache还没有存储相关的有效内容。

所以要关闭它,而MMU内存管理单元。是把虚拟的地址映射为实际的物理地址,当然这是在载入OS之后才能完毕的事情。

(4)关闭看门狗。

我们都知道看门狗的作用。此时就是为了防止系统自己主动的复位所以才关闭的。

(5)设置向量中断控制器:

1 禁止全部的中断。

2 设置全部的中断类型为IRQ.

3 清除公共向量地址寄存器。

(6)初始化UART的GPIO口。为了之后串口的正常使用,所以初始化串口是必须的。

(7)初始化系统的时钟。这里面须要注意的是。系统时钟必须在载入操作系统之前给初始化了,若在载入OS之后才初始化。此时easy导致内存的不稳定,当然后果极为可能就是系统over了。

(8)初始化DDR内存控制器,为之后要把引导载入程序载入到内存做好铺垫。

(9)推断u_boot是否已经在内存中执行。该步是为了防止,之前已经把bootloader载入到了内存中而设置的。

若已经存在,怎直接设置栈,反之。搬移u-boot到内存地址。

(10) 设置栈。

记住。栈是从上往下压的。

(11)清除.bss段,.bss段中本来存放的是未初始化的全局变量,以及未初始化的静态变量,所以刚開始的时候

在NAND Flash中是未知的,所以在拷贝bootloader到内存的时候。我们并没有把.bss段给复制到内存中去,而是在拷贝过去之后,我们一步步的把.bss段给清0了。

(12)设置PC到内存中的对应位置。也就是把第一阶段bootloader的大小给偏移过去的第二阶段的bootloader的地方,去运行接下来的操作。

当中我们须要注意的是,我们经常从NAND Flash启动,可是u-boot默认的经常是从NOR Flash启动,这样就须要我们自己手动的将NAND Flash启动的代码加入进去。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-09-30 16:18:38

u_boot启动过程中的具体分析(1)的相关文章

Android应用程序启动过程——Launcher源码分析

当我们在Launcher界面单击一个应用程序图标时就会启动一个程序,那这一个过程究竟发生了些哪样呢?让我们跟踪Launcher源码来分析一下吧. 先上流程图: step1.追踪Launcher  从源码中我们可以发现Launcher其实也是一个程序,它继承于Activity.找到该文件中的onCreate()方法,代码片段如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

转:Tomcat启动过程中找不到JAVA_HOME JRE_HOME的解决方法

转自:http://blog.sina.com.cn/s/blog_61c006ea0100l1u6.html 原文: 在XP上明明已经安装了JDK1.5并设置好了JAVA_HOME,可偏偏Tomcat在启动过程中找不到.    报错信息如下:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these environment variable is needed to r

CentOS6启动过程超详解分析

CentOS 6 开机流程--linux由kernel和rootfs组成.kernel负责进程管理.内存管理.网络管理.驱动程序.文件系统.安全等;rootfs由程序和glibc组成,完善操作系统的功能.同时linux内核的特点是模块化,通过对模块装载卸载可以对内核功能自定义.linux内核文件:/boot/vmlinuz-2.6.32-696.el6.x86_64 整体的流程 BIOS/开机自检 MBR引导(Boot Loader) 启动内核 启动第一个进程init 一.BIOS/开机自检 1

去除hadoop启动过程中的警告信息

安装完hadoop后启动hadoop 会报一个Warning.解决办法 vi  /etc/profile 进入编辑模式,添加下面这行 export HADOOP_HOME_WARN_SUPPRESS=1 保存退出 立即生效:source /etc/profile 重新启动hadoop 消除警告成功! 去除hadoop启动过程中的警告信息,布布扣,bubuko.com

轻松识破linux内核启动过程中的“”套路“”

内核启动流程相关的内容让很多热爱linux的小伙伴既爱又恨,因为这是了解linux系统基本构造的良好过程同时由于其本身复杂且底层,脑子中的脉络不是很清晰,本文就总结了一些优秀博文,以自己的理解来解构一下. 本文的环境是CentOS 6.8, 基本过程: 庖丁解牛: 1.POST BIOS的功能由两部分组成, 步骤1:上电自检POST(Power-on self test),主要负责检测系统外围关键设备(如:CPU.内                 存.显卡.I/O.键盘鼠标等)是否正常.例如,

去除hadoop的启动过程中警告信息

如何去除hadoop的启动过程中警告信息1.由于警告是在执行start-all.sh启动Hadoop时出现的,所以应该查看start-all.sh,执行more start-all.sh可以看到下面代码:if [ -e "$bin/../libexec/hadoop-config.sh" ]; then  . "$bin"/../libexec/hadoop-config.shelse  . "$bin/hadoop-config.sh"fi根据

Windows平台下Oracle监听服务启动过程中日志输出

Windows平台下Oracle监听服务启动过程中日志输出记录. 日志目录:D:\app\Administrator\diag\tnslsnr\WIN-RU03CB21QGA\listener\trace\listener.log 日志输出内容: Sat Aug 06 20:38:44 2016 系统参数文件为D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora 写入d:\app\administrator

Windows平台下Oracle实例启动过程中日志输出

Windows平台下Oracle实例启动过程中日志输出记录. 路径:D:\app\Administrator\diag\rdbms\orcl\orcl\trace\alert_orcl.log 输出内容: Sat Aug 06 20:39:55 2016 Starting ORACLE instance (normal) LICENSE_MAX_SESSION = 0 LICENSE_SESSIONS_WARNING = 0 Picked latch-free SCN scheme 3 Usin

Android启动过程中背景图片显示

转自:http://blog.csdn.net/zhangzhikaixinya/article/details/17001321 大部分Android App启动过程中,都会设置一个背景图片,直到App加载成功,图片消失.因此,这也是做Android App的基本技能之一.这个过程实现起来并不难. 总共需要以下内容:2个Activity,一张背景图,2个xml配置文件,String.xml,AndroidManifest写入配置信息. 1 准备一张背景图图片,命名为load,自己选择图片格式.