首先看一个gd_t这个结构体,global_data顾名思义就是全局数据,主要保存了uboot的配置信息

bd:板子相关信息    flags:相关标志位    baudrate:串口波特率    have_console:控制台初始化    reloc_off:重定位偏移量    env_addr:环境变量地址    env_valid:环境变量校验成功    fb_base:帧缓冲基地址    jt:一些函数入口

这是一个非常巧妙的用法,将gd的地址保存在r8寄存器中。这样做的好处是,可以方便地在不同的文件中进行调用,并且经常频繁调用的数据存在寄存器中效率会很高。

从中我们可以看出uboot的内存排布是下面这样的

结合start.S和u-boot.lds,可以知道这句代码用于计算镜像大小。

但是分析的时候很容易将C语言调用汇编标志和汇编调用汇编标志搞混,具体分析方法参照我的上一篇博客。

博客链接地址为:https://blog.csdn.net/lushoumin/article/details/82866957。

很显然在遍历函数指针数组,并调用所有函数,下面看一下init_sequence这个数组内容

很显然是在做一些初始化工作:

cpu_init:什么也没干

board_init:初始化dm9000网卡,初始化机器码和启动参数地址

interrupt_init:初始化定时器4

env_init:初始化环境变量,就是设置默认环境变量

init_baudrate:初始化串口波特率

serial_init:前面已经初始化过串口,这里什么也没干

console_init_f:初始化控制台,就是让控制台标志位置1

display_banner:显示uboot信息

print_cpuinfo:打印时钟信息

checkboard:打印开发板信息

init_func_i2c:初始化i2c

dram_init:初始化DDR信息

display_dram_config:打印DDR信息

板子上根本没有norflash,所以这些代码没有实际价值

初始化动态内存区域,其实就是清空堆区

初始化MMC或者初始化nandflash,取决于配置

重定向环境变量,即将环境变量从存储介质中重定向到DDR中

从环境变量中获取IP地址和MAC地址

初始化设备驱动链表,并且将一些设备加入链表。事实上,这里我们只是将串口设备加入链表

初始化很多的函数入口地址,事实上整个uboot都没有发现调用这些入口,所以没什么大用,可以不看

初始化控制台,这里初始化完之后,uboot就可以使用控制台了

由于没有配置中断,因此这句代码会指向一个空函数

指向了一个空函数

网卡相关初始化,事实上板子用的dm9000网卡已经在前面初始化过了,这里其实什么也没干

这玩意儿是搞LCD的logo用的,不用管它

这个是更新程序用的,将程序从SD里面烧录的相应介质中

到这里start_armboot的使命就结束了,下面将跳进main_loop函数中进行命令解析和操作。

uboot启动第二阶段——start_armboot相关推荐

  1. uboot启动第二阶段

    uboot启动第二阶段 start_armboot函数简介 一个很长的函数 (1)这个函数在uboot/lib_arm/board.c的第444行开始到908行结束. (2)450行还不是全部,因为里 ...

  2. U-Boot启动第二阶段代码分析

    U-Boot第一阶段的启动流程.(nandflash启动,把nand的4k代码考到sram中,因为nand没址线,不能映射到内存,所以通过sram进行过度,sram中4k代码把整个uboot拷贝到sd ...

  3. u-boot启动过程

    目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...

  4. U-Boot启动过程--详细版的完全分析

    目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...

  5. Uboot启动全过程

    1.1       U-Boot 工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 ?  硬件设备初始化 ?  加载U-Boot第二阶段代码到RAM空间 ...

  6. U-Boot启动过程完全分析

    1.1       U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø  硬件设备初始化 Ø  加载U-Boot第二阶段代码到RAM空间 ...

  7. 【ARM-Linux开发】U-Boot启动过程--详细版的完全分析

    ---------------------------------------------------------------------------------------------------- ...

  8. S5PV210 Uboot开发与移植03:Uboot启动流程详解

    目录 1. start.S解析 1.1 uboot入口分析 1.2 头文件包含 1.2.1 config.h 1.2.2 version.h 1.2.3 asm/proc/domain.h 1.2.4 ...

  9. U-BOOT启动流程详细分析[转]

    http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶 ...

最新文章

  1. 算法------对称二叉树
  2. 挑出IIS日志里某一文件的请求次数
  3. 【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
  4. springcloud 消息队列_全面而且简洁介绍SpringCloud微服务
  5. c++如何打印一维数组首地址_4.1 数组的定义
  6. STL六大组件 功能与运用(略写)
  7. 写给新手看的 Spring Boot 入门学习指南
  8. 执行环境及作用域分析
  9. 图像处理基础(五)_图像像素中通道概念解析
  10. 解决jsp中文乱码的两种方式
  11. VTP技术及相关配置
  12. Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
  13. OpenLayers汇总目录
  14. re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity
  15. Android ANR原理代码分析(三)
  16. Log Parser Lizard的安装
  17. 使用JS取得焦点(focus)元素
  18. IoT通讯技术选型及模型设计的思考
  19. FLStudio21中文版本全部新功能讲解
  20. Android AsyncTask 接口回调

热门文章

  1. Qt文档阅读笔记-QPropertyAnimation官方解析及实例
  2. 数据结构-排序进阶代码
  3. mysql 最短路经_poj 3613 Cow Relays 经L边的最短路 | 学步园
  4. 年龄到底怎么算才对_如意甘霖vs嘉和保,到底谁才是最佳男性重疾险
  5. doxygen 命令_doxygen使用
  6. java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换
  7. excel vb ppap_vb是什么平台-常见问题
  8. gitlab git clone 卡住_IDEA中的Git操作你掌握了吗?此一篇,足矣!
  9. 交叉编译出现skipping incompatible_交叉编译bluez-5.50
  10. (数据库系统概论|王珊)第一章绪论-第三节:数据库系统的结构