courses:embedded_system:uboot
U-boot指令综合训练
Bootloader是在操作系统运行之前的一段程序。这段程序完成如下功能:初始化硬件设备、建立内存空间映射表,从而建立适当的系统软硬件环境,为调用操作系统内核做好准备。U-boot是嵌入式Linux的常用引导加载程序之一。
U-boot为Universal Boot Loader的缩写,其源码目录、编译形式与Linux内核相似。开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。
主要功能
- 系统引导
- 支持NFS挂载
- 基本辅助功能,如操作系统接口功能
- 支持目标板环境参数多种存储方式,如Flash、NVRAM等
- CRC32校验
- 支持各类设备驱动
- 上电自检
- 特殊功能,如XIP内核引导
工作模式
启动加载模式 | 正常工作模式,将嵌入式操作系统从Flash中加载到SDRAM中运行 |
下载模式 | 将内核映像或者根文件系统映射等从PC机下载到目标板的Flash中 |
启动流程
分为stage1和stage2两个阶段。
state1:
CPU体系结构的代码,如设备初始化代码,通常放在stage1中,多用汇编语言编写,短小精悍。
- 定义可执行映像的全局入口
- 设置异常向量
- 设置CPU速度、时钟频率及中断控制寄存器
- 初始化内存控制器
- 将ROM中的程序复制到RAM中
- 初始化堆栈
- 转到RAM中执行
stage2:
通常用C语言实现,以实现复杂的功能,更好的可读性和可移植性。
- 调用一系列初始化函数
- 初始化Flash设备
- 初始化系统内存分配函数
- 若目标系统有NAND设备,则初始化该设备
- 若目标系统有显示设备,则初始化该设备
- 初始化相关网络设备,填写IP地址等
- 进入命令循环,接受用户从串口输入的命令,进行相应工作
U-boot训练准备工作
当需要更换或更新内核系统时,需要进入下载模式。U-boot的所有操作均通过指令完成。
1、将串口线与实验箱的DBUG调试串口连接、启动模式拨至NAND,配置好超级终端(hypertrm)或其他串口工具;
2、实验箱上电,在串口工具串口显示初始化加载信息,倒计时5s内按任意键进入下载模式;
3、选择q进入主菜单,验证相关boot命令。
常用命令
信息查询
命令 | 功能 |
---|---|
h\he\hel\help | 帮助 |
bdinfo | 打印板载结构信息 |
printenv | 打印环境变量 |
version | 显示U-boot、编译器、连接器的版本信息 |
存储器操作
命令 | 功能 |
---|---|
base | 打印或设置地址及偏移,如 base 0 , base 0x30000000 |
md <address> <length> | 显示内存,如 md 30000000 20 |
mw <address> <value> <length> | 修改内存,如 mw 20000000 123456 10 |
mm <address> | 存储区修改,如 mm 20000000 |
nm <address> | 交互式存储区修改 |
执行命令
命令 | 功能 |
---|---|
bootm | 从存储器启动应用程序映像,如 bootm 30000000 进入Linux系统 |
go <address> | 开始某段地址处的应用程序,如 go 20000000 |
下载命令
命令 | 功能 |
---|---|
loadb <address> | 经串口线加载二进制文件,键入命令后,需从串口发送二进制文件,如 loadb 20000000 |
go <address> | 开始某段地址处的应用程序,如 go 20000000 |
tftpboot <address> <hostIP: bf_name> | 使用TFTP协议经由网络加载映像文件 |
环境变量
命令 | 功能 |
---|---|
printevn | 打印环境变量 |
setenv | 设置环境变量 |
saveenv | 保存环境变量 |
run | 运行环境变量中的命令 |