uboot启动第二阶段——start_armboot
首先看一个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相关推荐
- uboot启动第二阶段
uboot启动第二阶段 start_armboot函数简介 一个很长的函数 (1)这个函数在uboot/lib_arm/board.c的第444行开始到908行结束. (2)450行还不是全部,因为里 ...
- U-Boot启动第二阶段代码分析
U-Boot第一阶段的启动流程.(nandflash启动,把nand的4k代码考到sram中,因为nand没址线,不能映射到内存,所以通过sram进行过度,sram中4k代码把整个uboot拷贝到sd ...
- u-boot启动过程
目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...
- U-Boot启动过程--详细版的完全分析
目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...
- Uboot启动全过程
1.1 U-Boot 工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 ? 硬件设备初始化 ? 加载U-Boot第二阶段代码到RAM空间 ...
- U-Boot启动过程完全分析
1.1 U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶段的功能 Ø 硬件设备初始化 Ø 加载U-Boot第二阶段代码到RAM空间 ...
- 【ARM-Linux开发】U-Boot启动过程--详细版的完全分析
---------------------------------------------------------------------------------------------------- ...
- 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 ...
- U-BOOT启动流程详细分析[转]
http://www.cnblogs.com/heaad/archive/2010/07/17/1779829.html U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下: (1)第一阶 ...
最新文章
- 算法------对称二叉树
- 挑出IIS日志里某一文件的请求次数
- 【Android 逆向】ARM CPU 架构体系 ( ARM 内存模型 | ARM 架构堆的实现 | ARM 架构栈的实现 )
- springcloud 消息队列_全面而且简洁介绍SpringCloud微服务
- c++如何打印一维数组首地址_4.1 数组的定义
- STL六大组件 功能与运用(略写)
- 写给新手看的 Spring Boot 入门学习指南
- 执行环境及作用域分析
- 图像处理基础(五)_图像像素中通道概念解析
- 解决jsp中文乱码的两种方式
- VTP技术及相关配置
- Alpha测试 / Beta测试 / 黑盒测试 /白盒测试概述
- OpenLayers汇总目录
- re学习笔记(65)BUUCTF - re - [GKCTF2020]Chellys identity
- Android ANR原理代码分析(三)
- Log Parser Lizard的安装
- 使用JS取得焦点(focus)元素
- IoT通讯技术选型及模型设计的思考
- FLStudio21中文版本全部新功能讲解
- Android AsyncTask 接口回调
热门文章
- Qt文档阅读笔记-QPropertyAnimation官方解析及实例
- 数据结构-排序进阶代码
- mysql 最短路经_poj 3613 Cow Relays 经L边的最短路 | 学步园
- 年龄到底怎么算才对_如意甘霖vs嘉和保,到底谁才是最佳男性重疾险
- doxygen 命令_doxygen使用
- java xlsx怎么转换成excel格式_python小工具 | Excel的xls和xlsx格式文件转换
- excel vb ppap_vb是什么平台-常见问题
- gitlab git clone 卡住_IDEA中的Git操作你掌握了吗?此一篇,足矣!
- 交叉编译出现skipping incompatible_交叉编译bluez-5.50
- (数据库系统概论|王珊)第一章绪论-第三节:数据库系统的结构