27 lines
1.1 KiB
Bash
Executable File
27 lines
1.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
export LC_ALL=C
|
|
|
|
nasm -fbin -o 1.bin src/boot/x86/1.asm
|
|
nasm -DSTAGE2_SIZE=$(stat --printf="%s" 1.bin) -fbin -o 0.bin src/boot/x86/0.asm
|
|
|
|
i386-unknown-elf-gcc -s -Wl,--export-dynamic -fno-pic -flto -Os -mgeneral-regs-only -Isrc/kernel/ -ffreestanding -nostdlib -nostartfiles -o kernel src/kernel/x86/ppm.c src/kernel/x86/vpm.c src/kernel/x86/log.c src/kernel/tinyubsan.c src/kernel/main.c -fsanitize=undefined
|
|
|
|
dd if=/dev/zero of=drive.bin bs=1024 count=10240
|
|
/bin/echo -e 'mklabel msdos\nmkpart primary 8192b -1s\nquit\n' | parted drive.bin
|
|
[[ "$(udisksctl loop-setup -f drive.bin)" =~ (/dev/loop[0-9]+) ]] && LOOPDEV="${BASH_REMATCH[1]}"
|
|
sudo mkfs.ext2 -E root_perms=777 -b 1024 "${LOOPDEV}p1"
|
|
sleep 0.5
|
|
[[ "$(udisksctl mount -b ${LOOPDEV}p1)" =~ (/run/.+) ]] && MOUNTDIR="${BASH_REMATCH[1]}"
|
|
cp ./kernel "${MOUNTDIR}/kernel"
|
|
udisksctl unmount -b "${LOOPDEV}p1"
|
|
udisksctl loop-delete -b "${LOOPDEV}"
|
|
|
|
# Copy first stage bootloader without overwriting MBR
|
|
dd if=0.bin of=drive.bin bs=1 count=440 seek=0 conv=notrunc,nocreat
|
|
|
|
# Copy second stage bootloader, hope it's not too fat
|
|
dd if=1.bin of=drive.bin bs=1 seek=512 conv=notrunc,nocreat
|