refactor: rework folder organization@@ -1,17 +1,17 @@
#!/bin/bash
-# Build
-
+# Setup/cleanup
mkdir {bin,build} 2> /dev/null
echo -e "Cleaning artifacts..."
rm *.bin *.img *.iso *.o *.vmdk 2> /dev/null
+# Build
echo -e "Building bootloader (asm)..."
-nasm ./boot/bootloader.asm -I ./boot/ -o ./bin/bootloader.bin || exit 1
+nasm ./src/boot/bootloader.asm -I ./src/boot/ -o ./bin/bootloader.bin || exit 1
echo -e "Building kernel (asm)..."
-nasm -felf32 ./kernel/entry.asm -I ./kernel/ -o ./build/kernelEntryPoint.o || exit 1
+nasm -felf32 ./src/kernel/asm/entry.asm -I ./src/kernel/asm/ -o ./build/kernelEntryPoint.o || exit 1
use_crystal_kernel=${USE_CRYSTAL_KERNEL:-true}
if [ "$use_crystal_kernel" = true ]
@@ -24,14 +24,14 @@ then
--target i386-unknown-linux-elf \
-Dkernel \
--prelude=../prelude.cr \
- -o ./build/kernel ./kernel/kernel.cr || exit 1
+ -o ./build/kernel ./src/kernel/kernel.cr || exit 1
# Link the kernel into an ELF executable, then convert it to a flat binary for the bootloader.
echo -e "Linking kernel.elf (ld)..."
ld \
-m elf_i386 \
-nostdlib \
- -T ./kernel/linker.ld \
+ -T ./src/linker.ld \
-o ./bin/kernel.elf ./build/kernelEntryPoint.o ./build/kernel.o || exit 1
# Copy kernel.elf to kernel.bin properly.
@@ -40,9 +40,9 @@ then
-O binary ./bin/kernel.elf ./bin/kernel.bin || exit 1
else
# Flags
- CC_FLAGS="-ffreestanding -nostdinc -nostdinc++ -Wall -Wextra -o ./bin/kernel.bin -target i386-pc-none-elf -I ./kernel/archive/cpp/"
- LD_FLAGS="-nostdlib -Wl,--oformat=binary,-T./kernel/linker.ld"
- CPP_FILES="./kernel/archive/cpp/unityBuild.cpp ./build/kernelEntryPoint.o"
+ CC_FLAGS="-ffreestanding -nostdinc -nostdinc++ -Wall -Wextra -o ./bin/kernel.bin -target i386-pc-none-elf -I ./src/kernel/archive/cpp/"
+ LD_FLAGS="-nostdlib -Wl,--oformat=binary,-T./src/linker.ld"
+ CPP_FILES="./src/kernel/archive/cpp/unityBuild.cpp ./build/kernelEntryPoint.o"
# Build c++ kernel without stdlib, using the custom prelude, and targeting i386-unknown-linux-elf
echo -e "Building kernel (cpp)..."
@@ -62,8 +62,13 @@ echo -e "Make bootable crystalos.img (genVDisk)..."
--bootloader ./bin/bootloader.bin \
--kernel ./bin/kernel.bin || exit 1
-# Run
+if [ -f "crystalos" ]
+then
+ # some platforms produce a no ext file, so we rename it to .img, eventually.
+ mv crystalos crystalos.img || exit 1
+fi
+# Run
echo -e "Booting into crystalos.img (qemu)..."
use_vnc=${USE_VNC:-false}
@@ -1,3 +1,5 @@
+/* todo: port to intel .asm format */
+
.section .text
.global isr_handler_common
.global irq_handler_common
@@ -50,7 +50,7 @@ fun kmain
# Init VGA (+ module demo)
VGA.puts(
"[CrystalOS Kernel] Hello from Crystal.\n",
- color: VGA::Colors::BLACK_ON_CYAN,
+ color: VGA::Colors::BLACK_ON_LIME,
)
# puts KernelShim.crystalOSVersion
# PMM.init # Physical Memory Init