This repository has been archived by the owner. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
create-boot-image.sh
executable file
·113 lines (94 loc) · 2.42 KB
/
create-boot-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
#!/bin/bash -eu
IMAGE_NAME=
ROOT_DIR="$(dirname $(realpath ${BASH_SOURCE[0]}))"
OUT_EXE_NAME="rtems-ec-cli.exe"
MOUNT_DIR_NAME="rtems-boot-disk-image"
function print_help
{
echo "Use $0 OPTIONS..."
echo " -f | --file <path/to/file> Set the path to the image file"
echo " -v | --verbose Print verbosity info"
echo " -h | --help Print help"
}
if (( $(id -u) != 0 ))
then
echo "Must be run as root" 1>&2
echo "==================="
exit 1
fi
if [[ $# -eq 0 ]]; then
print_help
exit 0
fi
while [ "${1:-}" != "" ]; do
case "$1" in
"-f" | "--file")
IMAGE_NAME=$2
echo "Use ${IMAGE_NAME} to create a bootable image"
shift 2
;;
"-v" | "--verbose")
set -v
shift 1
;;
"-h" | "--help")
print_help
exit 0
;;
*)
echo "invalid command or option ($1)"
print_help
exit 1
;;
esac
done
loopdev0=$(/sbin/losetup -f)
echo "1. Use $loopdev0 to mount ${IMAGE_NAME}"
losetup $loopdev0 ${IMAGE_NAME}
echo "2. Create the partition table"
set +e
fdisk $loopdev0 << EOF
o
n
p
1
a
w
EOF
set -e
devmap=$(echo $(/sbin/kpartx -l $loopdev0) | awk '{ print $1 }')
echo "3. Add partition mappings ($devmap)"
kpartx -av $loopdev0
loopdev1=$(/sbin/losetup -f)
echo "4. Use $loopdev1 to mount this partition (/dev/mapper/$devmap)"
losetup $loopdev1 /dev/mapper/${devmap}
echo "5. Create a file system on the first partition"
mkfs.ext2 $loopdev1
echo "6. Mount to /mnt/rtems-boot-img"
mkdir -p /mnt/${MOUNT_DIR_NAME}
mount $loopdev1 /mnt/${MOUNT_DIR_NAME}
echo "7. Add a config file"
mkdir -p /mnt/${MOUNT_DIR_NAME}/boot/grub
cat > /mnt/${MOUNT_DIR_NAME}/boot/grub/grub.cfg << EOF
set default=0
set timeout=5
insmod ext2
insmod multiboot
set root=(hd0,msdos1)
menuentry "RTEMS RTOS : ${OUT_EXE_NAME}" {
multiboot (hd0,msdos1)/${OUT_EXE_NAME}
}
EOF
echo "8. Install GRUB2"
grub-install --allow-floppy \
--boot-directory=/mnt/${MOUNT_DIR_NAME}/boot \
--disk-module=biosdisk \
--modules="cbfs ext2 part_msdos" \
--force $loopdev0
echo "9. Copy the RTEMS applacation to the image"
cp ${ROOT_DIR}/${OUT_EXE_NAME} /mnt/${MOUNT_DIR_NAME}
echo "10. Unmount /mnt/${MOUNT_DIR_NAME} and release $loopdev1 $loopdev0"
umount /mnt/${MOUNT_DIR_NAME}
losetup -d $loopdev1
kpartx -dv $loopdev0
losetup -d $loopdev0