1#!/bin/bash 2# SPDX-License-Identifier: GPL-2.0 3# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd. 4set -e 5 6ARGC=$# 7 8usage() { 9 cat >&2 << USAGE 10usage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT 11 12optional arguments: 13 -h, --help show this help message and exit 14 -z pack compressed kernel image 15 --boot_img BOOT_IMG path to the original boot image 16 --out OUT path to out binaries (default: out) 17 --kernel KERNEL path to the new kernel 18 --ramdisk RAMDISK path to the new ramdisk 19 --second SECOND path to the new 2nd bootloader (default: resource.img) 20 --dtb DTB path to the new dtb 21 --recovery_dtbo RECOVERY_DTBO 22 path to the new recovery DTBO 23 -o OUTPUT, --output OUTPUT 24 output file name 25USAGE 26} 27 28# Parse command-line arguments 29while [ $# -gt 0 ]; do 30 case $1 in 31 --boot_img) 32 boot_img=$2 33 shift 2 34 ;; 35 --out) 36 out=$2 37 shift 2 38 ;; 39 --kernel) 40 kernel=$2 41 shift 2 42 ;; 43 --ramdisk) 44 ramdisk=$2 45 shift 2 46 ;; 47 --second) 48 second=$2 49 shift 2 50 ;; 51 --dtb) 52 dtb=$2 53 shift 2 54 ;; 55 --recovery_dtbo) 56 recovery_dtbo=$2 57 shift 2 58 ;; 59 -h) 60 usage 61 exit 0 62 ;; 63 --help) 64 usage 65 exit 0 66 ;; 67 -z) 68 compressed_kernel=y 69 shift 70 ;; 71 -o) 72 output=$2 73 shift 2 74 ;; 75 --output) 76 output=$2 77 shift 2 78 ;; 79 *) 80 shift 81 ;; 82 esac 83done 84 85if [ "$boot_img" == "" -o ! -e "$boot_img" ]; then 86 echo "No boot img" 87 usage 88 exit 1 89fi 90 91if [ "$output" == "" ]; then 92 echo "No output file name" 93 usage 94 exit 1 95fi 96 97srctree=${srctree-"."} 98objtree=${objtree-"."} 99out=${out-"out"} 100 101if [ "$kernel" == "" ]; then 102 kernel=${kernel-$out/kernel} 103fi 104 105if [ "$second" == "" ]; then 106 second=${second-$out/second} 107fi 108 109if [ "$ramdisk" == "" ]; then 110 ramdisk=${ramdisk-$out/ramdisk} 111fi 112 113if [ "$dtb" == "" ]; then 114 dtb=${dtb-$out/dtb} 115fi 116 117recovery_dtbo=${recovery_dtbo-$out/recovery_dtbo} 118log="$out/unpack.log" 119 120mkdir -p $out 121$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log 122 123if [ $ARGC -eq 4 ]; then 124 $srctree/scripts/unpack_resource.sh $second out/resource/ > /dev/null 125 $srctree/tools/resource_tool --root=out/resource --image=$second out/resource/* > /dev/null 126fi 127 128cmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //") 129extra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //") 130version=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //") 131 132os_version_patch_level=$(grep -a "^os version and patch level: " $log | sed "s/^os version and patch level: //") 133 134v=$(($os_version_patch_level >> 11)) 135a=$(($v >> 14)) 136b=$((($v >> 7) & 0x7f)) 137c=$(($v & 0x7f)) 138os_version=$(printf '%d.%d.%d' $a $b $c) 139 140v=$(($os_version_patch_level & 0x7ff)) 141y=$((($v >> 4) + 2000)) 142m=$((($v & 15))) 143 144if [ $m -eq 0 ]; then 145 m=1 146fi 147 148os_patch_level=$(printf '%d-%02d-01' $y $m) 149 150dtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //") 151dtb_size=${dtb_size:-0} 152if [ $dtb_size -gt 0 -a -e "$dtb" ]; then 153 DTB="--dtb $dtb" 154fi 155 156recovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //") 157recovery_dtbo_size=${recovery_dtbo_size:-0} 158if [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then 159 RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo" 160fi 161 162$srctree/scripts/mkbootimg \ 163--kernel $kernel \ 164--second $second \ 165--ramdisk $ramdisk \ 166$DTB \ 167$RECOVERY_DTBO \ 168--cmdline "${cmdline}${extra_cmdline}" \ 169--header_version $version \ 170--os_version $os_version \ 171--os_patch_level $os_patch_level \ 172--output $output 173 174echo -e "\nRepack Image is ready: $output\n" 175