mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 07:19:20 +00:00
Make kernel to boot in x32
This commit is contained in:
@ -18,100 +18,3 @@
|
||||
.intel_syntax noprefix
|
||||
|
||||
.code32
|
||||
.equ KERNEL_STACK_SIZE, 0x4000 /* 16KB */
|
||||
|
||||
.extern DetectCPUID
|
||||
.extern Detect64Bit
|
||||
.extern DetectPSE
|
||||
.extern DetectPAE
|
||||
.extern multiboot_main
|
||||
.extern LoadGDT32
|
||||
.extern BootPageTable
|
||||
.extern UpdatePageTable
|
||||
.extern GDT64.Ptr
|
||||
.extern GDT64.Code
|
||||
.extern GDT64.Data
|
||||
|
||||
.section .bootstrap.data
|
||||
MB_HeaderMagic:
|
||||
.quad 0
|
||||
|
||||
MB_HeaderInfo:
|
||||
.quad 0
|
||||
|
||||
.section .bootstrap.text
|
||||
|
||||
.global Multiboot2_start
|
||||
Multiboot2_start:
|
||||
cli
|
||||
|
||||
mov [MB_HeaderMagic], eax
|
||||
mov [MB_HeaderInfo], ebx
|
||||
|
||||
call DetectCPUID
|
||||
cmp eax, 0
|
||||
je $
|
||||
|
||||
call Detect64Bit
|
||||
cmp eax, 0
|
||||
je $
|
||||
|
||||
call DetectPSE
|
||||
cmp eax, 0
|
||||
je $
|
||||
|
||||
call DetectPAE
|
||||
cmp eax, 0
|
||||
je $
|
||||
|
||||
mov ecx, cr4
|
||||
or ecx, 0x00000010 /* Set PSE in CR4 */
|
||||
or ecx, 0x00000020 /* Set PAE in CR4 */
|
||||
mov cr4, ecx
|
||||
|
||||
call LoadGDT32
|
||||
call UpdatePageTable
|
||||
|
||||
mov ecx, BootPageTable
|
||||
mov cr3, ecx
|
||||
|
||||
mov ecx, 0xC0000080 /* EFER */
|
||||
rdmsr
|
||||
or eax, 0x800 | 0x100 | 0x1 /* Set LME, LMA, SCE */
|
||||
wrmsr
|
||||
|
||||
mov ecx, cr0
|
||||
or ecx, 0x80000001 /* Set PG and PE in CR0 */
|
||||
mov cr0, ecx
|
||||
|
||||
lgdt [GDT64.Ptr]
|
||||
jmp GDT64.Code:HigherHalfStart
|
||||
|
||||
.extern UpdatePageTable64
|
||||
|
||||
.code64
|
||||
HigherHalfStart:
|
||||
mov ax, GDT64.Data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov fs, ax
|
||||
mov gs, ax
|
||||
mov ss, ax
|
||||
|
||||
call UpdatePageTable64
|
||||
|
||||
mov rsp, KernelStack + KERNEL_STACK_SIZE
|
||||
mov rbp, 0
|
||||
mov rdi, [MB_HeaderMagic]
|
||||
mov rsi, [MB_HeaderInfo]
|
||||
push rsi
|
||||
push rdi
|
||||
call multiboot_main
|
||||
.Hang:
|
||||
hlt
|
||||
jmp .Hang
|
||||
|
||||
.section .bootstrap.bss
|
||||
.align 16
|
||||
KernelStack:
|
||||
.space KERNEL_STACK_SIZE
|
||||
|
Reference in New Issue
Block a user