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