Separating x86 and x64 kernels in order to map kernel to higher half easily. [In Progress]
This commit is contained in:
parent
abacfc4914
commit
01c7b53883
|
@ -1,7 +1,11 @@
|
|||
menuentry "HOS x86 with x64 [Dev]" {
|
||||
multiboot /HOS/kernel32
|
||||
module /HOS/kernel64 kernel64
|
||||
menuentry "HOS x86 [Dev]" {
|
||||
multiboot /HOS/kernel32
|
||||
}
|
||||
|
||||
menuentry "HOS x64 [Dev]" {
|
||||
multiboot /HOS/kernel64
|
||||
}
|
||||
|
||||
menuentry "HOS Multiboot2 [Pending]" {
|
||||
insmod kernel64
|
||||
multiboot2 /HOS/multiboot2.bin
|
||||
|
|
66
makefile
66
makefile
|
@ -14,7 +14,7 @@ C_SRC_PATH_32 := x86/src/c
|
|||
|
||||
ASM_SRC_PATH_32 := x86/src/asm
|
||||
|
||||
C_FLAGS_32 := -m32 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
C_FLAGS_32 := -m32 -std=c11 -g -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
|
||||
ASM_FLAGS_32 := -f elf32 -I $(ASM_SRC_PATH_32)/
|
||||
|
||||
|
@ -28,7 +28,7 @@ C_SRC_PATH_64 := x64/src/c
|
|||
|
||||
ASM_SRC_PATH_64 := x64/src/asm
|
||||
|
||||
C_FLAGS_64 := -m64 -std=c11 -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
C_FLAGS_64 := -m64 -std=c11 -g -c -fno-stack-protector -fno-builtin -mno-red-zone -mno-mmx -mno-sse -mno-sse2 -masm=intel -Wall -Wextra
|
||||
|
||||
ASM_FLAGS_64 := -f elf64 -I $(ASM_SRC_PATH_64)/
|
||||
|
||||
|
@ -80,65 +80,55 @@ ALL_OBJ_FILES_32 := $(addprefix $(OUTPUT_DIR)/,$(C_OBJ_FILES_32)) $(addprefix $(
|
|||
ALL_OBJ_FILES_64 := $(addprefix $(OUTPUT_DIR)/,$(C_OBJ_FILES_64)) $(addprefix $(OUTPUT_DIR)/,$(ASM_OBJ_FILES_64))
|
||||
|
||||
|
||||
#Commands
|
||||
|
||||
HOS: init compile link buildsymbol buildiso
|
||||
|
||||
print_source:
|
||||
$(info ${ALL_OUTPUT_DIRS})
|
||||
|
||||
|
||||
all : init compile link buildiso clean
|
||||
|
||||
|
||||
|
||||
init:
|
||||
sudo mkdir -p $(ALL_OUTPUT_DIRS)
|
||||
|
||||
|
||||
mkdir -p $(ALL_OUTPUT_DIRS)
|
||||
|
||||
compile: $(C_OBJ_FILES_32) $(ASM_OBJ_FILES_32) $(C_OBJ_FILES_64) $(ASM_OBJ_FILES_64)
|
||||
|
||||
|
||||
|
||||
link: $(KERNEL_BIN_32) $(KERNEL_BIN_64)
|
||||
|
||||
|
||||
|
||||
clean:
|
||||
sudo rm -rf $(OUTPUT_DIR)
|
||||
buildsymbol:
|
||||
objcopy --only-keep-debug $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(OUTPUT_DIR)/$(KERNEL_BIN_32).debug
|
||||
objcopy --only-keep-debug $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(OUTPUT_DIR)/$(KERNEL_BIN_64).debug
|
||||
objcopy --strip-debug $(OUTPUT_DIR)/$(KERNEL_BIN_32)
|
||||
objcopy --strip-debug $(OUTPUT_DIR)/$(KERNEL_BIN_64)
|
||||
|
||||
buildiso:
|
||||
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/HOS
|
||||
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/boot
|
||||
sudo mkdir -p $(OUTPUT_DIR)/temp_iso/boot/grub
|
||||
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(OUTPUT_DIR)/temp_iso/HOS/kernel64
|
||||
sudo mv $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(OUTPUT_DIR)/temp_iso/HOS/kernel32
|
||||
sudo cp $(GRUB_CFG) $(OUTPUT_DIR)/temp_iso/boot/grub/
|
||||
sudo grub-mkrescue -o HOS.iso $(OUTPUT_DIR)/temp_iso
|
||||
mkdir -p $(OUTPUT_DIR)/temp_iso/HOS
|
||||
mkdir -p $(OUTPUT_DIR)/temp_iso/boot
|
||||
mkdir -p $(OUTPUT_DIR)/temp_iso/boot/grub
|
||||
mv $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(OUTPUT_DIR)/temp_iso/HOS/kernel64
|
||||
mv $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(OUTPUT_DIR)/temp_iso/HOS/kernel32
|
||||
cp $(GRUB_CFG) $(OUTPUT_DIR)/temp_iso/boot/grub/
|
||||
grub-mkrescue -o $(OUTPUT_DIR)/HOS.iso $(OUTPUT_DIR)/temp_iso
|
||||
rm -rf $(OUTPUT_DIR)/temp_iso
|
||||
|
||||
clean:
|
||||
rm -rf $(OUTPUT_DIR)
|
||||
|
||||
%.o32: %.c
|
||||
sudo $(CC) $(C_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
|
||||
$(CC) $(C_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
%.o64: %.c
|
||||
sudo $(CC) $(C_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
|
||||
$(CC) $(C_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
%.oa32: %.asm
|
||||
sudo $(ASM) $(ASM_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
|
||||
$(ASM) $(ASM_FLAGS_32) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
%.oa64: %.asm
|
||||
sudo $(ASM) $(ASM_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
|
||||
$(ASM) $(ASM_FLAGS_64) -o $(OUTPUT_DIR)/$@ $^
|
||||
|
||||
$(KERNEL_BIN_32): $(ALL_OBJ_FILES_32)
|
||||
sudo $(LD) $(LD_FLAGS_32) -T $(LD_SCRIPT_32) -o $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(ALL_OBJ_FILES_32)
|
||||
|
||||
|
||||
$(LD) $(LD_FLAGS_32) -T $(LD_SCRIPT_32) -o $(OUTPUT_DIR)/$(KERNEL_BIN_32) $(ALL_OBJ_FILES_32)
|
||||
|
||||
$(KERNEL_BIN_64): $(ALL_OBJ_FILES_64)
|
||||
sudo $(LD) $(LD_FLAGS_64) -T $(LD_SCRIPT_64) -o $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(ALL_OBJ_FILES_64)
|
||||
$(LD) $(LD_FLAGS_64) -T $(LD_SCRIPT_64) -o $(OUTPUT_DIR)/$(KERNEL_BIN_64) $(ALL_OBJ_FILES_64)
|
||||
|
||||
|
|
|
@ -2,12 +2,28 @@ extern kmain
|
|||
global HLT_CPU
|
||||
global BOCHS_MAGIC_BREAKPOINT
|
||||
global kernel_heap
|
||||
;IMPORTANT: Before entering this, CPU should be in protected mode.
|
||||
;IMPORTANT: This module should be 4k-page aliened
|
||||
; IMPORTANT: This module should be 4k-page aliened
|
||||
[SECTION .entry]
|
||||
[BITS 32]
|
||||
;skip data definition
|
||||
; skip data definition
|
||||
jmp start
|
||||
|
||||
; MultiBoot Header
|
||||
GRUB_MAGIC equ 0x2BADB002
|
||||
MULTIBOOT_MAGIC_NUMBER equ 0x1BADB002
|
||||
MULTIBOOT_FLAGS equ 0x10003
|
||||
MULTIBOOT_CHECK_SUM equ - (MULTIBOOT_MAGIC_NUMBER + MULTIBOOT_FLAGS)
|
||||
MULTIBOOT_HEADER:
|
||||
dd MULTIBOOT_MAGIC_NUMBER
|
||||
dd MULTIBOOT_FLAGS
|
||||
dd MULTIBOOT_CHECK_SUM
|
||||
|
||||
dd MULTIBOOT_HEADER
|
||||
dd MULTIBOOT_HEADER
|
||||
dd 0
|
||||
dd 0
|
||||
dd entry_32
|
||||
|
||||
; here we need to construct a dummy gdt as well as a dummy page table(As simple as possible, maps 1G page sounds good)
|
||||
; for page table we only need 4 gigs since that's the maximum mem one can access in protected mode(without PAE)
|
||||
; flags are hard-coded... highly not recommended but for our purpose it's enough
|
||||
|
|
|
@ -63,9 +63,11 @@ ret
|
|||
;read_cr3
|
||||
hal_read_page_base:
|
||||
mov rax,cr3
|
||||
and rax,0xFFFFFFFFFF000 ;keep bits 12-51
|
||||
ret
|
||||
|
||||
;write_cr3
|
||||
hal_write_page_base:
|
||||
and rdi,0xFFFFFFFFFF000 ;keep bits 12-51
|
||||
mov cr3,rdi
|
||||
ret
|
Loading…
Reference in New Issue