summaryrefslogtreecommitdiff
path: root/build_helpers/splicetobootsect.sh
blob: ac4ca0d6d3b62acbf940a5d1dede5f1e8fa0ebfe (plain)
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
#! /bin/bash
set -u
set -e

if [ -z "$1" ] || [ ! -f "$1" ]; then
  echo "Argument must be the path to a binary to splice into a bootsector"
  exit 1
fi

INSIZE=$(stat -c%s $1)
if [ $INSIZE -ge 510 ]; then
  echo "Input file is greater than bootsector max size (510 bytes)"
  exit 1
fi

OUTFILE="bootable.img"
echo -n "[*] Creating bootsector template... "
dd if=/dev/zero bs=510 count=1 of="$OUTFILE" >/dev/null 2>&1
echo -ne "\x55\xaa" >> "$OUTFILE"
dd if=/dev/zero bs=512 count=255 ibs=512 seek=1 of="$OUTFILE" >/dev/null 2>&1
echo " OK!"

echo -n "[*] Inserting bootsector... "
dd if="$1" of="$OUTFILE" conv=notrunc >/dev/null 2>&1
echo " OK!"

echo -n "[*] Inserting kernel... "
dd if="bin/src._kernel._main.bin" of="$OUTFILE" conv=notrunc ibs=512 seek=1 >/dev/null 2>&1
echo " OK!"
echo "Done. File at:"
echo "$OUTFILE"