forked from bennhuang/build
-
Notifications
You must be signed in to change notification settings - Fork 3
/
mk-image.sh
executable file
·144 lines (117 loc) · 3.9 KB
/
mk-image.sh
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
#!/bin/bash -e
LOCALPATH=$(pwd)
OUT=${LOCALPATH}/out
TOOLPATH=${LOCALPATH}/rkbin/tools
EXTLINUXPATH=${LOCALPATH}/build/extlinux
CHIP=""
TARGET=""
ROOTFS_PATH=""
PATH=$PATH:$TOOLPATH
source $LOCALPATH/build/partitions.sh
usage() {
echo -e "\nUsage: build/mk-image.sh -c rk3288 -t system -r rk-rootfs-build/linaro-rootfs.img \n"
echo -e " build/mk-image.sh -c rk3288 -t boot\n"
}
finish() {
echo -e "\e[31m MAKE IMAGE FAILED.\e[0m"
exit -1
}
trap finish ERR
OLD_OPTIND=$OPTIND
while getopts "c:t:r:h" flag; do
case $flag in
c)
CHIP="$OPTARG"
;;
t)
TARGET="$OPTARG"
;;
r)
ROOTFS_PATH="$OPTARG"
;;
esac
done
OPTIND=$OLD_OPTIND
if [ ! -f "${EXTLINUXPATH}/${CHIP}.conf" ]; then
CHIP="rk3288"
fi
if [ ! $CHIP ] && [ ! $TARGET ]; then
usage
exit
fi
generate_boot_image() {
BOOT=${OUT}/boot.img
rm -rf ${BOOT}
echo -e "\e[36m Generate Boot image start\e[0m"
# 500Mb
mkfs.vfat -n "boot" -S 512 -C ${BOOT} $((500 * 1024))
mmd -i ${BOOT} ::/extlinux
mcopy -i ${BOOT} -s ${EXTLINUXPATH}/${CHIP}.conf ::/extlinux/extlinux.conf
mcopy -i ${BOOT} -s ${OUT}/kernel/* ::
echo -e "\e[36m Generate Boot image : ${BOOT} success! \e[0m"
}
generate_system_image() {
if [ ! -f "${OUT}/boot.img" ]; then
echo -e "\e[31m CAN'T FIND BOOT IMAGE \e[0m"
usage
exit
fi
if [ ! -f "${ROOTFS_PATH}" ]; then
echo -e "\e[31m CAN'T FIND ROOTFS IMAGE \e[0m"
usage
exit
fi
SYSTEM=${OUT}/system.img
rm -rf ${SYSTEM}
echo "Generate System image : ${SYSTEM} !"
# last dd rootfs will extend gpt image to fit the size,
# but this will overrite the backup table of GPT
# will cause corruption error for GPT
IMG_ROOTFS_SIZE=$(stat -L --format="%s" ${ROOTFS_PATH})
GPTIMG_MIN_SIZE=$(expr $IMG_ROOTFS_SIZE + \( ${LOADER1_SIZE} + ${RESERVED1_SIZE} + ${RESERVED2_SIZE} + ${LOADER2_SIZE} + ${ATF_SIZE} + ${BOOT_SIZE} + 35 \) \* 512)
GPT_IMAGE_SIZE=$(expr $GPTIMG_MIN_SIZE \/ 1024 \/ 1024 + 2)
dd if=/dev/zero of=${SYSTEM} bs=1M count=0 seek=$GPT_IMAGE_SIZE
parted -s ${SYSTEM} mklabel gpt
parted -s ${SYSTEM} unit s mkpart loader1 ${LOADER1_START} $(expr ${RESERVED1_START} - 1)
# parted -s ${SYSTEM} unit s mkpart reserved1 ${RESERVED1_START} $(expr ${RESERVED2_START} - 1)
# parted -s ${SYSTEM} unit s mkpart reserved2 ${RESERVED2_START} $(expr ${LOADER2_START} - 1)
parted -s ${SYSTEM} unit s mkpart loader2 ${LOADER2_START} $(expr ${ATF_START} - 1)
parted -s ${SYSTEM} unit s mkpart trust ${ATF_START} $(expr ${BOOT_START} - 1)
parted -s ${SYSTEM} unit s mkpart boot ${BOOT_START} $(expr ${ROOTFS_START} - 1)
parted -s ${SYSTEM} set 4 boot on
parted -s ${SYSTEM} -- unit s mkpart rootfs ${ROOTFS_START} -34s
if [ "$CHIP" == "rk3328" ] || [ "$CHIP" == "rk3399" ] || [ "$CHIP" == "rk3399pro" ]; then
ROOT_UUID="B921B045-1DF0-41C3-AF44-4C6F280D3FAE"
else
ROOT_UUID="69DAD710-2CE4-4E3C-B16C-21A1D49ABED3"
fi
gdisk ${SYSTEM} <<EOF
x
c
5
${ROOT_UUID}
w
y
EOF
# burn u-boot
if [ "$CHIP" == "rk3288" ] || [ "$CHIP" == "rk322x" ] || [ "$CHIP" == "rk3036" ]; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc
elif [ "$CHIP" == "rk3399" ] || [ "$CHIP" == "rk3399pro" ] ; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc
dd if=${OUT}/u-boot/uboot.img of=${SYSTEM} seek=${LOADER2_START} conv=notrunc
dd if=${OUT}/u-boot/trust.img of=${SYSTEM} seek=${ATF_START} conv=notrunc
elif [ "$CHIP" == "rk3328" ]; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc
dd if=${OUT}/u-boot/uboot.img of=${SYSTEM} seek=${LOADER2_START} conv=notrunc
dd if=${OUT}/u-boot/trust.img of=${SYSTEM} seek=${ATF_START} conv=notrunc
fi
# burn boot image
dd if=${OUT}/boot.img of=${SYSTEM} conv=notrunc seek=${BOOT_START}
# burn rootfs image
dd if=${ROOTFS_PATH} of=${SYSTEM} conv=notrunc,fsync seek=${ROOTFS_START}
}
if [ "$TARGET" = "boot" ]; then
generate_boot_image
elif [ "$TARGET" == "system" ]; then
generate_system_image
fi