1、程序入口

我们从什么地方去找入口呢,首先是打开顶层目录的makefile文件,在这个文件里面,每一个uboot支持的开发板都有一个配置选项,比如说,搜索smdk2440,结果如下

我们主要关注上图的右方那个红线处,它决定了开发板的名称smdk2440,拿到这个名称后,我们到目录board\samsung\smdk2440下存放的文件就是开发板支持相关的一些文件;找到里面的u-boot.lds文件,那么我们uboot的整个链接就是用这个脚本文件来控制的,打开之

可知,在我们代码段最前端的是目录cpu/s3c24xx/下的start.c或者start.s文件,那么这个文件会得到最先运行,那么这个文件里面的那一段代码最先运行呢?

由链接器脚本可知

在start.s代码里面的标号_start处最先执行,也就是

2、分析第一阶段的代码--BL1

上面是设置中断向量表;

上面是设置处理器到SVC32模式,

上面是刷新I/D cache,然后是关闭MMU和cache;没有定义CONFIG_ONENAND这个宏,所以跳过

接下来执行

bl lowlevel_init

该函数位于对应开发板的lowlevel_init.S下

进入到该文件:

上面是初始化系统时钟,对串口进行汇编级的初始化,对nandflash进行简单的初始化,对内存的初始化,

然后,返回到上一级代码处:

判断是norflash还是nandflash,我们这里是nandflash,所以下面要拷贝nandflash剩下的内容

上面是拷贝nand_copy的内容,

上面是设置堆栈,为c语言编程做准备,清除bss段,

3、分析第二阶段的代码--BL2

在这个阶段通过ldr pc,_start_armboot,使程序进入内存中运行,那么下面来证明_start_armboot是不是在内存中

下面来证明_start_armboot在内存当中,

首先,对uboot进行配置

make smdk2440_config(这个来自于makefile里面)

然后,再执行一个make进行编译;

可以看到elf格式的uboot以及二进制格式的uboot.bin文件,

我们要查看_start_armboot的地址是多少,我们对u-boot.elf进行反汇编

打开dump文件且搜索底行命令格式下/_start_armboot

其入口地址为30001100,实际上它是内存里面的地址

往最前看,入口地方,如下:

上面的_start的地址为30000000,那么这个地址怎么来的,以及前面说过我们的第一阶段的程序不是在内存中运行而是在垫脚石中运行,垫脚石是从0地址开始的。

1、我们去链接一个程序的时候,如果这个程序由多个文件组成,那么它的链接地址是由链接器脚本决定的。

在uboot的顶层目录下面的config.mk里面,这个文件会被makefile包含进去,

代码段的基地址

那么这个TEXT_BASE在哪儿定义的呢?

如果TEXT_BASE修改为30008000,那么变化如下:

链接地址并不等于pc指针的值!!!!!!!!!!!!!!!!!!

如果是ldr pc,0x30008000,则pc指针的值就会为30008000

第二阶段程序分析

在这部分它会做一些硬件初始化和一些软件初始化(可能初始化环境变量等等)

分析:

首先分析上面的for循环,首先,使用一个指针指向一个函数数组,把数组里面的函数都取出来调用

上面函数里面,在硬件上对串口进行初始化,

上面是对LCD的初始化

上面是对网卡的初始化;以及初始化led;

main_loop()执行用户输入的命令!!它的作用是对用户输入到控制台的命令进行解析,并执行用户输入的命令。

下面是对6410的分析:

打开链接器脚本

跟上面分析差不多!!!

外设基地址初始化,这是6410上面才有的

上面有点亮led灯为了调试,然后是关闭看门狗,在2440上其实是有的,为什么他没有这个操作呢,其实它是有这个操作额,它做在系统时钟初始化里面,同时在里面还有关闭所有中断这个操作,这是在初始化系统时钟之前做的。

start_armboot是2440与6410共用的!!!

210初始化流程:

IROM(固化程序)把BL1(NANDFLASH中的)程序复制到IRAM中去,BL1的大小最大为16KB,在IRAM中运行的BL1会把NANDFLASH中后面的内容BL2复制到IRAM中剩下的地址中去,最大为80KB,如果还有的话,就只能往内存里面复制了。其实uboot编译出来BL2是大于80KB的,所以uboot还是采用往内存中去复制的这种情况,

在2440和6410里面的BL1和BL2是烧写到同一个bin文件里面的,而在210中是把BL1和BL2烧写到不同的bin文件中的,

BL1是位于下面

然后打开u-boot-spl.lds文件,它决定了BL1是怎么产生出来的

Part4_lesson3---U-Boot工作流程分析的更多相关文章

  1. [国嵌笔记][030][U-Boot工作流程分析]

    uboot工作流程分析 程序入口 1.打开顶层目录的Makefile,找到目标smdk2440_config的命令中的第三项(smdk2440) 2.进入目录board/samsung/smdk244 ...

  2. u-boot分析(二)----工作流程分析

    u-boot分析(二) 由于这两天家里有点事,所以耽误了点时间,没有按时更新,今天我首先要跟大家说说我对于u-boot分析的整体的思路,然后呢我以后的博客会按照这个内容更新,希望大家关注. 言归正传, ...

  3. 【转】Hostapd工作流程分析

    [转]Hostapd工作流程分析 转自:http://blog.chinaunix.net/uid-30081165-id-5290531.html Hostapd是一个运行在用户态的守护进程,可以通 ...

  4. 第2章 rsync算法原理和工作流程分析

    本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释. 以下是本文的姊妹篇: 1.rsync(一):基本命令和用法 2.rsync(二):ino ...

  5. rsync算法原理和工作流程分析

    本文通过示例详细分析rsync算法原理和rsync的工作流程,是对rsync官方技术报告和官方推荐文章的解释.本文不会介绍如何使用rsync命令(见rsync基本用法),而是详细解释它如何实现高效的增 ...

  6. nodejs的Express框架源码分析、工作流程分析

    nodejs的Express框架源码分析.工作流程分析 1.Express的编写流程 2.Express关键api的使用及其作用分析 app.use(middleware); connect pack ...

  7. Mysql工作流程分析

    Mysql工作流程图 工作流程分析 1. 所有的用户连接请求都先发往连接管理器 2. 连接管理器    (1)一直处于侦听状态    (2)用于侦听用户请求 3. 线程管理器    (1)因为每个用户 ...

  8. Struts2的工作流程分析

    Struts2的工作流程分析 Posted on 2011-02-22 09:32 概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验, ...

  9. rsync(三)算法原理和工作流程分析

    在开始分析算法原理之前,简单说明下rsync的增量传输功能. 假设待传输文件为A,如果目标路径下没有文件A,则rsync会直接传输文件A,如果目标路径下已存在文件A,则发送端视情况决定是否要传输文件A ...

  10. Kafka工作流程分析

    Kafka工作流程分析 生产过程分析 写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘 ...

随机推荐

  1. sqlalchemy在pythonweb中开发的使用(基于tornado的基础上)

    一.关于SQLAlchemy的安装pip install SQLAlchemy安装如果上面的方式安装不成功的情况可以使用下面的方法 百度下载window或者linux下面对应的sqlalchemy的版 ...

  2. CENTOS7安装DOCKER步骤以及安装阿里镜像加速后无法正常启动服务的问题2018年1月

    本文时间2017年12月7日,比较新,大家可以直接参考.有问题直接评论 我根据菜鸟教程通过yum install docker安装了docker,由于测试发现奇慢无比,所以就安装了阿里云的加速,随后也 ...

  3. 1140 Look-and-say Sequence

    题意:略 思路:第1个数是1(读作“1有1个”),因此第2个数就是11(读作“1有2个”),因此第3个数就是12(读作“1有1个,2有1个”),因此第4个数是1121(读作“1有2个,2有1个,1有1 ...

  4. PHP 获取指定日期的星期几的方法

    <?php header("Content-type: text/html; charset=utf-8"); //获取星期方法 function get_week($dat ...

  5. JavaScript笔记——面向对象与原型

    JavaScript也是一门面向对象的语言.面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript竟然没有class,因此它的面向对象也 ...

  6. Android 自定义相机Demo源码

    Github源码:https://github.com/LinJZong/AndroidProject.git 模仿360相机,图片资源来源于360相机,仅供学习使用.使用过程中遇到问题或Bug可发我 ...

  7. windows 10 服务组件安装出现0x80070422错误解决方法

    问题描述:   windows 10通过控制面板->程序->启用或关闭Windows 功能安装Windows服务或组件时,出现0x80070422错误,提示服务禁止或未启用 问题产生原因: ...

  8. Halcon学习之三:有关图像通道的函数

    黑白摄像机会返回每个像素所对应的能量采用结果,这些结果组成了一幅单通道灰度值图像,而对于RGB彩色摄像机,它将返回每个像素所对应的三个采样结果,也就是一幅三通道图像.下面这些是与图像通道有关的函数: ...

  9. 「小程序JAVA实战」 小程序抽离公用方法进行模块化(12)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-12/ 小程序的模块化,把砖磊成一个墩子,用的时候把整个墩子移走.js更好的调用,应用更加公用化.源 ...

  10. Java如何解决form表单上传文件,以及页面返回处理结果通知!

    前端JSP代码 <form id='formSumbit' class='form-horizontal' action='/ncpay/route/chlsubmcht/batchImpor' ...