xref: /OK3568_Linux_fs/u-boot/scripts/repack-bootimg (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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*4882a593Smuzhiyun
99*4882a593Smuzhiyunif [ "$kernel" == "" ]; then
100*4882a593Smuzhiyun	kernel=${kernel-$out/kernel}
101*4882a593Smuzhiyunfi
102*4882a593Smuzhiyun
103*4882a593Smuzhiyunif [ "$second" == "" ]; then
104*4882a593Smuzhiyun	second=${second-$out/second}
105*4882a593Smuzhiyunfi
106*4882a593Smuzhiyun
107*4882a593Smuzhiyunif [ "$ramdisk" == "" ]; then
108*4882a593Smuzhiyun	ramdisk=${ramdisk-$out/ramdisk}
109*4882a593Smuzhiyunfi
110*4882a593Smuzhiyun
111*4882a593Smuzhiyunif [ "$dtb" == "" ]; then
112*4882a593Smuzhiyun	dtb=${dtb-$out/dtb}
113*4882a593Smuzhiyunfi
114*4882a593Smuzhiyun
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