From 7845d5da705fcbff9d0f1e4c07d89ece9323bfed Mon Sep 17 00:00:00 2001 From: MeexReay Date: Tue, 28 Jan 2025 00:00:11 +0300 Subject: [PATCH] hello world asdasd --- Makefile | 37 ++++++++++++++++++++++++++++++++++++ kernel/.cargo/config.toml | 15 +++++++++++++++ shell.nix | 8 ++++++++ src/boot.s | 40 +++++++++++++++++++++++++++++++++++++++ src/grub.cfg | 5 +++++ src/linker.ld | 23 ++++++++++++++++++++++ 6 files changed, 128 insertions(+) create mode 100644 Makefile create mode 100644 kernel/.cargo/config.toml create mode 100644 shell.nix create mode 100644 src/boot.s create mode 100644 src/grub.cfg create mode 100644 src/linker.ld diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0d9fae9 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +.PHONY: clean run run-iso target_dir + +target/main.iso: target/kernel.elf target_dir + cp 'src/grub.cfg' target/iso/boot/grub + cp '$<' target/iso/boot + grub-mkrescue -o '$@' target/iso + +target/boot.o: src/boot.s target_dir + nasm -f elf32 '$<' -o '$@' + +target/kernel.elf: src/linker.ld target/boot.o target/kernel.o + i686-elf-ld -m elf_i386 -nostdlib -o '$@' -T $^ + +target/kernel.o: kernel/ target_dir + cd kernel && cargo build --release + cp kernel/target/x86-unknown-bare_metal/release/deps/kernel-*.o target/kernel.o + +target_dir: + mkdir -p target + mkdir -p target/iso + mkdir -p target/iso/lib + mkdir -p target/iso/boot + mkdir -p target/iso/boot/grub + +build: target/main.iso + +clean: + rm -rf target + rm -rf kernel/target + rm -rf kernel/Cargo.lock + mkdir target + +run-elf: target/kernel.elf + qemu-system-i386 -kernel '$<' + +run: target/main.iso + qemu-system-i386 -cdrom '$<' \ No newline at end of file diff --git a/kernel/.cargo/config.toml b/kernel/.cargo/config.toml new file mode 100644 index 0000000..4fe674c --- /dev/null +++ b/kernel/.cargo/config.toml @@ -0,0 +1,15 @@ + +[unstable] +build-std = ["core", "compiler_builtins"] +build-std-features = ["compiler-builtins-mem"] + +[build] +target = "x86-unknown-bare_metal.json" + +[target.x86-unknown-bare_metal] +rustflags = [ + "-C", "opt-level=s", # Эквивалент GCC -Os + "-C", "debuginfo=0", # Убирает отладочную информацию + "-C", "relocation-model=static", # Для freestanding + "--emit=obj" # Генерация объектного файла +] \ No newline at end of file diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..2e2dc87 --- /dev/null +++ b/shell.nix @@ -0,0 +1,8 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + nativeBuildInputs = + with pkgs; [ + pkgsCross.i686-embedded.buildPackages.gcc + ]; +} \ No newline at end of file diff --git a/src/boot.s b/src/boot.s new file mode 100644 index 0000000..2c66ac8 --- /dev/null +++ b/src/boot.s @@ -0,0 +1,40 @@ +global loader +global stack_ptr + +extern main + +MODULEALIGN equ 1<<0 +MEMINFO equ 1<<1 +FLAGS equ MODULEALIGN | MEMINFO +MAGIC equ 0x1BADB002 +CHECKSUM equ -(MAGIC + FLAGS) + +section .mbheader +align 4 +MultiBootHeader: + dd MAGIC + dd FLAGS + dd CHECKSUM + +section .text + +STACKSIZE equ 0x4000 + +loader: + mov esp, stack+STACKSIZE + push eax + push ebx + + call main + + cli + +hang: + hlt + jmp hang + +section .bss +align 4 +stack: + resb STACKSIZE +stack_ptr: diff --git a/src/grub.cfg b/src/grub.cfg new file mode 100644 index 0000000..9f12263 --- /dev/null +++ b/src/grub.cfg @@ -0,0 +1,5 @@ +set timeout=0 +set default="0" +menuentry "main" { + multiboot /boot/kernel.elf +} diff --git a/src/linker.ld b/src/linker.ld new file mode 100644 index 0000000..af95765 --- /dev/null +++ b/src/linker.ld @@ -0,0 +1,23 @@ +ENTRY (loader) +SECTIONS +{ + . = 0x00100000; + .mbheader : { + *(.mbheader) + } + .text : { + *(.text) + } + .rodata ALIGN (0x1000) : { + *(.rodata) + } + .data ALIGN (0x1000) : { + *(.data) + } + .bss : { + sbss = .; + *(COMMON) + *(.bss) + ebss = .; + } +}