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"} 98if [ "$($srctree/scripts/config --state CONFIG_ARM64)" == "y" ]; then 99 if [ "$compressed_kernel" == "y" ]; then 100 default_kernel=arch/arm64/boot/Image.lz4 101 else 102 default_kernel=arch/arm64/boot/Image 103 fi 104else 105 if [ "$compressed_kernel" == "y" ]; then 106 default_kernel=arch/arm/boot/zImage 107 else 108 default_kernel=arch/arm/boot/Image 109 fi 110fi 111kernel=${kernel-$objtree/$default_kernel} 112second=${second-$objtree/resource.img} 113ramdisk=${ramdisk-$out/ramdisk} 114dtb=${dtb-$out/dtb} 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: //") 124os_version=$(grep -a "^os version: " $log | sed "s/^os version: //") 125os_patch_level=$(grep -a "^os patch level: " $log | sed "s/^os patch level: //") 126 127dtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //") 128dtb_size=${dtb_size:-0} 129if [ $dtb_size -gt 0 -a -e "$dtb" ]; then 130 DTB="--dtb $dtb" 131fi 132 133recovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //") 134recovery_dtbo_size=${recovery_dtbo_size:-0} 135if [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then 136 RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo" 137fi 138 139if [ $version -lt 3 ]; then 140 SECOND="--second $second" 141fi 142 143$srctree/scripts/mkbootimg \ 144--kernel $kernel \ 145$SECOND \ 146--ramdisk $ramdisk \ 147$DTB \ 148$RECOVERY_DTBO \ 149--cmdline "${cmdline}${extra_cmdline}" \ 150--header_version $version \ 151--os_version $os_version \ 152--os_patch_level $os_patch_level \ 153--output $output 154