BOOT0 - 启动引导功能配置
BOOT0 使用
本章节主要介绍一级bootloader使用。
目录结构
源码位于brandy/brandy-2.0/spl目录下,结构如下:
├── arch #芯片arch相关文件
├── board
│ └── sun300iw1p1 #存放各个板级的boot0配置
├── common #存放通用组件,如:GPT和env
├── drivers
├── fes #烧录阶段才执行,用于初始化dram。镜像只打包到固件中
├── include
├── Makefile
├── mk
├── nboot #常规启动阶段执行代码
├── pmboot #休眠唤醒阶段执行代码
├── sboot #安全启动阶段执行代码
├── simpleboot #特殊启动阶段执行的代码,用于初始化dram
├── solution #快启相关功能代码
└── tools
编译烧录使用
编译boot0的快捷命令是:
mboot0
根据spl/board/sun300iw1p1/目录下不同的mk文件,对应不同boot0的编译产物,根据不同阶段划分。
启动阶段编译产物如下,根据方案配置选择一下其中一个烧录到设备端flash
boot0_spinor_sun300iw1p1.bin #nor介质启动boot0,对应spinor.mk
boot0_nand_sun300iw1p1.bin #nand介质启动boot0,对应nand.mk
boot0_sdcard_sun300iw1p1.bin #emmc介质启动boot0,对应mmc.mk
boot0_spinorfastboot_sun300iw1p1.bin #nor介质快启boot0,对应spinorfastboot.mk
boot0_mmcfastboot_sun300iw1p1.bin #emmc介质快启boot0,对应mmcfastboot.mk
sboot_nor_sun300iw1p1.bin #nor介质安全启动boot0,对应sboot_nor.mk
烧录阶段编译产物如下,所有方案都是使用以下镜像。文件保留在固件中,不会烧录到设备端flash
fes1_sun300iw1p1.bin #对应fes.mk
休眠唤醒阶段编译产物如下,对应pmboot.mk,如:nor方案则使用pmboot_spinor_sun300iw1p1.bin
pmboot_spinor_sun300iw1p1.bin
pmboot_nand_sun300iw1p1.bin
pmboot_sdcard_sun300iw1p1.bin
配置说明
串口配置
boot0的串口配置位于 device/config/chips/{IC}/configs/{BOARD}/sys_config.fex
文件。
串口输出配置
通过修改sys_config.fex文件platform节点下的debug_mode来控制串口输出。
debug_mode为0时,boot0 printf函数打印不输出。需要使用pr_emerg函数才能打印。
debug_mode为1时,boot0打印放开,方便调试开发。
[platform]
debug_mode = 1
更换串口
通过修改sys_config.fex
文件uart_para
节点来修改烧录和启动阶段的boot0打印。
uart_debug_port
代表使用uart控制器编号,如:使用uart2就配置成2。
uart_debug_tx
代表tx引脚GPIO配置,uart_debug_rx
代表rx引脚GPIO配置。
[uart_para]
uart_debug_port = 0
uart_debug_tx = port:PD22<3><1><default><default>
uart_debug_rx = port:PD23<3><1><default><default>
常用功能
添加新的宏
通常情况下,新增一段自定义代码,添加一个新的宏去管控比较方便调试开发。
新的宏以 CFG_ 开头,在 spl/board/sun300iw1p1
目录下的mk文件中添加。
比如:只想在 spinor
常电启动过程中添加一段代码,使用 CFG_TEST
的宏管控;则在 spinor.mk
文件中添加
CFG_TEST=y
方案使用自定义boot0 bin文件
按照以下几步操作执行即可:
- 确定新方案是快启还是常电,基于已有mk文件复制一份新的mk文件,并重命名。 如:新方案是快启nor介质,指定新的boot0文件为test,则
cp board/sun300iw1p1/spinorfastboot.mk board/sun300iw1p1/test.mk
- 在board/sun300iw1p1/common.mk文件BOARD_BUILD_NBOOT添加新的mk名称,如添加一个test.mk
BOARD_BUILD_NBOOT=spinorfastboot mmcfastboot test
-
执行
mboot0
编译,即可看到cout快捷命令对应目录有boot0_test_sun300iw1p1.bin
-
修改
device/config/chips/{IC}/configs/{BOARD}/BoardConfig_nor.mk
,添加LICHEE_BOOT0_BIN_NAME
指定方案使用的boot0
LICHEE_BOOT0_BIN_NAME:=test
- 重新source,lunch打包烧录验证。
U-Boot 使用
目录结构
源码位于brandy/brandy-2.0/u-boot-2018目录,挑选常用的目录说明,结构如下:
├── arch #芯片arch相关文件
├── board
│ └──sunxi #板级公共功能实现
├── cmd #通用命令
├── common #社区通用功能
├── configs #defconfig配置
├── drivers #驱动目录
├── env #启动变量
├── include #通用头文件
├── lib #通用函数实现
├── sprite #量产烧写相关功能
编译烧录使用
编译uboot的快捷命令是:
muboot
编译产物有3个,如下:
u-boot-efex.bin #烧录阶段使用,只存在于固件中。对应sun300iw1p1_efex_defconfig
u-boot-spinor-sun300iw1p1.bin #nor介质常电启动使用,快启不使用
u-boot-sun300iw1p1.bin #nand和emmc介质常电启动使用
配置说明
方案通过 device/config/chips/{IC}/configs/{BOARD}/BoardConfig_nor.mk
或 BoardConfig.mk
文件的
LICHEE_BRANDY_DEFCONF
变量指定 uboot
的使用的 defconfig
文件。如:
LICHEE_BRANDY_DEFCONF:=sun300iw1p1_v821_defconfig
则此文件对应编译产物u-boot-sun300iw1p1.bin;编译时nor方案会自动指定配置为sun300iw1p1_v821_nor_defconfig,对应编译产物为u-boot-spinor-sun300iw1p1.bin
常用功能
添加新的宏配置
操作步骤如下:
- 修改
Kconfig
。不同目录下都有Kconfig
文件,找一个合适的添加。如:添加mytest
配置
config mytest
bool "this is mytest" #配置描述
default n #默认不使能
help
xxx #详细描述
- 在对应的
defconfig
文件使能新建的配置
CONFIG_MYTEST=y
- 在
c
代码中使用CONFIG_MYTEST
宏去管控代码
命令行调试
按住键盘的 s
字母,然后上电,uboot串口检测到则会进入命令行。
执行help,则可以看到支持的命令。列举几个命令使用方法:
cmp
内存比较命令,比较两段内存,以一个 word
进行比较 count=X
,表示比较 X 个 word 字节的内存数据。
cmp addr1 addr2 count
fdt修改设备树命令;用法较多,参考:
fdt set <path> <prop> [<val>] - Set <property> [to <val>]
fdt mknode <path> <node> - Create a new node after <path>
fdt rm <path> [<prop>] - Delete the node or <property>
env相关命令
printenv #打印所有env变量
setenv name value #设置变量名name的值为value
saveenv #保存env变量到flash