PanGu开发板支持eMMC,QSPI Flash,SD Card方式的启动。

启动方式配置文件适用设备
支持从SD,eMMC启动pangu_basic_defconfigPanGu eMMC版本

PanGu开发板使用U-Boot作为整个系统的启动加载程序。构建U-Boot后得到两个文件,u-boot-spl.stm32和u-boot.img。u-boot-spl.stm32再spl目录下,u-boot.img在u-boot的根目录下。可写入到不同存储设备内。
U-Boot的源代码在开发资源包的"Source/Linux"目录下存放,文件名为u-boot-xxxx.tar.gz,这里的xxxx代表版本标识。以实际为主。
下载好U-Boot的代码后,在工作目录下解压,并请确认当前shell已加载SDK的环境变量。

$ cd $HOME/PanGu
$ tar xvf u-boot-st.tar.gz

U-Boot支持多种boot chain,Basic boot 和 Trusted boot。

Basic boot

$ make pangu_basic_defconfig
$ make DEVICE_TREE=stm32mp157a-panguboard all

Trusted boot

$ make pangu_trusted_defconfig
$ make DEVICE_TREE=stm32mp157a-panguboard all

编译结束后,在当前目录下可以查看当前目录和spl目录,可以看到对应的文件。

$ ls
api     config.mk      cscope.po.out  drivers   include   MAINTAINERS  scripts     tools               u-boot.dtb      u-boot.map
arch    configs        ctags          dts       Kbuild    Makefile     spl         u-boot              u-boot-dtb.bin  u-boot-nodtb.bin
board   cscope.files   disk           env       Kconfig   net          System.map  u-boot.bin          u-boot-dtb.img  u-boot.srec
cmd     cscope.in.out  doc            examples  lib       post         tags        u-boot.cfg          u-boot.img      u-boot.sym
common  cscope.out     Documentation  fs        Licenses  README       test        u-boot.cfg.configs  u-boot.lds
$ ls spl/
arch   common   dts  include     u-boot-spl      u-boot-spl-dtb.bin  u-boot-spl-nodtb.bin  u-boot-spl.stm32.log
board  disk     env  lib         u-boot-spl.bin  u-boot-spl.lds      u-boot-spl-pad.bin
cmd    drivers  fs   u-boot.cfg  u-boot-spl.dtb  u-boot-spl.map      u-boot-spl.stm32

构建完成后,会生成一些文件,以下是文件说明

文件说明
spl/u-boot-spl.stm32包含STM32信息头的SPL 二进制文件,在Basic boot chain下用于FSBL
u-boot.img包含UImage信息头的U-Boot 二进制文件,在Basic boot chain下用于SSBL
u-boot.stm32包含STM32信息头的U-Boot二进制文件,在Trusted boot chain下用于SSBL
u-bootU-Boot的ELF文件,用于GDB调试
spl/u-boot-splSPL的ELF文件,通常用于gdb调试

常见问题

版本管理

kernel开发中,建议使用git来管理源代码,更便捷的管理代码的多个版本。如果在修改kernel并测试后,代码无误,可以提交到本地仓库中,这样后面使用Yocto来构建系统也更容易。

替换SD卡的U-Boot

测试新的U-Boot程序时,可以使用SD卡启动方式,可以快速验证U-Boot是否正常启动,可以将U-Boot写入SD卡的对应分区。
如下代码中的/dev/sdb是SD卡设备,具体设备以实际为主,请确认后再操作,避免对现有硬盘的损坏。更新文件前需要先对SD做分区操作,如果SD已经有分区可以不需要本步骤。

$ sudo sgdisk --resize-table=128 -a 1 \
     -n 1:34:545      -c 1:fsbl1 \
     -n 2:546:1057    -c 2:fsbl2 \
     -n 3:1058:5153   -c 3:ssbl \
     -n 4:5154:136225 -c 4:bootfs \
     -n 5:136226:     -c 5:rootfs \
     -A 4:set:2 \
     -p /dev/sdb

Basic bootchain下替换SD中的Bootloader

$ dd if=u-boot-spl.stm32 of=/dev/sdb1 conv=fdatasync
$ dd if=u-boot-spl.stm32 of=/dev/sdb2 conv=fdatasync
$ dd if=u-boot.img of=/dev/sdb3 conv=fdatasync

Trusted bootchain下替换SD中的Bootloader

$ dd if=u-boot.stm32 of=/dev/sdb3 conv=fdatasync

Basic bootchain下替换eMMC中的Bootloader
Basic bootchain下的Bootloader由U-Boot提供,把编译后的U-Boot镜像文件spl.stm32和u-boot.img写入到eMMC。
以下命令操作在开发板上运行,执行错误或文件写入错误,会导致开发板无法启动。如出现无法启动的情况,请重新烧写开发板即可。

# echo 0 > /sys/class/block/mmcblk1boot0/force_ro
# echo 0 > /sys/class/block/mmcblk1boot1/force_ro
# dd if=spl.stm32 of=/dev/mmcblk1boot0 conv=fdatasync
# dd if=spl.stm32 of=/dev/mmcblk1boot1 conv=fdatasync
# echo 1 > /sys/class/block/mmcblk1boot0/force_ro
# echo 1 > /sys/class/block/mmcblk1boot1/force_ro
# mmc bootpart enable 1 1 /dev/mmcblk1
# dd if=u-boot.img of=/dev/mmcblk1p1 conv=fdatasync

Trusted bootchain下替换eMMC中的Bootloader
Trusted bootchain下的U-Boot提供SSBL阶段的文件,例如u-boot.stm32,文件名以stm32结尾。

# dd if=u-boot.stm32 of=/dev/mmcblk1p1 conv=fdatasync
作者:SteveChen  创建时间:2024-09-18 11:47
最后编辑:SteveChen  更新时间:2024-09-18 11:47
上一篇:
下一篇: