u-boot启动流程分析

12 篇文章 0 订阅
4 篇文章 0 订阅
本文详细介绍了u-boot的启动流程,解析了u-boot源码的组织结构,包括board、cpu、lib_xxx等目录的功能。同时,列举了编译结果中的不同映像文件及用途,如u-boot.bin。还提到了u-boot工具,如mkimage,以及常用命令与环境变量的使用,如bootdelay和bootcmd。
摘要由CSDN通过智能技术生成

理解u-boot的启动流程,是理解u-boot工作原理的基础,也是掌握u-boot移植方法的必要知识。

u-boot源码结构

从网上下载得到u-boot源码包,此处使用的是u-boot-2009.11.tar.bz2
解压有30多个子目录,分别存放其规律,可以分为3类
第一类目录与处理器体系结构或者开发板硬件直接相关
第二类目录是一些通用的函数或驱动程序
第三类目录是u-boot的应用程序、工具或文档

目录特 性解释说明
board平台依赖存放电路板相关的目录文件,如RPXlinte(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86)等目录
cpu平台依赖存放CPU相关的目录文件,如mpc8xx、ppc4xx、arm720t、arm920t、xscale、i386等目录
lib_xxx平台依赖与体系解构相关的库文件,如与ARM相关的库放在lib_arm中
include通用u-boot使用的头文件,还有支持各种硬件平台的编译文件、系统的配置文件和支持文件系统的文件。该目录下的configs目录中有与开发板相关的配置文件
common通用实现u-boot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应的就是cmd_bootm.c
lib_generic通用通用库函数的实现
net通用与网络协议栈相关的代码,BOOTP、TFTP、RARP、和NFS文件系统的实现
fs通用支持文件系统,如cramfs、fat、fdos、jffs2和registerfs
drivers通用u-boot支持的设备驱动程序都放在该目中,如各种网卡、支持CFI的Flash、串口和USB等
disk通用对磁盘的支持
doc通用文件目录。uboot有非常完善的文档,推荐大家参考阅读
tools通用生成u-boot的工具,如mkimage、crc等
examples通用一些独立运行的应用程序的例子,如helloword

编译结果

编译完成之后,可以得到u-boot各种个样式的映像文件和符号表。

文件名称说 明文件名称说明
system.mapu-boot映像的符号表u-boot.binu-boot映像原始的二进制格式
u-bootu-boot映像的ELF格式u-boot.srecu-boot映像的S-Record格式

u-boot的三种映像格式都可以烧写到Flash中,但需要看加载器能否识别这些格式。一般u-boot.bin最为常用,直接按照二进制格式下载,并且按照绝对地址烧写到Flash中即可。

u-boot工具

在tools目录下会生成u-boot工具,这些工具有时也经常用到。

工具名称说明工具名称说明
bmp_log制作logo的位图结构体img2srec转换S-Record格式映像
envcrc效验u-boot内部的环境变量mkimage制作uImage格式映像
gen_eth_addr生成以太网接口MAC地址updateru-boot自动更新升级工具

这些工具都有源代码,可以参考改写它们。其中mkimage是很常用的一个工具,Linux的内核映像和initramfs文件系统映像都可以用该工具转换成u-boot所需的格式。

u-boot 常用命令与测试

在制作好u-boot镜像后,可以通过JTAG和JLINK将其烧写到Flash中。在u-boot上电启动后,敲任意键可以退出自动启动状态,进入命令行。
命令:help或者?
功能:查看当前u-boot版本中支持的所有命令

环境变量相关命令

和shell类似,u-boot也有环境变量。

环境变量解释说明
bootdelay执行自动启动(bootcmd中的命令) 的等候秒数
baudrate串口控制台的波特率
netmask以太网的网络掩码
ethaddr以太网的MAC地址
bootfile默认下载的文件名
bootargs传递给Linux内核的启动参数
bootcmd自动启动时执行命令
serveripTFTP服务器端的IP地址
ipaddr本地的IP地址
stdin标准输入设备,一般是串口
stdout标准输出,一般是串口,也可是LCD(VGA)
stderr标准出错,一般是串口,也可是LCD(VGA)

要查看板子上的环境变量的值可使用printenv命令,没有设置的环境变量不会打印出来。也可以自己定义环境变量,并在命令中使用${环境变量}来调用它,也可以删除这个环境变量。设置环境变量命令是setenv
其格式为:setenv name value
第一个参数是环境变量名称。
第二个参数是要设置的值,如果没有第2个参数,则表示删除这个环境变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值