154 lines
3.5 KiB
Bash
Executable File
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
|