forked from rock64-linux/build
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmk-image.sh
executable file
·131 lines (109 loc) · 3.45 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
#!/bin/bash -e
LOCALPATH=$(pwd)
OUT=${LOCALPATH}/out
OUT_IMAGE="$OUT/system.img"
TOOLPATH=${LOCALPATH}/rkbin/tools
EXTLINUXPATH=${LOCALPATH}/build/extlinux
CHIP=""
TARGET=""
SIZE=""
ROOTFS_PATH=""
PATH=$PATH:$TOOLPATH
source $LOCALPATH/build/partitions.sh
usage() {
echo -e "\nUsage: build/mk-image.sh -c rk3288 -t system -s 4000 -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:s:r:o:h" flag; do
case $flag in
c)
CHIP="$OPTARG"
;;
t)
TARGET="$OPTARG"
;;
s)
SIZE="$OPTARG"
if [ $SIZE -le 120 ]; then
echo -e "\e[31m SYSTEM IMAGE SIZE TOO SMALL \e[0m"
exit -1
fi
;;
r)
ROOTFS_PATH="$OPTARG"
;;
o)
OUT_IMAGE="$OPTARG"
;;
esac
done
OPTIND=$OLD_OPTIND
if [ ! -e ${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"
# 100 Mb
mkfs.vfat -n "boot" -S 512 -C ${BOOT} $((100 * 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() {
SYSTEM="${OUT_IMAGE}"
rm -rf ${SYSTEM}
echo "Generate System image : ${SYSTEM} !"
if [[ -z "$SIZE" ]]; then
SIZE=256
fi
dd if=/dev/zero of=${SYSTEM} bs=1M count=0 seek=$SIZE status=none
# burn u-boot
echo "Burn u-boot..."
if [ "$CHIP" == "rk3288" ] || [ "$CHIP" == "rk3036" ]; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc status=none
elif [ "$CHIP" == "rk3399" ]; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc status=none
dd if=${OUT}/u-boot/uboot.img of=${SYSTEM} seek=${LOADER2_START} conv=notrunc status=none
dd if=${OUT}/u-boot/trust.img of=${SYSTEM} seek=${ATF_START} conv=notrunc status=none
elif [ "$CHIP" == "rk3328" ]; then
dd if=${OUT}/u-boot/idbloader.img of=${SYSTEM} seek=${LOADER1_START} conv=notrunc status=none
dd if=${OUT}/u-boot/uboot.img of=${SYSTEM} seek=${LOADER2_START} conv=notrunc status=none
dd if=${OUT}/u-boot/trust.img of=${SYSTEM} seek=${ATF_START} conv=notrunc status=none
fi
# burn rootfs image
echo "Burn rootfs..."
if [ ! -e ${ROOTFS_PATH} ]; then
echo -e "\e[31m CAN'T FIND ROOTFS IMAGE \e[0m"
exit 1
fi
dd if=${ROOTFS_PATH} of=${SYSTEM} seek=${ROOTFS_START} conv=notrunc status=none
dd if=/dev/zero of=${SYSTEM} count=2048 oflag=append conv=notrunc
echo Updating GPT...
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 atf ${ATF_START} $(expr ${BOOT_START} - 1)
parted -s ${SYSTEM} unit s mkpart reserved3 ${BOOT_START} $(expr ${ROOTFS_START} - 1)
parted -s ${SYSTEM} unit s mkpart root ${ROOTFS_START} 100%
parted -s ${SYSTEM} set 7 boot on
}
if [ "$TARGET" = "boot" ]; then
generate_boot_image
elif [ "$TARGET" == "system" ]; then
generate_system_image
fi