分享一份關(guān)于RK3568裸機的SPL and DTB筆記
2025/2/18 13:25:34??????點擊:
正在玩 firefly linux sdk 中的 uboot,對其中的 spl 做個筆記。
firefly linux sdk 包含linux源碼,uboot源碼,rootfs 之類的東西,總共16G還大點!
為便于描述,firefly linux sdk uboot 簡稱為 uboot。
uboot 完整的編譯指令:
make rk3568_defconfig
./make.sh rk3568
生成的與 spl 相關(guān)的文件在uboot 的 ./spl/ 目錄中
u-boot-spl 編譯鏈接輸出的 elf 格式文件
u-boot-spl-nodtb.bin 從u-boot-spl中dump出來的二進制代碼文件
u-boot-spl-dtb.bin 帶spl-dtb的二進制代碼文件
u-boot-spl.dtb 第一階段的 dtb 文件,由 SPL 專用。
編譯快結(jié)束時會執(zhí)行: cp spl/u-boot-spl-dtb.bin spl/u-boot-spl.bin
spl/u-boot-spl.bin 就是用來生成 rk3568_loader.bin 的,是 loader 中的 spl 階段的代碼。
第一階段的 dtb 被添加到 spl.bin 的尾部,它來自:
cp dts/dt-spl.dtb spl/u-boot-spl.dtb
dts/dt-spl.dtb 又來自:

arch/arm/dts/rk3568-evb.dtb 來自 rk3568-evb.dts
因為 rk3568-evb.dts 引用了C語言頭文件,所以在編譯為dtb之前會先由gcc編譯一遍
然后才是由 dtc 編譯為 dtb 文件。
arch/arm/dts/rk3568-evb.dts -> 經(jīng) gcc -> 經(jīng) dtc 得 arch/arm/dts/rk3568-evb.dtb
arch/arm/dts/rk3568-evb.dtb -> 經(jīng) fdtgrep 得 dts/dt-spl.dtb
以上就是第一階段的 dtb。
SPL 運行的時候,會在存儲上 0x4000 扇區(qū)處找 FIT Image 并加載之。
(0x4000這個扇區(qū)地址并非所有 spl 版本都一樣,有可能是0x5000,0x8000, 0x9000)
這個FIT Image 就是 uboot.img (FIT格式的img)
這個 uboot.img 里面包含有:幾個 atf.bin、一個 tee.bin、一個fdt、uboot.bin (uboot真身代碼)
這里面的 fdt 就是 SPL要用的第二階段的 dtb ,但理論上用處不大,因為:
spl 安裝完幾個 atf.bin 后會, 會馬上切換到 EL2 去運行 uboot真身代碼。
uboot真身代碼運行的時候,會找 rk-kernel.dtb,它不用spl的dtb!
不過,它去哪個位置找 rk-kernel.dtb ,有幾個可能的地方:
1). 找 resource 分區(qū)里面的 resource.img 中的 rk-kernel.dtb
2). 找 boot 分區(qū)里面的 boot.img 里面的 resource 中的 rk-kernel.dtb
3). recovery 啟動模式時可能還會去 recovery 分區(qū)找,這個不確定
當(dāng)1). 和2). 同時存在時uboot會使用哪一個,沒測試過。。。
附幾條命令:
fdtdump uboot.img
./RKTools/mkimage 生成fit img
./scripts/fit-unpack.sh 拆解fit img
../rkbin/tools/resource_tool rk-kernel.dtb logo.bmp logo_kernel.bmp 生成 resource.img
dtc -O dtb -o ./ubootSpl.dtb -b 0 -i ./scripts/ ./rk3568_u-boot-spl.dts 編譯 dts
固件解包:僅針對 firefly 官方固件(如下圖)

解包fit img:
./scripts/fit-unpack.sh -f /mnt/e/Dev/EE/Rockchip/RKDevTool_Release_v2.84/Output/Android/Image/boot.img -o ./a_imgs
反編譯dtb為dts:
fdtdump ./a_imgs/rk-kernel.dtb >./a_imgs/rk-kernel.dis
解壓資源img:
../rkbin/tools/resource_tool --unpack --verbose --image=./a_imgs/resource ./a_imgs/
firefly linux sdk 包含linux源碼,uboot源碼,rootfs 之類的東西,總共16G還大點!
為便于描述,firefly linux sdk uboot 簡稱為 uboot。
uboot 完整的編譯指令:
make rk3568_defconfig
./make.sh rk3568
生成的與 spl 相關(guān)的文件在uboot 的 ./spl/ 目錄中
u-boot-spl 編譯鏈接輸出的 elf 格式文件
u-boot-spl-nodtb.bin 從u-boot-spl中dump出來的二進制代碼文件
u-boot-spl-dtb.bin 帶spl-dtb的二進制代碼文件
u-boot-spl.dtb 第一階段的 dtb 文件,由 SPL 專用。
編譯快結(jié)束時會執(zhí)行: cp spl/u-boot-spl-dtb.bin spl/u-boot-spl.bin
spl/u-boot-spl.bin 就是用來生成 rk3568_loader.bin 的,是 loader 中的 spl 階段的代碼。
第一階段的 dtb 被添加到 spl.bin 的尾部,它來自:
cp dts/dt-spl.dtb spl/u-boot-spl.dtb
dts/dt-spl.dtb 又來自:

arch/arm/dts/rk3568-evb.dtb 來自 rk3568-evb.dts
因為 rk3568-evb.dts 引用了C語言頭文件,所以在編譯為dtb之前會先由gcc編譯一遍
然后才是由 dtc 編譯為 dtb 文件。
arch/arm/dts/rk3568-evb.dts -> 經(jīng) gcc -> 經(jīng) dtc 得 arch/arm/dts/rk3568-evb.dtb
arch/arm/dts/rk3568-evb.dtb -> 經(jīng) fdtgrep 得 dts/dt-spl.dtb
以上就是第一階段的 dtb。
SPL 運行的時候,會在存儲上 0x4000 扇區(qū)處找 FIT Image 并加載之。
(0x4000這個扇區(qū)地址并非所有 spl 版本都一樣,有可能是0x5000,0x8000, 0x9000)
這個FIT Image 就是 uboot.img (FIT格式的img)
這個 uboot.img 里面包含有:幾個 atf.bin、一個 tee.bin、一個fdt、uboot.bin (uboot真身代碼)
這里面的 fdt 就是 SPL要用的第二階段的 dtb ,但理論上用處不大,因為:
spl 安裝完幾個 atf.bin 后會, 會馬上切換到 EL2 去運行 uboot真身代碼。
uboot真身代碼運行的時候,會找 rk-kernel.dtb,它不用spl的dtb!
不過,它去哪個位置找 rk-kernel.dtb ,有幾個可能的地方:
1). 找 resource 分區(qū)里面的 resource.img 中的 rk-kernel.dtb
2). 找 boot 分區(qū)里面的 boot.img 里面的 resource 中的 rk-kernel.dtb
3). recovery 啟動模式時可能還會去 recovery 分區(qū)找,這個不確定
當(dāng)1). 和2). 同時存在時uboot會使用哪一個,沒測試過。。。
附幾條命令:
fdtdump uboot.img
./RKTools/mkimage 生成fit img
./scripts/fit-unpack.sh 拆解fit img
../rkbin/tools/resource_tool rk-kernel.dtb logo.bmp logo_kernel.bmp 生成 resource.img
dtc -O dtb -o ./ubootSpl.dtb -b 0 -i ./scripts/ ./rk3568_u-boot-spl.dts 編譯 dts
固件解包:僅針對 firefly 官方固件(如下圖)

解包fit img:
./scripts/fit-unpack.sh -f /mnt/e/Dev/EE/Rockchip/RKDevTool_Release_v2.84/Output/Android/Image/boot.img -o ./a_imgs
反編譯dtb為dts:
fdtdump ./a_imgs/rk-kernel.dtb >./a_imgs/rk-kernel.dis
解壓資源img:
../rkbin/tools/resource_tool --unpack --verbose --image=./a_imgs/resource ./a_imgs/
- 上一篇:2025.2.25 經(jīng)驗分享會 2025/2/27
- 下一篇:【特別報道】2025年開工大吉,加油! 2025/2/10