diff --git a/rust_boot.asm b/rust_boot.asm new file mode 100644 index 0000000..09bb57b --- /dev/null +++ b/rust_boot.asm @@ -0,0 +1,7 @@ +global start + +section .text +bits 32 +start: + mov dword [0xb800], 0x2f4b2f4f + hlt diff --git a/rust_kernel.rs b/rust_kernel.rs new file mode 100644 index 0000000..e69de29 diff --git a/rust_kernel/Makefile b/rust_kernel/Makefile new file mode 100644 index 0000000..873ac03 --- /dev/null +++ b/rust_kernel/Makefile @@ -0,0 +1,20 @@ + +all: run_kernel + +kernel.bin: multiboot2_header.asm rust_boot.asm linker.ld + nasm -f elf64 multiboot2_header.asm + nasm -f elf64 rust_boot.asm + ld -n -o kernel.bin -T linker.ld multiboot2_header.o rust_boot.o + +os.iso: kernel.bin + cp kernel.bin isofiles/ + grub-mkrescue -o os.iso isofiles + +run_kernel: os.iso + qemu-system-x86_64 -hda os.iso + +.PHONY: clean +clean: + rm -f *.o + rm -f kernel.bin + rm -f os.iso diff --git a/rust_kernel/isofiles/boot/grub/grub.cfg b/rust_kernel/isofiles/boot/grub/grub.cfg new file mode 100644 index 0000000..7d1c964 --- /dev/null +++ b/rust_kernel/isofiles/boot/grub/grub.cfg @@ -0,0 +1,8 @@ + +set timeout=2 +set default=0 + +menuentry "my os" { + multiboot2 /boot/kernel.bin + boot +} diff --git a/rust_kernel/isofiles/boot/kernel.bin b/rust_kernel/isofiles/boot/kernel.bin new file mode 100755 index 0000000..0732f80 Binary files /dev/null and b/rust_kernel/isofiles/boot/kernel.bin differ diff --git a/rust_kernel/isofiles/kernel.bin b/rust_kernel/isofiles/kernel.bin new file mode 100755 index 0000000..f199f57 Binary files /dev/null and b/rust_kernel/isofiles/kernel.bin differ diff --git a/rust_kernel/linker.ld b/rust_kernel/linker.ld new file mode 100644 index 0000000..2dec252 --- /dev/null +++ b/rust_kernel/linker.ld @@ -0,0 +1,16 @@ +ENTRY(start) + +SECTIONS { + . = 10K; /* load into memory at 1M */ + + .boot : + { + /* ensure that the multiboot header is at the beginning */ + *(.multiboot2_header) + } + + .text : + { + *(.text) + } +} diff --git a/rust_kernel/multiboot2_header.asm b/rust_kernel/multiboot2_header.asm new file mode 100644 index 0000000..ac5e7b9 --- /dev/null +++ b/rust_kernel/multiboot2_header.asm @@ -0,0 +1,14 @@ +section .multiboot2_header + +header_start: + dd 0xe85250d6 ;multiboot 2 magic number + dd 0 ; architecture 0 (protected i386) + dd header_end - header_start ;header length + ;checksum + dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start)) + + dw 0 ;type + dw 0 ;flags + dd 8 ;size +header_end: + diff --git a/rust_kernel/rust_boot.asm b/rust_kernel/rust_boot.asm new file mode 100644 index 0000000..e807fd4 --- /dev/null +++ b/rust_kernel/rust_boot.asm @@ -0,0 +1,9 @@ +global start + +section .text +bits 32 + +start: + mov edi, 0xb8000 + mov dword [edi], 0x2f4b2f4f + hlt diff --git a/rust_kernel/rust_kernel.rs b/rust_kernel/rust_kernel.rs new file mode 100644 index 0000000..e69de29