Initial commit
This commit is contained in:
26
build.sh
Executable file
26
build.sh
Executable file
@@ -0,0 +1,26 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user