Added build type detection, simplified legacy BIOS booting on x86_64

This commit is contained in:
Jozef Nagy 2025-01-25 19:53:01 +01:00
parent 0236209e95
commit 1fc97f9c5f
Signed by untrusted user who does not match committer: crz
GPG key ID: 459A4811CEAC7068
18 changed files with 298 additions and 107 deletions

View file

@ -32,7 +32,6 @@ BOOT_CFLAGS := $(CFLAGS) \
BOOT_LDFLAGS := $(LDFLAGS)
$(shell find . -type d \( -name arch -o -name platform \) -prune -name '*.c')
BOOT_ASFILES := $(shell find $(BOOT_ROOT)/arch/$(ARCH) -type d -name arch/$(ARCH)/uefi -prune -name '*.S')
BOOT_CFILES := $(shell find $(BOOT_ROOT)/arch/$(ARCH) -type d -name arch/$(ARCH)/uefi -prune -name '*.c')
@ -56,9 +55,9 @@ install:
$(STAGE1_HDD): $(BOOT_ROOT)/arch/$(ARCH)/stage1/boot-hdd.asm
@mkdir -p $(@D)
@printf " AS\tboot/arch/$(ARCH)/stage1/stage1-hdd.bin\n"
@nasm -fbin -I$(BOOT_ROOT)/arch/$(ARCH)/stage1 $< -o $@
@nasm -fbin -I$(BOOT_ROOT)/arch/$(ARCH)/stage1 $(ASFLAGS) $< -o $@
$(STAGE1_CD): $(BOOT_ROOT)/arch/$(ARCH)/stage1/boot-cd.asm
@mkdir -p $(@D)
@printf " AS\tboot/arch/$(ARCH)/stage1/stage1-cd.bin\n"
@nasm -fbin -I$(BOOT_ROOT)/arch/$(ARCH)/stage1 $< -o $@
@nasm -fbin -I$(BOOT_ROOT)/arch/$(ARCH)/stage1 $(ASFLAGS) $< -o $@

View file

@ -17,7 +17,7 @@
## SOFTWARE. ##
###################################################################################
BOOTFILE := $(BUILD_DIR)/boot/raspi4/axboot.elf
BOOTFILE := $(BUILD_DIR)/boot/raspi4/kernel8.img
INCLUDE_DIRS += $(BOOT_ROOT)/include \
$(BOOT_ROOT)/include/arch/$(ARCH) \
@ -26,14 +26,18 @@ INCLUDE_DIRS += $(BOOT_ROOT)/include \
BOOT_AS := $(ARCH)-elf-gcc
BOOT_CC := $(ARCH)-elf-gcc
BOOT_LD := $(ARCH)-elf-ld
BOOT_OBJCOPY := $(ARCH)-elf-objcopy
BOOT_ASFLAGS := $(ASFLAGS) \
$(foreach d, $(INCLUDE_DIRS), -I$d)
BOOT_CFLAGS := $(CFLAGS) \
$(foreach d, $(INCLUDE_DIRS), -I$d)
$(foreach d, $(INCLUDE_DIRS), -I$d) \
-mstrict-align \
-nostartfiles
BOOT_LDFLAGS := $(LDFLAGS)
BOOT_LDFLAGS := $(LDFLAGS) \
-T$(BOOT_ROOT)/arch/$(ARCH)/linker.ld
COMMON_CFILES := $(shell find $(BOOT_ROOT)/common -name '*.c')
COMMON_ARCH_CFILES := $(shell find $(BOOT_ROOT)/arch/$(ARCH)/common -name '*.c')
@ -41,11 +45,11 @@ COMMON_ARCH_ASFILES := $(shell find $(BOOT_ROOT)/arch/$(ARCH)/common -name '*.S'
PLATFORM_CFILES := $(shell find $(BOOT_ROOT)/platform/$(PLATFORM) -name '*.c')
PLATFORM_ASFILES := $(shell find $(BOOT_ROOT)/platform/$(PLATFORM) -name '*.S')
BOOT_OBJ := $(COMMON_CFILES:$(BOOT_ROOT)/common/%.c=$(BUILD_DIR)/boot/raspi4/common/%.c.o) \
$(COMMON_ARCH_CFILES:$(BOOT_ROOT)/arch/$(ARCH)/common/%.c=$(BUILD_DIR)/boot/raspi4/arch/%.c.o) \
$(COMMON_ARCH_ASFILES:$(BOOT_ROOT)/arch/$(ARCH)/common/%.S=$(BUILD_DIR)/boot/raspi4/arch/%.S.o) \
$(PLATFORM_CFILES:$(BOOT_ROOT)/platform/$(PLATFORM)/%.c=$(BUILD_DIR)/boot/raspi4/%.c.o) \
$(PLATFORM_ASFILES:$(BOOT_ROOT)/platform/$(PLATFORM)/%.S=$(BUILD_DIR)/boot/raspi4/%.S.o)
BOOT_OBJ := $(COMMON_CFILES:$(BOOT_ROOT)/common/%.c=$(BUILD_DIR)/boot/$(PLATFORM)/common/%.c.o) \
$(COMMON_ARCH_CFILES:$(BOOT_ROOT)/arch/$(ARCH)/common/%.c=$(BUILD_DIR)/boot/$(PLATFORM)/arch/%.c.o) \
$(COMMON_ARCH_ASFILES:$(BOOT_ROOT)/arch/$(ARCH)/common/%.S=$(BUILD_DIR)/boot/$(PLATFORM)/arch/%.S.o) \
$(PLATFORM_CFILES:$(BOOT_ROOT)/platform/$(PLATFORM)/%.c=$(BUILD_DIR)/boot/$(PLATFORM)/%.c.o) \
$(PLATFORM_ASFILES:$(BOOT_ROOT)/platform/$(PLATFORM)/%.S=$(BUILD_DIR)/boot/$(PLATFORM)/%.S.o)
.PHONY: all
all: $(BOOTFILE)
@ -54,13 +58,15 @@ all: $(BOOTFILE)
.PHONY: install
install: all
@mkdir -p $(SYSROOT_DIR)
@printf " INSTALL\t/kernel.elf\n"
@cp $(BOOTFILE) $(SYSROOT_DIR)/kernel.elf
@printf " INSTALL\t/kernel8.img\n"
@cp $(BOOTFILE) $(SYSROOT_DIR)/kernel8.img
$(BOOTFILE): $(BOOT_OBJ)
@mkdir -p $(@D)
@printf " LD\t$(notdir $@)\n"
@$(BOOT_LD) $(BOOT_LDFLAGS) $^ -o $@
@printf " LD\taxboot.elf\n"
@$(BOOT_LD) $(BOOT_LDFLAGS) $^ -o $(BUILD_DIR)/boot/raspi4/axboot.elf
@printf " OCOPY\t$(notdir $@)\n"
@$(BOOT_OBJCOPY) -O binary $(BUILD_DIR)/boot/raspi4/axboot.elf $@
-include $(wildcard $(BUILD_DIR)/boot/*.d)
@ -69,6 +75,11 @@ $(BUILD_DIR)/boot/raspi4/%.c.o: $(BOOT_ROOT)/platform/$(PLATFORM)/%.c
@printf " CC\t$(subst $(ROOT_DIR)/,,$<)\n"
@$(BOOT_CC) $(BOOT_CFLAGS) -c $< -o $@
$(BUILD_DIR)/boot/raspi4/%.S.o: $(BOOT_ROOT)/platform/$(PLATFORM)/%.S
@mkdir -p $(@D)
@printf " AS\t$(subst $(ROOT_DIR)/,,$<)\n"
@$(BOOT_AS) $(BOOT_ASFLAGS) -c $< -o $@
$(BUILD_DIR)/boot/raspi4/common/%.c.o: $(BOOT_ROOT)/common/%.c
@mkdir -p $(@D)
@printf " CC\t$(subst $(ROOT_DIR)/,,$<)\n"

View file

@ -0,0 +1,69 @@
/*********************************************************************************/
/* Module Name: boot.S */
/* Project: AurixOS */
/* */
/* Copyright (c) 2024-2025 Jozef Nagy */
/* */
/* This source is subject to the MIT License. */
/* See License.txt in the root of this repository. */
/* All other rights reserved. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR */
/* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, */
/* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE */
/* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER */
/* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, */
/* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */
/* SOFTWARE. */
/*********************************************************************************/
.section ".text.boot"
.global _start
_start:
//
// hello, am i on the main core?
//
mrs x1, mpidr_el1
and x1, x1, #3
cbz x1, 2f
//
// no? alright then, sorry for interrupting. *leaves*
//
1:
wfe
b 1b
//
// ok cool now execute this huge pile of horrible code
// thanks :>
//
2:
//
// let the stack live below our code
//
ldr x1, =_start
mov sp, x1
//
// no junk allowed in .bss!
//
ldr x1, =__bss_start
ldr w2, =__bss_size
3: cbz w2, 4f
str xzr, [x1], #8
sub w2, w2, #1
cbnz w2, 3b
4:
bl main_menu
//
// crazy? i was crazy once.
// they locked me in a room. a rubber room. a rubber room with rats.
// and rats make me crazy.
// (bootloader returned, just halt the whole thing)
//
b 1b