diff --git a/.gitignore b/.gitignore index 1b646bc..6827c05 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ *.o build/ kernel.elf -blankos-fat.img +blankos.iso +iso/ i386-elf-7.5.0-Linux-x86_64/ i386-elf-7.5.0-Linux-x86_64.tar.xz diff --git a/README.md b/README.md index 097ad27..f37fb93 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The long-term goal of this OS is to be capable of running user programs and havi Download the latest BlankOS disk image from the "Releases" tab, and start it using the QEMU emulator: ``` -qemu-system-i386 blankOS-i386-0.3.45.img +qemu-system-i386 blankOS-i386-0.3.55.iso ``` ## Building from source @@ -47,7 +47,7 @@ To run the OS on real hardware, you'll first need to have a BIOS-compatible comp Burn your image file onto a USB stick: ``` -sudo dd bs=4M if=blankos-fat.img of=/dev/sdX status=progress oflag=sync +sudo dd bs=4M if=blankos.iso of=/dev/sdX status=progress oflag=sync ``` Replace `sdX` with your USB drive name (you can find it by doing `sudo fdisk -l`). @@ -56,7 +56,7 @@ Tada! You now have a working BlankOS USB stick. Go ahead and try it out! ## Debugging (QEMU w/ GDB) ``` -qemu-system-i386 -s -S -drive file=blankos-fat.img,format=raw +qemu-system-i386 -s -S -drive file=blankos.iso,format=raw ``` In another shell: diff --git a/makefile b/makefile index 2ea730b..8e21db4 100644 --- a/makefile +++ b/makefile @@ -38,14 +38,17 @@ toolchain: wget $(TOOLCHAIN_SRC) tar xf $(TOOLCHAIN_FILE) -blankos-fat.img: - sudo ./setup.sh +iso: kernel.elf + mkdir -p iso/boot/grub + cp kernel.elf iso/boot/kernel.elf + cp grub.cfg iso/boot/grub/grub.cfg + grub-mkrescue iso -o blankos.iso -run: blankos-fat.img - qemu-system-i386 -drive file=blankos-fat.img,format=raw +run: iso + qemu-system-i386 -drive file=blankos.iso,format=raw debug: - qemu-system-i386 -s -S -drive file=blankos-fat.img,format=raw + qemu-system-i386 -s -S -drive file=blankos.iso,format=raw clean: - rm -rf $(OBJ_DIR) kernel.elf blankos-fat.img $(TOOLCHAIN_FILE) + rm -rf $(OBJ_DIR) kernel.elf blankos.iso $(TOOLCHAIN_FILE) diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 2ae0904..0000000 --- a/setup.sh +++ /dev/null @@ -1,75 +0,0 @@ -#!/bin/bash - -# A script to create a FAT32 loopback device, place a kernel onto it, and install GRUB. -# Inspired by JakeSteinburger's SpecOS setup script! - -if [ "$EUID" -ne 0 ]; then - echo "Please execute this script with root privileges." - exit -fi - -if [ -f "blankos-fat.img" ]; then - echo "Deleting previous disk image..." - rm blankos-fat.img -fi - -if [ -d "/mnt/blankos" ]; then - echo "Deleting previous mountpoint..." - rm -rf /mnt/blankos -fi - -echo "Creating new mountpoint..." -mkdir /mnt/blankos - -echo "Creating an empty disk image..." -dd if=/dev/zero of=blankos-fat.img bs=512 count=131072 - -echo "Appending a parition to disk image..." -fdisk blankos-fat.img << EOF -n -p -1 - - -a -w -EOF - -echo "Creating loopback devices..." -losetup -fP blankos-fat.img - -# Get first partition loopback -LOOP_DEVICE=$(losetup -l | grep blankos-fat.img | awk '{print $1}') -PARTITION="${LOOP_DEVICE}p1" - -echo "Creating FAT32 partition..." -mkfs.vfat -F 32 $PARTITION - -echo "Mounting partition..." -mount $PARTITION /mnt/blankos - -echo "Installing GRUB on $LOOP_DEVICE" -grub-install --root-directory=/mnt/blankos --target=i386-pc --no-floppy --modules="normal part_msdos fat multiboot" $LOOP_DEVICE - -echo "Copying kernel file and GRUB configuration file..." - -cp kernel.elf /mnt/blankos/boot/ -cp grub.cfg /mnt/blankos/boot/grub/ - -echo "Appending test files..." -mkdir /mnt/blankos/hello -echo "Hello, world from FAT32 text file." > /mnt/blankos/hello/testfile.txt - -# cp program.elf /mnt/blankos/programs/ -# In the future, when the OS can load programs and parse ELF - -echo "Unmounting partition..." -umount /mnt/blankos - -echo "Freeing loopback devices..." -losetup -d $LOOP_DEVICE - -echo "Fixing disk image permissions..." -sudo chmod 666 blankos-fat.img - -echo "The blankos-fat.img disk image is ready for use with QEMU or real hardware."