-
Notifications
You must be signed in to change notification settings - Fork 82
/
Copy pathmk-image.sh
executable file
·130 lines (106 loc) · 3.26 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
#!/bin/bash -e
LOCALPATH=$(pwd)
OUT=${LOCALPATH}/out
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: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"
;;
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 "Generate Boot image : ${BOOT} !"
# 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/* ::\
}
generate_system_image()
{
SYSTEM=${OUT}/system.img
rm -rf ${SYSTEM}
echo "Generate System image : ${SYSTEM} !"
dd if=/dev/zero of=${SYSTEM} bs=1M count=0 seek=$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 atf ${ATF_START} `expr ${BOOT_START} - 1`
parted -s ${SYSTEM} unit s mkpart boot ${BOOT_START} `expr ${ROOTFS_START} - 1`
parted -s ${SYSTEM} set 6 boot on
parted -s ${SYSTEM} unit s mkpart root ${ROOTFS_START} 100%
# burn u-boot
if [ "$CHIP" == "rk3288" ] || [ "$CHIP" == "rk3036" ]; then
dd if=${OUT}/u-boot/u-boot.out of=${SYSTEM} seek=${LOADER1_START} conv=notrunc
elif [ "$CHIP" == "rk3399" ]; then
dd if=${LOCALPATH}/rkbin/rk33/RK3399MiniLoaderAll_V1.05.bin 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=${LOCALPATH}/rkbin/rk33/RK3328MiniLoaderAll_V1.05.bin 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
if [ ! -e ${OUT}/boot.img ] ; then
echo -e "\e[31m CAN'T FIND BOOT IMAGE \e[0m"
exit
fi
dd if=${OUT}/boot.img of=${SYSTEM} conv=notrunc seek=${BOOT_START}
# burn rootfs image
if [ ! -e ${ROOTFS_PATH} ] ; then
echo -e "\e[31m CAN'T FIND ROOTFS IMAGE \e[0m"
exit
fi
dd if=${ROOTFS_PATH} of=${SYSTEM} seek=${ROOTFS_START}
}
if [ "$TARGET" = "boot" ] ; then
generate_boot_image
elif [ "$TARGET" == "system" ]; then
generate_system_image
fi