feat: working bootloader and basic kernel (just dyes screen green)
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(MyShittyKernel LANGUAGES ASM C)
|
||||
|
||||
if(NOT LLVM_BIN)
|
||||
execute_process(COMMAND brew --prefix llvm OUTPUT_VARIABLE LLVM_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set(LLVM_BIN "${LLVM_PREFIX}/bin")
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_COMPILER "${LLVM_BIN}/clang")
|
||||
set(CMAKE_ASM_COMPILER "${LLVM_BIN}/clang")
|
||||
set(LLVM_OBJCOPY "${LLVM_BIN}/llvm-objcopy")
|
||||
|
||||
set(TARGET_TRIPLE aarch64-none-elf)
|
||||
add_compile_options(--target=${TARGET_TRIPLE} -ffreestanding -nostdlib -O0 -g)
|
||||
|
||||
set(LINKER_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/linker.ld)
|
||||
add_link_options(
|
||||
--target=${TARGET_TRIPLE}
|
||||
-fuse-ld=lld
|
||||
-nostdlib
|
||||
-static
|
||||
-Wl,-T,${LINKER_SCRIPT}
|
||||
)
|
||||
|
||||
add_executable(kernel.elf Source/entry.S)
|
||||
|
||||
add_custom_command(TARGET kernel.elf POST_BUILD
|
||||
COMMAND ${LLVM_OBJCOPY} -O binary kernel.elf kernel.bin
|
||||
COMMENT "kernel.elf -> kernel.bin"
|
||||
)
|
||||
@@ -0,0 +1,22 @@
|
||||
.section .text.boot, "ax"
|
||||
.global _start
|
||||
|
||||
_start:
|
||||
add x1, x0, #64 // x1 = BIFramebuffer
|
||||
ldr x2, [x1] // x2 = base
|
||||
ldr x3, [x1, #16] // x3 = width
|
||||
ldr x4, [x1, #24] // x4 = height
|
||||
|
||||
mul x5, x3, x4
|
||||
|
||||
mov w6, #0x00FF00
|
||||
movk w6, #0x0000, lsl #16
|
||||
|
||||
fill_loop:
|
||||
cbz x5, done
|
||||
str w6, [x2], #4
|
||||
sub x5, x5, #1
|
||||
b fill_loop
|
||||
|
||||
done:
|
||||
b done
|
||||
@@ -0,0 +1,12 @@
|
||||
BUILD_DIR := env_var_or_default("BUILD_DIR", justfile_directory() + "/.build")
|
||||
TEMP_DIR := env_var_or_default("TEMP_DIR", BUILD_DIR + "/temp")
|
||||
build:
|
||||
cmake -B {{TEMP_DIR}}/Kernel -S .
|
||||
|
||||
cmake --build {{TEMP_DIR}}/Kernel
|
||||
|
||||
cp {{TEMP_DIR}}/Kernel/kernel.bin {{BUILD_DIR}}/Kernel/ksOSKernel.bin
|
||||
@echo "✅ Kernel ready at: {{BUILD_DIR}}/Kernel/ksOSKernel.bin"
|
||||
|
||||
clean:
|
||||
rm -rf {{TEMP_DIR}}/Kernel
|
||||
Reference in New Issue
Block a user