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