From f0d680df62f5caf72137ee5a40f2e24ed299fa46 Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Thu, 9 Jan 2025 18:04:39 +0300 Subject: [PATCH 1/5] Add status check --- kernel/kernel.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/kernel/kernel.c b/kernel/kernel.c index 874afe0..c11dc5e 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -5,10 +5,19 @@ int multiboot_init(uint64_t *addr, uint32_t magic); void kernel_main64(uint64_t *multiboot, uint32_t magic, void *esp, uint64_t base) { serial_init( ); - multiboot_init(multiboot, magic); - serial_write_byte('['); - serial_write_byte('O'); - serial_write_byte('K'); - serial_write_byte(']'); + int status = multiboot_init(multiboot, magic); + + if (status) { + serial_write_byte('['); + serial_write_byte('O'); + serial_write_byte('K'); + serial_write_byte(']'); + } else { + serial_write_byte('['); + serial_write_byte('E'); + serial_write_byte('R'); + serial_write_byte('R'); + serial_write_byte(']'); + } for (;;) {} } \ No newline at end of file From 0f6175afb1edb58ab0524b7a9da240175ac68f14 Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Thu, 9 Jan 2025 18:17:36 +0300 Subject: [PATCH 2/5] Add 1280x800 mode --- boot/grub.cfg | 10 +++++++--- kernel/arch/amd64/boot.s | 7 ++++++- kernel/kernel.c | 4 ++++ kernel/multiboot.c | 9 +++++++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/boot/grub.cfg b/boot/grub.cfg index 59e04b5..aa9ff7c 100644 --- a/boot/grub.cfg +++ b/boot/grub.cfg @@ -1,7 +1,11 @@ -set timeout=0 +set timeout=5 set default=0 - +insmod gfxterm +insmod vbe +insmod vga +set gfxmode=1280x800x32 menuentry "CIS-OS" { multiboot /boot/kernel.elf - module /initrd.cpio + module /initrd.cpio initrd + boot } \ No newline at end of file diff --git a/kernel/arch/amd64/boot.s b/kernel/arch/amd64/boot.s index 3493246..9a3ac67 100644 --- a/kernel/arch/amd64/boot.s +++ b/kernel/arch/amd64/boot.s @@ -8,7 +8,8 @@ .set MULTIBOOT_MAGIC, 0x1BADB002 .set MULTIBOOT_FLAG_PAGE_ALIGN, 1 << 0 .set MULTIBOOT_FLAG_MEMORY_INFO, 1 << 1 -.set MULTIBOOT_FLAGS, MULTIBOOT_FLAG_PAGE_ALIGN | MULTIBOOT_FLAG_MEMORY_INFO +.set MULTIBOOT_VIDEO_MODE, 1 << 2 +.set MULTIBOOT_FLAGS, MULTIBOOT_FLAG_PAGE_ALIGN | MULTIBOOT_FLAG_MEMORY_INFO | MULTIBOOT_VIDEO_MODE .set MULTIBOOT_CHECKSUM, -(MULTIBOOT_MAGIC + MULTIBOOT_FLAGS) .align 4 @@ -21,6 +22,10 @@ multiboot_header: .long bss_start .long end .long _start +.long 0 +.long 1280 +.long 800 +.long 32 .section .stack, "aw", @nobits stack_bottom: diff --git a/kernel/kernel.c b/kernel/kernel.c index c11dc5e..8c79df7 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -5,7 +5,11 @@ int multiboot_init(uint64_t *addr, uint32_t magic); void kernel_main64(uint64_t *multiboot, uint32_t magic, void *esp, uint64_t base) { serial_init( ); + serial_write_byte(':'); + serial_write_byte('D'); + serial_write_byte('\n'); int status = multiboot_init(multiboot, magic); + serial_write_byte('\n'); if (status) { serial_write_byte('['); diff --git a/kernel/multiboot.c b/kernel/multiboot.c index 485ed25..e92dddc 100644 --- a/kernel/multiboot.c +++ b/kernel/multiboot.c @@ -1,4 +1,5 @@ #include <3rd/multiboot.h> +#include #include #define CHECK_FLAG(flags, bit) ((flags) & (1 << (bit))) @@ -7,18 +8,21 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { multiboot_info_t *mbi; + serial_write_byte('1' + __COUNTER__); /* Am I booted by a Multiboot-compliant boot loader? */ if (magic != MULTIBOOT_BOOTLOADER_MAGIC) { printf("Invalid magic number: 0x%x\n", (unsigned)magic); return -1; } + serial_write_byte('1' + __COUNTER__); /* Set MBI to the address of the Multiboot information structure. */ mbi = (multiboot_info_t *)addr; /* Print out the flags. */ printf("flags = 0x%x\n", (unsigned)mbi->flags); + serial_write_byte('1' + __COUNTER__); /* Are mem_* valid? */ if (CHECK_FLAG(mbi->flags, 0)) printf("mem_lower = %uKB, mem_upper = %uKB\n", (unsigned)mbi->mem_lower, @@ -30,6 +34,7 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { /* Is the command line passed? */ if (CHECK_FLAG(mbi->flags, 2)) printf("cmdline = %s\n", (char *)mbi->cmdline); + serial_write_byte('1' + __COUNTER__); /* Are mods_* valid? */ if (CHECK_FLAG(mbi->flags, 3)) { multiboot_module_t *mod = (multiboot_module_t *)(uint64_t)mbi->mods_addr; @@ -45,6 +50,7 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { return -1; } + serial_write_byte('1' + __COUNTER__); /* Is the symbol table of a.out valid? */ if (CHECK_FLAG(mbi->flags, 4)) { multiboot_aout_symbol_table_t *multiboot_aout_sym __attribute__((unused)) = @@ -67,6 +73,7 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { (unsigned)multiboot_elf_sec->addr, (unsigned)multiboot_elf_sec->shndx); } + serial_write_byte('1' + __COUNTER__); /* Are mmap_* valid? */ if (CHECK_FLAG(mbi->flags, 6)) { multiboot_memory_map_t *mmap; @@ -84,6 +91,7 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { (unsigned)(mmap->len & 0xffffffff), (unsigned)mmap->type); } + serial_write_byte('1' + __COUNTER__); /* Draw diagonal blue line. */ if (CHECK_FLAG(mbi->flags, 12)) { multiboot_uint32_t color; @@ -143,5 +151,6 @@ int multiboot_init(uint64_t *addr, uint32_t magic) { } } } + serial_write_byte('1' + __COUNTER__); return 1; } \ No newline at end of file From e3692f97cb919ce631a5d27b40888dd76b20d4e5 Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Sat, 11 Jan 2025 14:04:03 +0300 Subject: [PATCH 3/5] Add cpio package to depends --- .github/workflows/c-cpp.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index f6d1ef3..65fccc6 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -16,7 +16,7 @@ jobs: - name: configure run: | sudo apt update - sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools + sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools cpio - name: make run: make - name: run and test diff --git a/README.md b/README.md index 93a4a9a..905b2fc 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Users: 0 1. Установите необходимые инструменты: ```bash -sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools clang-format +sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools clang-format cpio ``` 2. Соберите проект: From 99f8ba125c9e6a929ec75b5b7a6c64c7835945fe Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Sat, 11 Jan 2025 14:14:57 +0300 Subject: [PATCH 4/5] Move to C23 --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 273f612..b679584 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ SRCS := $(shell find kernel/ -name "*.c" -o -name "*.s") OBJS := $(patsubst %.c, %.o, $(patsubst %.s, %.o, $(SRCS))) $(shell mkdir -p $(dir $(OBJS))) -CFLAGS = -m64 -Wall -Werror -std=gnu11 -Ikernel/include -ffreestanding -O0 -fno-stack-protector +CFLAGS = -m64 -Wall -Werror -std=gnu2x -Ikernel/include -ffreestanding -O0 -fno-stack-protector ASFLAGS = -64 .PHONY: all run test clean format @@ -27,7 +27,7 @@ kernel/kernel.elf: $(OBJS) as $(ASFLAGS) -o $@ $< serial.log: cis-os.iso - timeout 10s qemu-system-x86_64 -display none -m 256 -cdrom $< -d guest_errors -serial file:$@ --no-reboot -no-shutdown || true + timeout 10s qemu-system-x86_64 -vga vmware -display none -m 256 -cdrom $< -d guest_errors -serial file:$@ --no-reboot -no-shutdown || true test: serial.log cat $< @@ -35,7 +35,7 @@ test: serial.log grep -q '\[OK\]' $< && echo "Test passed." || (echo "Test failed." && exit 1) run: cis-os.iso - qemu-system-x86_64 -m 256 -cdrom $< -d guest_errors -serial file:serial.log --no-reboot -no-shutdown + qemu-system-x86_64 -vga vmware -m 256 -cdrom $< -d guest_errors -serial file:serial.log --no-reboot -no-shutdown clean: rm -rf isodir From 4278431933e9a3e9513ad3f075ec1d2295f0266e Mon Sep 17 00:00:00 2001 From: Aren Elchinyan Date: Sat, 11 Jan 2025 14:15:17 +0300 Subject: [PATCH 5/5] Fix depends on WSL --- .github/workflows/c-cpp.yml | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 65fccc6..440ed1f 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -16,7 +16,7 @@ jobs: - name: configure run: | sudo apt update - sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools cpio + sudo apt install gcc build-essential grub2-common grub-pc xorriso qemu-system-x86 xorriso mtools cpio - name: make run: make - name: run and test diff --git a/README.md b/README.md index 905b2fc..068b61e 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Users: 0 1. Установите необходимые инструменты: ```bash -sudo apt install gcc build-essential grub2-common qemu-system-x86 xorriso mtools clang-format cpio +sudo apt install gcc build-essential grub2-common grub-pc xorriso qemu-system-x86 xorriso mtools clang-format cpio ``` 2. Соберите проект: