-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathbuild-boot-img.sh
executable file
·64 lines (55 loc) · 1.41 KB
/
build-boot-img.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
#!/bin/bash
set -eu
if [ $# -lt 2 ]; then
echo "Usage: $0 <boot dir> <img filename>"
echo "example:"
echo " tar xvzf NETDISK/H3/rootfs/rootfs-friendlycore-20190603.tgz"
echo " ./build-boot-img.sh friendlycore/boot friendlycore/boot.img"
exit 1
fi
TOPPATH=$PWD
BOOT_DIR=$1
IMG_FILE=$2
if [ ! -d ${BOOT_DIR} ]; then
echo "path '${BOOT_DIR}' not found."
exit 1
fi
# Automatically re-run script under sudo if not root
if [ $(id -u) -ne 0 ]; then
echo "Re-running script under sudo..."
sudo --preserve-env "$0" "$@"
exit
fi
. ${TOPPATH}/tools/util.sh
check_and_install_package
#64M
RAW_SIZE_MB=$(( `grep "boot.img" $TOPPATH/prebuilt/partmap.template | cut -f 4 -d":" | cut -f 2 -d","`/1024/1024 ))
if [ -n "$RAW_SIZE_MB" ] && [ "$RAW_SIZE_MB" -eq "$RAW_SIZE_MB" ] 2>/dev/null; then
echo ""
else
echo "Error: RAW_SIZE_MB is not a number" >&2;
exit 1
fi
RAW_SIZE=`expr 1024 \* ${RAW_SIZE_MB}`
dd if=/dev/zero of=${IMG_FILE} bs=1024 count=0 seek=${RAW_SIZE}
DEV=`losetup -f`
for i in `seq 3`; do
if [ -b ${DEV} ]; then
break
else
echo "Waitting ${DEV}"
sleep 1
fi
done
losetup ${DEV} ${IMG_FILE}
sleep 1
mkfs.vfat $DEV -n BOOT -I > /dev/null
partprobe ${DEV}
TMPDIR=$(mktemp -d)
mount -t vfat ${DEV} ${TMPDIR}
rsync -a --no-o --no-g ${BOOT_DIR}/* ${TMPDIR}/
umount ${TMPDIR}
rm -rf ${TMPDIR}
losetup -d ${DEV}
echo "generating ${IMG_FILE} done."
exit 0