From 461136c643f1e4bd241c1e892e7f4c6ff419c094 Mon Sep 17 00:00:00 2001 From: Arthur Beck Date: Sat, 25 Jan 2025 09:14:42 -0600 Subject: [PATCH] Kernel can now succesfully boot --- kernel/build | 54 ++++++++++++++++---------- kernel/build.rs | 6 +++ kernel/build_and_emulate | 9 ++++- kernel/config.aphro.example | 17 ++++++-- kernel/emulate | 2 + kernel/functions | 6 +-- kernel/grub/boot/aphrodite.kernel | Bin 16200 -> 18992 bytes kernel/grub/boot/grub/grub.cfg | 4 +- kernel/kernel.flat | Bin 16200 -> 18992 bytes kernel/src/include/util.rs | 17 ++++++++ kernel/src/internal/arch/x86/entry.rs | 54 ++++++++++++++++++++++---- 11 files changed, 132 insertions(+), 37 deletions(-) diff --git a/kernel/build b/kernel/build index 6efcc47..ebfbdd2 100755 --- a/kernel/build +++ b/kernel/build @@ -1,35 +1,49 @@ #!/bin/bash -DIR="${BASH_SOURCE%/*}" -if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi +( + set -e -. "$DIR/functions" + DIR="${BASH_SOURCE%/*}" + if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi -get_version + . "$DIR/functions" -cp config.aphro config.aphro.tmp + rm config.aphro.tmp + cp config.aphro config.aphro.tmp -export $(grep -Ev '^#' config.aphro.tmp | xargs) + export $(grep -Ev '^#' config.aphro.tmp | xargs) -cd ../kernel + get_version -cargo build --target i686-unknown-none.json --release -Zbuild-std --bin entrypoint -# build the kernel's entrypoint + if [[ "$CFG_VERSION" != "$VERSION" ]]; then + echo -n "[WARN] Configuration version \"$CFG_VERSION\" is different then actual version \"$VERSION\"" + if [[ "$CONT_WITH_DIFFERENT_VERSION" != "true" ]]; then + echo "; not continuing" + exit 1 + fi + echo + fi -cp target/i686-unknown-none/release/entrypoint kernel.flat -# copy it out + cd ../kernel -rm -rf grub aphrodite.iso aphrodite-grub.iso + cargo build --target i686-unknown-none.json --release -Zbuild-std --bin entrypoint + # build the kernel's entrypoint -if [[ $CONFIG_BUILD_GRUB = "true" ]]; then - cp -r ./grub_template ./grub + cp target/i686-unknown-none/release/entrypoint kernel.flat + # copy it out - cp kernel.flat ./grub/boot/aphrodite.kernel + rm -rf grub aphrodite.iso aphrodite-grub.iso - sed -i "s@%{VERSION}@$VERSION@g" ./grub/boot/grub/grub.cfg + if [[ $CONFIG_BUILD_GRUB = "true" ]]; then + cp -r ./grub_template ./grub - grub-mkrescue -o aphrodite-grub.iso grub - cp aphrodite-grub.iso aphrodite.iso -fi + cp kernel.flat ./grub/boot/aphrodite.kernel -reset_version_vars \ No newline at end of file + sed -i "s@%{VERSION}@$VERSION@g" ./grub/boot/grub/grub.cfg + + grub-mkrescue -o aphrodite-grub.iso grub + cp aphrodite-grub.iso aphrodite.iso + fi + + reset_version_vars +) \ No newline at end of file diff --git a/kernel/build.rs b/kernel/build.rs index 59a6e75..3d472c1 100644 --- a/kernel/build.rs +++ b/kernel/build.rs @@ -3,9 +3,15 @@ fn main() { // Begin checks println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_DISABLE_MULTIBOOT2_SUPPORT, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_HALT_ON_PANIC, values("true", "false", none()))"#); println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_SPIN_ON_PANIC, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_EXIT_LOOP_ON_INVALID_LENGTH, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_PANIC_ON_INVALID_LENGTH, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_WARN_ON_INVALID_LENGTH, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_ERROR_ON_INVALID_LENGTH, values("true", "false", none()))"#); + println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_OUTPUT_DEBUG, values("true", "false", none()))"#); println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_OUTPUT_INFO, values("true", "false", none()))"#); println!(r#"cargo:rustc-check-cfg=cfg(CONFIG_PREUSER_OUTPUT_WARN, values("true", "false", none()))"#); diff --git a/kernel/build_and_emulate b/kernel/build_and_emulate index 07b0ea1..ebc3b80 100755 --- a/kernel/build_and_emulate +++ b/kernel/build_and_emulate @@ -1,4 +1,9 @@ #!/bin/bash -./build -./emulate \ No newline at end of file +set -e + +DIR="${BASH_SOURCE%/*}" +if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi + +. $DIR/build +. $DIR/emulate \ No newline at end of file diff --git a/kernel/config.aphro.example b/kernel/config.aphro.example index 6a856b8..71aa889 100644 --- a/kernel/config.aphro.example +++ b/kernel/config.aphro.example @@ -1,4 +1,6 @@ -# config.aphro for aphrodite devel-83f6c5c-out-of-tree +# config.aphro for aphrodite devel-b3558c2-out-of-tree +CFG_VERSION=devel-b3558c2-out-of-tree +CONT_WITH_DIFFERENT_VERSION=false # Begin metadata @@ -10,14 +12,23 @@ VERSION=generate # Begin configs CONFIG_DISABLE_MULTIBOOT2_SUPPORT=false -CONFIG_PREUSER_HALT_ON_PANIC=false -CONFIG_PREUSER_SPIN_ON_PANIC=true +# Panic behavior. When debugging, generally halt on panic is more useful. +CONFIG_PREUSER_HALT_ON_PANIC=true +CONFIG_PREUSER_SPIN_ON_PANIC=false + +CONFIG_PREUSER_EXIT_LOOP_ON_INVALID_LENGTH=false +CONFIG_PREUSER_PANIC_ON_INVALID_LENGTH=true +CONFIG_PREUSER_WARN_ON_INVALID_LENGTH=true +CONFIG_PREUSER_ERROR_ON_INVALID_LENGTH=true + +# Whether to output various levels of messages. CONFIG_PREUSER_OUTPUT_DEBUG=true CONFIG_PREUSER_OUTPUT_INFO=true CONFIG_PREUSER_OUTPUT_WARN=true CONFIG_PREUSER_OUTPUT_ERROR=true CONFIG_PREUSER_OUTPUT_FATAL=true +# Whether to build an iso with GRUB. Used in ./build. CONFIG_BUILD_GRUB=true # End configs \ No newline at end of file diff --git a/kernel/emulate b/kernel/emulate index 0468435..25e71f7 100755 --- a/kernel/emulate +++ b/kernel/emulate @@ -1,4 +1,6 @@ #!/bin/bash +set -e + cd ../emulation bochs -q \ No newline at end of file diff --git a/kernel/functions b/kernel/functions index f5fc796..3aa4085 100644 --- a/kernel/functions +++ b/kernel/functions @@ -1,8 +1,5 @@ function get_version() { local TEMP_SUFFIX - if [[ $VERSION = "generate" ]]; then - unset VERSION - fi if git diff-index HEAD -- 2>&1 > /dev/null then TEMP_SUFFIX="-out-of-tree" @@ -10,6 +7,9 @@ function get_version() { SUFFIX="$SUFFIX$TEMP_SUFFIX" VERSION="${VERSION:-devel-$(git rev-parse --short HEAD)$SUFFIX}" + if [[ "$VERSION" == "generate" ]]; then + VERSION="devel-$(git rev-parse --short HEAD)$SUFFIX" + fi } function reset_version_vars() { diff --git a/kernel/grub/boot/aphrodite.kernel b/kernel/grub/boot/aphrodite.kernel index b8503b093060fe04424a1cad3057b59844569f56..5425ef1536c46d1825237ac12962351e761d6347 100755 GIT binary patch literal 18992 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 bsc0QtI8uHW9JOhu?_7t!$3dN)h@tfV@QMcI diff --git a/kernel/grub/boot/grub/grub.cfg b/kernel/grub/boot/grub/grub.cfg index bd79404..bcd56f3 100644 --- a/kernel/grub/boot/grub/grub.cfg +++ b/kernel/grub/boot/grub/grub.cfg @@ -1,8 +1,8 @@ set timeout=15 set default=0 -menuentry "Aphrodite" --class aphrodite --class kernel --class os $menuentry_id_option 'aphrodite-basic-generate' { - echo 'Loading Aphrodite aphrodite-generate ...' +menuentry "Aphrodite" --class aphrodite --class kernel --class os $menuentry_id_option 'aphrodite-basic-devel-b3558c2-out-of-tree' { + echo 'Loading Aphrodite aphrodite-devel-b3558c2-out-of-tree ...' multiboot2 /boot/aphrodite.kernel boot } \ No newline at end of file diff --git a/kernel/kernel.flat b/kernel/kernel.flat index b8503b093060fe04424a1cad3057b59844569f56..5425ef1536c46d1825237ac12962351e761d6347 100755 GIT binary patch literal 18992 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 bsc0QtI8uHW9JOhu?_7t!$3dN)h@tfV@QMcI diff --git a/kernel/src/include/util.rs b/kernel/src/include/util.rs index 495d7c7..daaade4 100644 --- a/kernel/src/include/util.rs +++ b/kernel/src/include/util.rs @@ -39,6 +39,23 @@ pub fn u32_as_u8_slice(mut value: u32) -> [u8; 10] { buf } +/// Converts an u8 to an [u8; 3]. +pub fn u8_as_u8_slice(mut value: u8) -> [u8; 3] { + let mut buf = [0u8; 3]; + let mut i = 2; + if value == 0 { + buf[0] = b'0'; + } + while value > 0 { + let digit = value%10; + let char = b'0' + digit as u8; + buf[i] = char; + value = value / 10; + i -= 1; + } + buf +} + /// Converts an usize(32 or 64 bit) to an [u8; 10]. pub fn usize_as_u8_slice(mut value: usize) -> [u8; 20] { let mut buf = [0u8; 20]; diff --git a/kernel/src/internal/arch/x86/entry.rs b/kernel/src/internal/arch/x86/entry.rs index ad4b76b..04b2de3 100644 --- a/kernel/src/internal/arch/x86/entry.rs +++ b/kernel/src/internal/arch/x86/entry.rs @@ -3,7 +3,9 @@ #![no_main] #![warn(missing_docs)] #![allow(unexpected_cfgs)] +#![allow(static_mut_refs)] #![feature(ptr_metadata)] +#![feature(cfg_match)] use core::{arch::asm, ffi::CStr, panic::PanicInfo}; use aphrodite::multiboot2::{BootInfo, CString, ColorInfo, FramebufferInfo, MemoryMap, PaletteColorDescriptor, RawMemoryMap, RootTag, Tag}; @@ -159,8 +161,8 @@ extern "C" fn _start() -> ! { // ...before the BootInfo's bootloader_name is set. }, 8 => { // Framebuffer info - if current_tag.tag_len < 40 { // Unexpected size, something is probably up - panic!("size of framebuffer info tag < 40"); + if current_tag.tag_len < 31 { // Unexpected size, something is probably up + panic!("size of framebuffer info tag < 31"); } let framebufferinfo: *const FramebufferInfo = ptr as *const FramebufferInfo; let colorinfo: ColorInfo; @@ -192,14 +194,31 @@ extern "C" fn _start() -> ! { BI.color_info = Some(colorinfo); }, _ => { // Unknown/unimplemented tag type, ignore - sinfos("Unknown tag type "); - sinfobnpln(&aphrodite::u32_as_u8_slice(current_tag.tag_type)); + swarnings("Unknown tag type "); + swarningbnpln(&aphrodite::u32_as_u8_slice(current_tag.tag_type)); } } sinfounp(b'\n'); - ptr = ptr + current_tag.tag_len as usize; + ptr = (ptr + current_tag.tag_len as usize + 7) & !7; if ptr>end_addr { - panic!("current tag length would put pointer out-of-bounds") + cfg_match! { + cfg(all(CONFIG_PREUSER_ERROR_ON_INVALID_LENGTH = "true", CONFIG_PREUSER_PANIC_ON_INVALID_LENGTH = "false")) => { + serrorsln("Current tag length would put pointer out-of-bounds; CONFIG_PREUSER_ERROR_ON_INVALID_LENGTH is set, continuing"); + } + cfg(all(CONFIG_PREUSER_WARN_ON_INVALID_LENGTH = "true", CONFIG_PREUSER_PANIC_ON_INVALID_LENGTH = "false")) => { + swarningsln("Current tag length would put pointer out-of-bounds; CONFIG_PREUSER_WARN_ON_INVALID_LENGTH is set, continuing"); + } + } + cfg_match! { + cfg(not(CONFIG_PREUSER_PANIC_ON_INVALID_LENGTH = "false")) => { + panic!("current tag length would put pointer out-of-bounds") + } + cfg(CONFIG_PREUSER_EXIT_LOOP_ON_INVALID_LENGTH = "true") => { + sinfos("Exiting loop as current tag length would put pointer out-of-bounds "); + sinfosnpln("and CONFIG_PREUSER_EXIT_LOOP_ON_INVALID_LENGTH is set"); + break; + } + } } current_tag = core::ptr::read_volatile(ptr as *const Tag); } @@ -209,8 +228,29 @@ extern "C" fn _start() -> ! { } } } + sdebugsln("Bootloader information has been successfully loaded"); + soutputu(b'\n'); + unsafe { + if BI.framebuffer_info.clone().is_some() { + let framebuffer_info = BI.framebuffer_info.clone().unwrap(); + sdebugs("Framebuffer width: "); + sdebugbnpln(&aphrodite::u32_as_u8_slice(framebuffer_info.width)); + sdebugs("Framebuffer height: "); + sdebugbnpln(&aphrodite::u32_as_u8_slice(framebuffer_info.height)); + sdebugs("Framebuffer pitch: "); + sdebugbnpln(&aphrodite::u32_as_u8_slice(framebuffer_info.pitch)); + sdebugs("Framebuffer address: "); + sdebugbnpln(&aphrodite::usize_as_u8_slice(framebuffer_info.address as usize)); + sdebugs("Framebuffer bpp: "); + sdebugbnpln(&aphrodite::u8_as_u8_slice(framebuffer_info.bpp)); + sdebugs("Framebuffer type: "); + sdebugbnpln(&aphrodite::u8_as_u8_slice(framebuffer_info.fb_type)); + sdebugs("Framebuffer length: "); + sdebugbnpln(&aphrodite::usize_as_u8_slice(framebuffer_info.len)); + } + } - panic!("kernel exited"); + panic!("kernel unexpectedly exited"); } #[unsafe(link_section = ".panic")]