U-Boot
简介
U-Boot 分为几个阶段:
- First stage bootloader
- TPL(Tertiary Program Loader)属于这一阶段
- Rockchip TPL 实现了额外的救砖模式
- TPL(Tertiary Program Loader)属于这一阶段
- U-Boot SPL(Secondary Program Loader)
- 用户可控制
- 额外硬件的初始化
- 加载 U-Boot 或直接加载 Linux
- 较为稳定,不常改变
- 完整的 U-Boot
- 交互式 Shell
- 引导监控器
- 调试命令
- 时常变化
- Linux 内核
U-Boot Shell
两个 shell
- 旧的集成 shell
- Busybox 移植过来的 HUSH
实用指令
| 指令 | 描述 | 备注 |
|---|---|---|
| help | --- | --- |
| echo | --- | \c 换行 |
| bdinfo | 查看系统信息 | --- |
| mw | 写内存 | --- |
| md | 读内存 | 后面加 .b .w .l .q 转换格式 |
| mm | 交互式修改内存 | 按q来推出,按-返回上个位置,按enter跳过 |
| nm | 交互式修改内存(不递增地址) | --- |
| cp | 复制内存 | --- |
| cmp | 对比内存 | --- |
| printenv | 打印环境变量 | --- |
| env | 环境变量操作 | --- |
| saveenv | 持久化环境变量 | --- |
| run | 解释环境变量 | --- |
| setexpr | 求值 | 能进行取址运算,能使用正则表达式修改字符串 |
| true,false | 设置布尔量 | 修改 $? 的值 |
| test | 检查表达式的布尔值 | --- |
| mmc,usb,sata,nand | 处理存储设备 | --- |
| ls,load | 通用fs操作 | 支持 X/Y 调制每,输入 loady,然后从另一台电脑使用 GNU Sceen 发送 bin 文件 |
| ubi | --- | --- |
| boot | 启动 | --- |
| iminfo | 查看镜像信息 | --- |
| imxtract | 提取镜像内容 | --- |
| fdt | 检查、修改设备树 | --- |
| gpio | 操作 GPIO | --- |
| i2c | i2c控制指令 | --- |
环境变量
U-Boot 使用环境变量来持久化脚本。
必须注意逃逸字符:
=> env set foo bar
=> env set quux echo $foo <-- wrong: quux is set to `bar`
=> env set foo bzz
=> run quux
bar
=> env print quux
quux=echo bar <-- quux is expansed to `echo bar`
=> env set quux echo \$foo <-- correct: quux is set to `echo $foo`
=> run quux
bzz
=> env print quux
quux=echo $foo
特殊环境变量:
| 名称 | 描述 |
|---|---|
| ver | --- |
| stdin,stdout,stderr | --- |
| loadaddr | 默认加载地址 |
| filesize | 加载的文件大小 |
| bootargs | 传递给 Linux 的命令行参数 |
| bootcmd | 默认启动命令 |
| preboot | autoboot前执行的脚本 |
| ipaddr,netmask,serverip,gatewayip | --- |
| ethaddr,eth1addr | --- |
表达式
- 条件表达式:
if <expr> ; then <stmt> ; else <command> ; fi - for 循环:
for i in a b c d; do <stmt> ; done - while 循环:
while <bool>; do <stmt> ; done
系统镜像
镜像格式:
- (z)Image
- Linux 二进制
- 没有位腐烂(bitrot)保护
- 只是设置寄存器然后跳转
- 可选的分离设备树
- uImage
- 不再使用的旧格式
- crc 校验
- 单文件
- 可选的分离设备树
- fitImage(Flattened-Image-Tree Image)
- 基于设备树
- 支持多文件
- 每个条目可设置校验算法
- 支持数字签名
引导内核
- 加载系统镜像到指定地址
- 加载设备树到指定地址
- 设置加载参数
bootargs,例如 console 的波特率可以在这里设置 - 使用
boot命令,给出镜像地址和设备树地址
=> env set bootargs console=ttyS0,115200
=> load mmc 0:1 0x82000000 boot/Image-xxxx
=> kiad mmc