3.17. Pre-Boot Program
PBP(Pre-Boot Program) 是 ZX 芯片平台启动过程中的一段程序,在 BROM 程序跳转执行 SPL 之前, 运行的代码。 PBP 程序用于初始化一些不开放的硬件模块,比如 DRAM 控制器的初始化。
3.17.1. 存放位置
PBP 程序是以二进制形式保存在 SDK 中,通常位于:
target/<chip>/common/<chipname>.pbp
在 mk_image.py
生成镜像文件的过程中,PBP 程序与 SPL 程序一起被打包到 AIC 启动镜像文件当中。
具体配置可以查看对应项目的 image_cfg.json
文件。

3.17.2. 何时运行
正常启动过程中,BROM 会检查 PBP 程序是否存在,如果存在,则跳转执行 PBP 程序。PBP 程序执行完毕, 会返回到 BROM。BROM 则继续跳转执行 SPL 程序。

3.17.3. 参数配置
不同项目,可能需要传递一些配置参数给 PBP 使用,可以通过 AIC 启动镜像的 Private data area
保存这些参数。PBP 在被执行时可以得到该区域的地址和长度,然后自行解析数据,得到具体的参数。

图 3.18 Private data 与 PBP 的保存位置
PBP 程序运行时,可以得到 Private data area
的地址。
void pbp_main(u32 boot_param, void *priv_addr, u32 priv_len)
{
...
}