所需工具
resource_tool
源码位于 /u-boot/tools/resource_tool 目录下,编译 uboot 后即可生成对应的二进制文件。
dtc
源码位于 /kernel/scripts/dtc 目录下,编译 kernel 后即可生成对应二进制文件。
一、解压
#解压 resource.img
#sudo resource_tool --verbose --unpack --image=resource.img
lodge@lodge-ThinkPad-E560:~/test$ ls
resource.img
lodge@lodge-ThinkPad-E560:~/test$ sudo ../rk_3399/u-boot/tools/resource_tool/resource_tool --verbose --unpack --image=resource.img
Dump header:
partition version:0.0
header size:1
index tbl:
offset:1 entry size:1 entry num:2
Dump Index table:
entry(0):
path:rk-kernel.dtb
offset:3 size:80387
D/dump_file(187): try to dump entry:rk-kernel.dtb
D/mkdirs(175): mkdir:out
entry(1):
path:logo.bmp
offset:161 size:127818
D/dump_file(187): try to dump entry:logo.bmp
D/mkdirs(175): mkdir:out
Unack resource.img to out successed!
lodge@lodge-ThinkPad-E560:~/test$ ls
out resource.img
lodge@lodge-ThinkPad-E560:~/test$
#生成的 out 目录需要 root 权限才能访问;
lodge@lodge-ThinkPad-E560:~/test$ su root
root@lodge-ThinkPad-E560:/home/lodge/test# cd out/
root@lodge-ThinkPad-E560:/home/lodge/test/out# ls
logo.bmp rk-kernel.dtb
#logo.bmo 是开机 logo,rk-kernel.dtb 是 dts 的二进制文件;
#解压 dtb 文件
#dtc -I dtb -O dts -o xxx.dts xxx.dtb
root@lodge-ThinkPad-E560:/home/lodge/test/out# /home/lodge/rk_3399/kernel/scripts/dtc/dtc -I dtb -O dts -o rk3399.dts rk-kernel.dtb
root@lodge-ThinkPad-E560:/home/lodge/test/out# ls
logo.bmp rk3399.dts rk-kernel.dtb
root@lodge-ThinkPad-E560:/home/lodge/test/out#
二、打包
#resource_tool --verbose --pack out/logo.bmp out/rk-kernel.dtb resource.img
root@lodge-ThinkPad-E560:/home/lodge/test/out# ls
logo.bmp rk3399.dts rk-kernel.dtb
root@lodge-ThinkPad-E560:/home/lodge/test/out# /home/lodge/rk_3399/u-boot/tools/resource_tool/resource_tool --verbose --pack ./logo.bmp ./rk-kernel.dtb resource.img
D/main(107): try to pack 3 files.
D/write_header(370): try to write header...
D/write_index_tbl(386): try to write index table...
D/get_file_size(322): try to get size(./rk-kernel.dtb)...
D/get_file_size(328): path:./rk-kernel.dtb, size:80387
D/write_file(333): try to write file(./rk-kernel.dtb) to offset:3...
D/get_file_size(322): try to get size(./rk-kernel.dtb)...
D/get_file_size(328): path:./rk-kernel.dtb, size:80387
D/write_index_tbl(404): try to write index entry(./rk-kernel.dtb)...
D/write_index_tbl(422): mod fdt path:./rk-kernel.dtb -> rk-kernel.dtb...
D/get_file_size(322): try to get size(./logo.bmp)...
D/get_file_size(328): path:./logo.bmp, size:127818
D/write_file(333): try to write file(./logo.bmp) to offset:161...
D/get_file_size(322): try to get size(./logo.bmp)...
D/get_file_size(328): path:./logo.bmp, size:127818
D/write_index_tbl(404): try to write index entry(./logo.bmp)...
Pack to resource.img successed!
root@lodge-ThinkPad-E560:/home/lodge/test/out# ls
logo.bmp resource.img rk3399.dts rk-kernel.dtb
root@lodge-ThinkPad-E560:/home/lodge/test/out#