mtk 7986/7988板子启动过程及u-boot编译
系统上电后从BL1(存储在CPU内的BootRom中)开始执行,BL1会遍历所有可启动的设备(可以通过引脚改变引导顺序)
BL1启动后会对系统架构和平台进行初始化,注意BL1是在CPU内置的RAM中运行的,不使用外部DDR内存,然后BL1会从指定的存储设备上加载BL2程序(安全启动过程中也叫ATF),BL2也是在内置RAM中运行的,但BL2对DDR内存进行初始化,然后加载BL31(SRAM)和BL33(DDR内存),然后运行BL31对BL33进行初始化并把执行权限交给BL33(U-Boot本体)。
在mtk 7986板子上生成bl2,bl31,bl33镜像
https://downloads.openwrt.org/snapshots/targets/mediatek/filogic/
这里面preloader.bin 结尾的文件就是BL2,镜像格式是MediaTek BootROM Loadable Image
编译生成的bl2.bin是不能被mtk cpu识别的,需要用mkimage把bin封装为BootROM可解析的格式,即BootROM Image格式,里面有一个头部描述的bl2的基本信息。
查看BootROM镜像信息
bl31-uboot.fip 这个是BL31和BL33的合体,镜像格式是FIP(Firmware Image Package),FIP可以包含多个区段,每个区段一个镜像。查看fip的信息:
uboot编译
- 编译bl33
git clone https://github.com/frank-w/u-boot.git
git checkout 2022-10-r3
修改build.sh修改启动设备(board和device)
./build.sh importconfig
./build.sh build
- 编译bl2和bl31并生成u-boot镜像
git checkout r3-atf
修改build.sh中的启动设备(board和device)
./build.sh importconfig
./build.sh build
./build.sh rename
最后得到bpi-r3_spim_nand_bl2.img和bpi-r3_spim_nand_fip.bin
如果想要emmc,nor等介质的u-boot修改build.sh里在的device即可。
参考
https://www.cnblogs.com/arnoldlu/p/14175126.html
https://wiki.fw-web.de/doku.php?id=en:bpi-r3:uboot