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