Skip to content
Snippets Groups Projects
Commit b7f6d800 authored by Eemeli Lehtonen's avatar Eemeli Lehtonen
Browse files

barebones multiboot init (no Rust)

parent 0c620198
No related branches found
No related tags found
No related merge requests found
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "hyperion"
version = "0.1.0"
...@@ -8,12 +8,4 @@ edition = "2021" ...@@ -8,12 +8,4 @@ edition = "2021"
[lib] [lib]
crate-type = ["staticlib"] crate-type = ["staticlib"]
[profile.release]
debug = 1
[dependencies] [dependencies]
[build-dependencies]
#cc = "1.0.78"
nasm-rs = "0.2.4"
Makefile 0 → 100644
##
# Hyperion
#
# @file
# @version 0.1
ARCH ?= x86_64
PROFILE ?= debug
#PROFILE ?= release
NASM ?= nasm
LD ?= ld.lld
OBJCOPY ?= llvm-objcopy
CARGO ?= cargo
#CARGO ?= cargo-clif
TARGET_DIR ?= target
HYPER_DIR := ${TARGET_DIR}/hyperion/${ARCH}
ARCH_DIR := src/arch/${ARCH}
# hyperion kernel lib
RUST_T_x86_64 := x86_64-unknown-none
CARGO_DIR := ${TARGET_DIR}/${RUST_T_${ARCH}}/${PROFILE}
RUST_F_debug :=
RUST_F_release:= --release
CARGO_FLAGS ?=
CARGO_FLAGS += ${RUST_F_${PROFILE}}
CARGO_FLAGS += --target=${RUST_T_${ARCH}}
KERNEL_LIB := ${CARGO_DIR}/libhyperion.a
KERNEL_SRC := $(filter-out %: ,$(file < ${CARGO_DIR}/libhyperion.d))
${KERNEL_LIB} : ${KERNEL_SRC} Makefile Cargo.toml Cargo.lock
@echo "\n\033[32m--[[ building Hyperion lib ]]--\033[0m"
${CARGO} build ${CARGO_FLAGS}
# hyperion boot code
BOOT_SRC := ${ARCH_DIR}/start.asm
BOOT_OBJ := ${HYPER_DIR}/start.o
NASM_F_x86_64 := elf64
NASM_F_x86 := elf32
NASM_FLAGS ?=
NASM_FLAGS += ${BOOT_SRC}
NASM_FLAGS += -o ${BOOT_OBJ}
NASM_FLAGS += -f ${NASM_F_${ARCH}}
${BOOT_OBJ} : ${BOOT_SRC} Makefile
@echo "\n\033[32m--[[ building Hyperion boot ]]--\033[0m"
mkdir -p ${HYPER_DIR}
${NASM} ${NASM_FLAGS}
# hyperion kernel elf
LD_SCRIPT := ${ARCH_DIR}/link.ld
KERNEL_ELF := ${HYPER_DIR}/hyperion
KERNEL_DEPS := ${BOOT_OBJ} ${KERNEL_LIB}
LD_M_x86_64 := elf_x86_64
LD_M_x86 := elf_i386
LD_FLAGS ?=
LD_FLAGS += ${KERNEL_DEPS}
LD_FLAGS += -o ${KERNEL_ELF}
LD_FLAGS += --gc-sections
LD_FLAGS += -T ${LD_SCRIPT}
LD_FLAGS += -m ${LD_M_${ARCH}}
${KERNEL_ELF} : ${KERNEL_DEPS} ${LD_SCRIPT} Makefile
@echo "\n\033[32m--[[ building Hyperion kernel ]]--\033[0m"
mkdir -p ${HYPER_DIR}
${LD} ${LD_FLAGS}
# evil hack to satisfy qemu and grub:
# the entry format has to be x86 not x86_64
${OBJCOPY} -O elf32-i386 ${KERNEL_ELF}
# build alias
build : ${KERNEL_ELF}
# qemu alias
QEMU_x86_64 ?= qemu-system-x86_64
QEMU_x86 ?= qemu-system-x86
QEMU_FLAGS ?=
QEMU_FLAGS += -enable-kvm
QEMU_FLAGS += -d cpu_reset,guest_errors
QEMU_FLAGS += -kernel ${KERNEL_ELF}
qemu : ${KERNEL_ELF}
${QEMU_${ARCH}} ${QEMU_FLAGS}
.PHONY : build qemu
# end
const CONFIG: bootloader_api::BootloaderConfig = {
let mut config = bootloader_api::BootloaderConfig::new_default();
config.kernel_stack_size = 4096 * 4; // 16KiB
config
};
bootloader_api::entry_point!(super::kernel_main, config = &CONFIG);
ENTRY(start)
SECTIONS {
. = 1M;
.boot_text : ALIGN(4k) {
KEEP(*(.multiboot1))
*(.boot)
}
.text : ALIGN(4k) {
*(.text)
}
}
;; ----------
;; Multiboot2
;; ----------
section .multiboot2
header_start:
dd 0xE85250D6 ;; multiboot2 magic
dd 0 ;; arch: 32 bit (protected mode)
dd header_end - header_start ;; header length
dd 0x100000000 - (0xE85250D6 + header_end - header_start) ;; checksum
dd 0 ;; end tag
dd 8
header_end:
;; ----------
;; Multiboot1
;; ----------
section .multiboot1
dd 0x1BADB002 ;; multiboot1 magic
dd 3 ;; flags
dd 0x100000000 - (0x1BADB002 + 3) ;; checksum
section .boot
global start
bits 32
start:
cli
cld
hlt
#![no_std]
#![no_main]
#[panic_handler]
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
loop {}
}
#[no_mangle]
#[link_section = ".boot"]
pub extern "C" fn _start() {}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment