18a334094SJoseph Chen#!/bin/bash 28a334094SJoseph Chen# SPDX-License-Identifier: GPL-2.0 38a334094SJoseph Chen# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. 48a334094SJoseph Chenset -e 58a334094SJoseph Chen 68a334094SJoseph Chenusage() { 78a334094SJoseph Chen cat >&2 << USAGE 88a334094SJoseph Chenusage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT 98a334094SJoseph Chen 108a334094SJoseph Chenoptional arguments: 118a334094SJoseph Chen -h, --help show this help message and exit 128a334094SJoseph Chen -z pack compressed kernel image 138a334094SJoseph Chen --boot_img BOOT_IMG path to the original boot image 148a334094SJoseph Chen --out OUT path to out binaries (default: out) 158a334094SJoseph Chen --kernel KERNEL path to the new kernel 168a334094SJoseph Chen --ramdisk RAMDISK path to the new ramdisk 178a334094SJoseph Chen --second SECOND path to the new 2nd bootloader (default: resource.img) 188a334094SJoseph Chen --dtb DTB path to the new dtb 198a334094SJoseph Chen --recovery_dtbo RECOVERY_DTBO 208a334094SJoseph Chen path to the new recovery DTBO 218a334094SJoseph Chen -o OUTPUT, --output OUTPUT 228a334094SJoseph Chen output file name 238a334094SJoseph ChenUSAGE 248a334094SJoseph Chen} 258a334094SJoseph Chen 268a334094SJoseph Chen# Parse command-line arguments 278a334094SJoseph Chenwhile [ $# -gt 0 ]; do 288a334094SJoseph Chen case $1 in 298a334094SJoseph Chen --boot_img) 308a334094SJoseph Chen boot_img=$2 318a334094SJoseph Chen shift 2 328a334094SJoseph Chen ;; 338a334094SJoseph Chen --out) 348a334094SJoseph Chen out=$2 358a334094SJoseph Chen shift 2 368a334094SJoseph Chen ;; 378a334094SJoseph Chen --kernel) 388a334094SJoseph Chen kernel=$2 398a334094SJoseph Chen shift 2 408a334094SJoseph Chen ;; 418a334094SJoseph Chen --ramdisk) 428a334094SJoseph Chen ramdisk=$2 438a334094SJoseph Chen shift 2 448a334094SJoseph Chen ;; 458a334094SJoseph Chen --second) 468a334094SJoseph Chen second=$2 478a334094SJoseph Chen shift 2 488a334094SJoseph Chen ;; 498a334094SJoseph Chen --dtb) 508a334094SJoseph Chen dtb=$2 518a334094SJoseph Chen shift 2 528a334094SJoseph Chen ;; 538a334094SJoseph Chen --recovery_dtbo) 548a334094SJoseph Chen recovery_dtbo=$2 558a334094SJoseph Chen shift 2 568a334094SJoseph Chen ;; 578a334094SJoseph Chen -h) 588a334094SJoseph Chen usage 598a334094SJoseph Chen exit 0 608a334094SJoseph Chen ;; 618a334094SJoseph Chen --help) 628a334094SJoseph Chen usage 638a334094SJoseph Chen exit 0 648a334094SJoseph Chen ;; 658a334094SJoseph Chen -z) 668a334094SJoseph Chen compressed_kernel=y 678a334094SJoseph Chen shift 688a334094SJoseph Chen ;; 698a334094SJoseph Chen -o) 708a334094SJoseph Chen output=$2 718a334094SJoseph Chen shift 2 728a334094SJoseph Chen ;; 738a334094SJoseph Chen --output) 748a334094SJoseph Chen output=$2 758a334094SJoseph Chen shift 2 768a334094SJoseph Chen ;; 778a334094SJoseph Chen *) 788a334094SJoseph Chen shift 798a334094SJoseph Chen ;; 808a334094SJoseph Chen esac 818a334094SJoseph Chendone 828a334094SJoseph Chen 838a334094SJoseph Chenif [ "$boot_img" == "" -o ! -e "$boot_img" ]; then 848a334094SJoseph Chen echo "No boot img" 858a334094SJoseph Chen usage 868a334094SJoseph Chen exit 1 878a334094SJoseph Chenfi 888a334094SJoseph Chen 898a334094SJoseph Chenif [ "$output" == "" ]; then 908a334094SJoseph Chen echo "No output file name" 918a334094SJoseph Chen usage 928a334094SJoseph Chen exit 1 938a334094SJoseph Chenfi 948a334094SJoseph Chen 958a334094SJoseph Chensrctree=${srctree-"."} 968a334094SJoseph Chenobjtree=${objtree-"."} 978a334094SJoseph Chenout=${out-"out"} 9892cdb0ceSJoseph Chen 9992cdb0ceSJoseph Chenif [ "$kernel" == "" ]; then 10092cdb0ceSJoseph Chen kernel=${kernel-$out/kernel} 1018a334094SJoseph Chenfi 10292cdb0ceSJoseph Chen 10392cdb0ceSJoseph Chenif [ "$second" == "" ]; then 10492cdb0ceSJoseph Chen second=${second-$out/second} 1058a334094SJoseph Chenfi 10692cdb0ceSJoseph Chen 10792cdb0ceSJoseph Chenif [ "$ramdisk" == "" ]; then 1088a334094SJoseph Chen ramdisk=${ramdisk-$out/ramdisk} 10992cdb0ceSJoseph Chenfi 11092cdb0ceSJoseph Chen 11192cdb0ceSJoseph Chenif [ "$dtb" == "" ]; then 1128a334094SJoseph Chen dtb=${dtb-$out/dtb} 11392cdb0ceSJoseph Chenfi 11492cdb0ceSJoseph Chen 1158a334094SJoseph Chenrecovery_dtbo=${recovery_dtbo-$out/recovery_dtbo} 1168a334094SJoseph Chenlog="$out/unpack.log" 1178a334094SJoseph Chen 1188a334094SJoseph Chenmkdir -p $out 1198a334094SJoseph Chen$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log 1208a334094SJoseph Chen 1218a334094SJoseph Chencmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //") 1228a334094SJoseph Chenextra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //") 1238a334094SJoseph Chenversion=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //") 124*c8a22fb8SJoseph Chenos_version=$(grep -a "^os version: " $log | sed "s/^os version: //") 125*c8a22fb8SJoseph Chenos_patch_level=$(grep -a "^os patch level: " $log | sed "s/^os patch level: //") 1268a334094SJoseph Chen 1278a334094SJoseph Chendtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //") 1288a334094SJoseph Chendtb_size=${dtb_size:-0} 1298a334094SJoseph Chenif [ $dtb_size -gt 0 -a -e "$dtb" ]; then 1308a334094SJoseph Chen DTB="--dtb $dtb" 1318a334094SJoseph Chenfi 1328a334094SJoseph Chen 1338a334094SJoseph Chenrecovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //") 1348a334094SJoseph Chenrecovery_dtbo_size=${recovery_dtbo_size:-0} 1358a334094SJoseph Chenif [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then 1368a334094SJoseph Chen RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo" 1378a334094SJoseph Chenfi 1388a334094SJoseph Chen 139*c8a22fb8SJoseph Chenif [ $version -lt 3 ]; then 140*c8a22fb8SJoseph Chen SECOND="--second $second" 141*c8a22fb8SJoseph Chenfi 142*c8a22fb8SJoseph Chen 1438a334094SJoseph Chen$srctree/scripts/mkbootimg \ 1448a334094SJoseph Chen--kernel $kernel \ 145*c8a22fb8SJoseph Chen$SECOND \ 1468a334094SJoseph Chen--ramdisk $ramdisk \ 1478a334094SJoseph Chen$DTB \ 1488a334094SJoseph Chen$RECOVERY_DTBO \ 1498a334094SJoseph Chen--cmdline "${cmdline}${extra_cmdline}" \ 1508a334094SJoseph Chen--header_version $version \ 1518a334094SJoseph Chen--os_version $os_version \ 1528a334094SJoseph Chen--os_patch_level $os_patch_level \ 1538a334094SJoseph Chen--output $output 154