hc
2023-12-06 d38611ca164021d018c1b23eee65bbebc09c63e0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#!/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