uboot spl学习

移植最原始的uboot和kernel到rk3288开发板正常启动,使用这个方法学习uboot的spl功能,kernel最小化dts后很容易跑通,本章重点学习uboot的spl功能。

目录

一,代码源

二,打包方式研究

1,简化后的打包相关的文件

2,bin文件以及打包脚本的说明

(1)打包update.img

(2)uboot生成loader

[三,uboot spl跑通uart](#三,uboot spl跑通uart)

1,Kconfig修改

2.Configs修改

3,arch/arm/mach-rockchip/rk3288-board-spl.c


一,代码源

kernel代码来自​https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.4.189.tar.xz​

uboot代码来自https://ftp.denx.de/pub/u-boot/u-boot-2017.09.tar.bz2

二,打包方式研究

1,简化后的打包相关的文件

rkbin/

├── bin

│ └── rk32

│ ├── rk3288_ddr_400MHz_v1.08.bin

│ └── rk3288_usbplug_v2.56.bin

├── RKBOOT

│ └── RK3288MINIALL.ini

└── tools

└── boot_merger

rockdev/

├── MiniLoaderAll.bin -> ../u-boot/rk3288_loader_v1.08.256.bin

├── parameter.txt

└── uboot.img -> ../u-boot/u-boot.img

tools/

└── linux

└── Linux_Pack_Firmware

└── rockdev

├── afptool

├── Image -> ../../../../rockdev/

├── package-file -> rk3288-package-file

├── rk3288-mkupdate.sh

├── rk3288-package-file

└── rkImageMaker

2,bin文件以及打包脚本的说明

(1)打包update.img

打包update.img的脚本rk3288-mkupdate.sh简化后就两条,其他都是铺垫:

./afptool -pack ./ Image/update.img

./rkImageMaker -RK320A Image/MiniLoaderAll.bin Image/update.img update.img -os_type:androidos

afptool是Android固件包工具(Android Firmware Package Tool)的简称,用于创建和解析Rockchip的Android固件包。

功能概述:

将多个镜像文件打包成一个Rockchip的AF(Android Firmware)格式的固件包,通常命名为update.img。

使用场景:

在Rockchip的Android系统开发中,通常需要将多个分区镜像(如bootloader、kernel、system、vendor等)打包成一个固件包,以便通过Rockchip的升级工具(如RKDevTool)进行烧录。

打包固件:

./afptool -pack ./ Image/update.img

其中,<image_dir>是包含多个分区镜像文件的目录,update.img是输出的AF格式固件包

rkImageMaker 是将 boot.img 等镜像与 loader 合并,并添加 IDB 头,生成完整的可烧写固件。

主要功能:

将多个镜像文件(loader、boot、system等)合并成一个固件镜像。

在固件镜像中添加 Rockchip 特定的 IDB 头(ID Block)和校验信息。

命令格式:

./rkImageMaker -RK320A Image/MiniLoaderAll.bin Image/update.img update.img -os_type:androidos

(2)uboot生成loader

uboot使用boot_merger工具将rk3288_ddr_400MHz_v1.08.bin和rk3288_usbplug_v2.56.bin和spl组合成rk3288_loader_v1.08.256.bin文件作为引导程序,下面是从uboot的make.sh抠出来的关键脚本。

boot_merger 是 Rockchip 开发的一个工具,主要功能:

合并多个镜像:将 TPL、SPL、U-Boot、ATF 等合并成单个文件

添加 Rockchip 头部:添加 Rockchip 特定的头部信息

生成 loader:生成可以被 Rockchip BootROM 识别的加载器

三,uboot spl跑通uart

1,Kconfig修改

ARCH_ROCKCHIP关闭CMD_FASTBOOT/FASTBOOT/USB_FUNCTION_FASTBOOT

ROCKCHIP_SPL_RESERVE_IRAM默认值改成0x0 这个是ATF的reserve值

SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR default 0x4000 if ARCH_ROCKCHIP

2.Configs修改

关闭config

CONFIG_SPL_STACK_R

CONFIG_SPL_STACK_R_ADDR

CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN

CONFIG_FASTBOOT_FLASH

CONFIG_FASTBOOT_FLASH_MMC_DEV

打开config

CONFIG_DEBUG_UART_BOARD_INIT=y

CONFIG_DEBUG_UART_ANNOUNCE=y

CONFIG_SPL_SERIAL_SUPPORT=y

3,arch/arm/mach-rockchip/rk3288-board-spl.c

增加函数board_debug_uart_init

void board_debug_uart_init(void)

{

//待实现,初始化uart

}

board_init_f函数初始位置增加

debug_uart_init();

printch('b');

printhex8(0x5678);

printascii("feifei test once");

printascii("\n");

相关推荐
Devlab3 小时前
LVGL设计大师——网页版anyui来了!!
嵌入式硬件·物联网·低代码·ui·iot
ltl3 小时前
存储性能建模:IOPS、吞吐与延迟
linux
刘某的Cloud5 小时前
ceph osd 导入导出 rbd volume 卷
linux·运维·ceph·volume
酸菜。7 小时前
dw_axi_dmac总结
linux
神奇霸王龙7 小时前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
zlinear数据采集卡8 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛139246256738 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
小绫网络安全9 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器
allforgood10 小时前
控制启动过程
linux·运维·服务器
西安景驰电子10 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php