android13/kernel-5.10/scripts/repack-bootimg

154 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# Copyright (c) 2019 Fuzhou Rockchip Electronics Co., Ltd.
set -e
usage() {
cat >&2 << USAGE
usage: $0 [-h] [-z] --boot_img BOOT_IMG [--out OUT] [--kernel KERNEL] [--ramdisk RAMDISK] [--second SECOND] [--dtb DTB ] [--recovery_dtbo RECOVERY_DTBO] -o OUTPUT
optional arguments:
-h, --help show this help message and exit
-z pack compressed kernel image
--boot_img BOOT_IMG path to the original boot image
--out OUT path to out binaries (default: out)
--kernel KERNEL path to the new kernel
--ramdisk RAMDISK path to the new ramdisk
--second SECOND path to the new 2nd bootloader (default: resource.img)
--dtb DTB path to the new dtb
--recovery_dtbo RECOVERY_DTBO
path to the new recovery DTBO
-o OUTPUT, --output OUTPUT
output file name
USAGE
}
# Parse command-line arguments
while [ $# -gt 0 ]; do
case $1 in
--boot_img)
boot_img=$2
shift 2
;;
--out)
out=$2
shift 2
;;
--kernel)
kernel=$2
shift 2
;;
--ramdisk)
ramdisk=$2
shift 2
;;
--second)
second=$2
shift 2
;;
--dtb)
dtb=$2
shift 2
;;
--recovery_dtbo)
recovery_dtbo=$2
shift 2
;;
-h)
usage
exit 0
;;
--help)
usage
exit 0
;;
-z)
compressed_kernel=y
shift
;;
-o)
output=$2
shift 2
;;
--output)
output=$2
shift 2
;;
*)
shift
;;
esac
done
if [ "$boot_img" == "" -o ! -e "$boot_img" ]; then
echo "No boot img"
usage
exit 1
fi
if [ "$output" == "" ]; then
echo "No output file name"
usage
exit 1
fi
srctree=${srctree-"."}
objtree=${objtree-"."}
out=${out-"out"}
if [ "$($srctree/scripts/config --state CONFIG_ARM64)" == "y" ]; then
if [ "$compressed_kernel" == "y" ]; then
default_kernel=arch/arm64/boot/Image.lz4
else
default_kernel=arch/arm64/boot/Image
fi
else
if [ "$compressed_kernel" == "y" ]; then
default_kernel=arch/arm/boot/zImage
else
default_kernel=arch/arm/boot/Image
fi
fi
kernel=${kernel-$objtree/$default_kernel}
second=${second-$objtree/resource.img}
ramdisk=${ramdisk-$out/ramdisk}
dtb=${dtb-$out/dtb}
recovery_dtbo=${recovery_dtbo-$out/recovery_dtbo}
log="$out/unpack.log"
mkdir -p $out
$srctree/scripts/unpack_bootimg --boot_img $boot_img --out $out > $log
cmdline=$(grep -a "^command line args: " $log | tr '\0' '\n'| sed "s/^command line args: //")
extra_cmdline=$(grep -a "^additional command line args: " $log | tr '\0' '\n'| sed "s/^additional command line args: //")
version=$(grep -a "^boot image header version: " $log | sed "s/^boot image header version: //")
os_version=$(grep -a "^os version: " $log | sed "s/^os version: //")
os_patch_level=$(grep -a "^os patch level: " $log | sed "s/^os patch level: //")
dtb_size=$(grep -a "^dtb size: " $log | sed "s/^dtb size: //")
dtb_size=${dtb_size:-0}
if [ $dtb_size -gt 0 -a -e "$dtb" ]; then
DTB="--dtb $dtb"
fi
recovery_dtbo_size=$(grep -a "^recovery dtbo size: " $log | sed "s/^recovery dtbo size: //")
recovery_dtbo_size=${recovery_dtbo_size:-0}
if [ $recovery_dtbo_size -gt 0 -a -e "$recovery_dtbo" ]; then
RECOVERY_DTBO="--recovery_dtbo $recovery_dtbo"
fi
if [ $version -lt 3 ]; then
SECOND="--second $second"
fi
$srctree/scripts/mkbootimg \
--kernel $kernel \
$SECOND \
--ramdisk $ramdisk \
$DTB \
$RECOVERY_DTBO \
--cmdline "${cmdline}${extra_cmdline}" \
--header_version $version \
--os_version $os_version \
--os_patch_level $os_patch_level \
--output $output