-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcreate_grub2_bootloader
executable file
·155 lines (120 loc) · 4.89 KB
/
create_grub2_bootloader
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
145
146
147
148
149
150
151
152
153
154
#!/bin/bash
#
# \author Alexander Boettcher
set -e # exit immediately on error
MAKE="${MAKE:="make"} --quiet"
set -u # treat unset variables as error
#
# download and create font for grub2
#
FONT=ttf-bitstream-vera-1.10
FONT_FILE=$FONT.tar.bz2
if [ ! -f $FONT_FILE ]; then
wget https://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/$FONT_FILE
fi
HASH_DOWNLOAD=$(sha256sum $FONT_FILE)
HASH_EXPECTED="db5b27df7bbb318036ebdb75acd3e98f1bd6eb6608fb70a67d478cd243d178dc"
if [ ! "${HASH_DOWNLOAD:0:64}" = $HASH_EXPECTED ]; then
echo "unexpected hash of font file"
echo "$HASH_DOWNLOAD"
exit 1
fi
if [ -d $FONT ]; then rm -rf $FONT; fi
if [ -f font.pf2.xz ]; then rm font.pf2.xz; fi
tar -xjf $FONT_FILE
grub-mkfont -s 14 -o font.pf2 $FONT/VeraMono.ttf
xz font.pf2
#
# build grub2 for uefi 32/64 bit and BIOS legacy
#
GRUB2_DIR=/tmp/tmp.genode_grub2
GRUB2_KEEP_TMP=1
if [ ! -d $GRUB2_DIR ]; then
mkdir $GRUB2_DIR
fi
GRUB2_DIR_SRC=$GRUB2_DIR/grub.git
if [ ! -d $GRUB2_DIR_SRC ]; then
#git clone git://git.savannah.gnu.org/grub.git $GRUB2_DIR/grub.git
# ae94b97be2b81b625d6af6654d3ed79078b50ff6 (tag: grub-2.06)
# genode_206 version:
# commit a796701668826f9b64f0217e19f7a4bede92f431
# based on grub-2.06
git clone https://github.com/alex-ab/grub.git $GRUB2_DIR_SRC
cd $GRUB2_DIR_SRC && git checkout a796701668826f9b64f0217e19f7a4bede92f431 -b genode_206
fi
if [ ! -f $GRUB2_DIR_SRC/configure ]; then
cd $GRUB2_DIR_SRC && ./bootstrap
fi
GRUB2_MODULES_COMMON="part_gpt multiboot multiboot2 gzio configfile help hexdump videoinfo videotest lspci setpci pcidump lsmmap memrw iorw smbios tpm"
GRUB2_MODULES_UEFI="fat ext2 efi_uga efi_gop gfxterm_background png regexp lsefi lsefimmap lsefisystab smbios tpm"
#
# UEFI 64 bit version
#
GRUB2_DIR_UEFI_64=$GRUB2_DIR/64_efi
GRUB2_DIR_UEFI_64_INSTALL=$GRUB2_DIR_UEFI_64/binary
mkdir -p $GRUB2_DIR_UEFI_64_INSTALL
if [ ! -f $GRUB2_DIR_UEFI_64/config.h ]; then
cd $GRUB2_DIR_UEFI_64 && $GRUB2_DIR_SRC/configure --quiet --prefix=$GRUB2_DIR_UEFI_64_INSTALL --with-platform=efi --target=x86_64
fi
$MAKE -C $GRUB2_DIR_UEFI_64 install
$GRUB2_DIR_UEFI_64_INSTALL/bin/grub-mkimage --disable-shim-lock --sbat=genode.csv -O x86_64-efi -d $GRUB2_DIR_UEFI_64_INSTALL/lib/grub/x86_64-efi -o $GRUB2_DIR/grub2_64.efi $GRUB2_MODULES_COMMON $GRUB2_MODULES_UEFI -p "/boot/grub"
$GRUB2_DIR_UEFI_64_INSTALL/bin/grub-mkimage --disable-shim-lock --sbat=genode.csv -O x86_64-efi -d $GRUB2_DIR_UEFI_64_INSTALL/lib/grub/x86_64-efi -o $GRUB2_DIR/grub2_64net.efi tftp efinet multiboot2 gzio configfile -p "/tftpboot"
#
# UEFI 32 bit version
#
GRUB2_DIR_UEFI_32=$GRUB2_DIR/32_efi
GRUB2_DIR_UEFI_32_INSTALL=$GRUB2_DIR_UEFI_32/binary
mkdir -p $GRUB2_DIR_UEFI_32_INSTALL
if [ ! -f $GRUB2_DIR_UEFI_32/config.h ]; then
cd $GRUB2_DIR_UEFI_32 && $GRUB2_DIR_SRC/configure --quiet --prefix=$GRUB2_DIR_UEFI_32_INSTALL --with-platform=efi --target=i386
fi
$MAKE -C $GRUB2_DIR_UEFI_32 install
$GRUB2_DIR_UEFI_32_INSTALL/bin/grub-mkimage --disable-shim-lock --sbat=genode.csv -O i386-efi -d $GRUB2_DIR_UEFI_32_INSTALL/lib/grub/i386-efi -o $GRUB2_DIR/grub2_32.efi $GRUB2_MODULES_COMMON $GRUB2_MODULES_UEFI -p "/boot/grub"
#
# BIOS version
#
GRUB2_DIR_BIOS=$GRUB2_DIR/32_pc
GRUB2_DIR_BIOS_INSTALL=$GRUB2_DIR_BIOS/binary
mkdir -p $GRUB2_DIR_BIOS_INSTALL
if [ ! -f $GRUB2_DIR_BIOS/config.h ]; then
cd $GRUB2_DIR_BIOS && $GRUB2_DIR_SRC/configure --quiet --prefix=$GRUB2_DIR_BIOS_INSTALL --with-platform=pc
fi
$MAKE -C $GRUB2_DIR_BIOS install
$GRUB2_DIR_BIOS_INSTALL/bin/grub-mkimage -O i386-pc -d $GRUB2_DIR_BIOS_INSTALL/lib/grub/i386-pc -o $GRUB2_DIR/bios.img iso9660 biosdisk -p "/boot/grub"
cat $GRUB2_DIR_BIOS_INSTALL/lib/grub/i386-pc/cdboot.img $GRUB2_DIR/bios.img > $GRUB2_DIR/eltorito.img
cat $GRUB2_DIR_BIOS_INSTALL/lib/grub/i386-pc/boot.img $GRUB2_DIR/bios.img > $GRUB2_DIR/embedded.img
#
# Copy bootloader binaries to genode tool directory
#
if [ ! -d $GRUB2_DIR/grub2 ]; then
mkdir $GRUB2_DIR/grub2
else
rm -rf $GRUB2_DIR/grub2/*
fi
# searched for and loaded by GRUB2 when part of ISO (--image/iso in Genode)
ISO_MODULES="acpi boot bufio crypto datetime extcmd gcry_crc gettext gzio linux lsapm mmap multiboot multiboot2 net normal priority_queue regexp relocator terminal vbe video_fb video"
for file in $ISO_MODULES
do
cp $GRUB2_DIR_BIOS_INSTALL/lib/grub/i386-pc/$file.mod $GRUB2_DIR/grub2/$file.mod
done
cp $GRUB2_DIR/eltorito.img $GRUB2_DIR/grub2/.
cp $GRUB2_DIR/embedded.img $GRUB2_DIR/grub2/.
# UEFI
cp $GRUB2_DIR/grub2_32.efi $GRUB2_DIR/grub2/.
cp $GRUB2_DIR/grub2_64.efi $GRUB2_DIR/grub2/.
cp $GRUB2_DIR/grub2_64net.efi $GRUB2_DIR/grub2/.
# tar
tar cJfC $GRUB2_DIR/grub2-tmp.tar.xz $GRUB2_DIR grub2
SHA1SUM=$(sha1sum $GRUB2_DIR/grub2-tmp.tar.xz | cut -f1 -d" ")
mv $GRUB2_DIR/grub2-tmp.tar.xz $GRUB2_DIR/grub2-$SHA1SUM.tar.xz
#
# Cleanup if requested
#
if [ $GRUB2_KEEP_TMP -eq 1 ]; then
echo ""
echo "keep temporary directory $GRUB2_DIR"
echo " grub2-$SHA1SUM.tar.xz"
echo "contains all the GRUB2 binaries"
else
rm -rf $GRUB2_DIR
fi