From 751c1f527def60e27ce11854b0025b6c391e780f Mon Sep 17 00:00:00 2001 From: AfonsoCMSousa Date: Tue, 18 Nov 2025 18:52:51 +0000 Subject: [PATCH] Fix: Fixed QEMU and Bootloader errors (started from 32-bit -> 64-bit) --- SoraOS | Bin 5456 -> 5836 bytes boot.asm | 40 +++++++++++++++++++++++++++++++--------- build.sh | 6 +++--- kernel.o | Bin 1312 -> 1256 bytes linker.ld | 1 + 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/SoraOS b/SoraOS index 86019735be7ca0db166fff9981272df4ee389b4f..79db673e34a56778dee31e6c03f7de60cd8f3c08 100755 GIT binary patch literal 5836 zcmeHLQEMDk6h5=N$!^+BcZ?MuqOyb_6?EK&tw@#PCfy{$+O(S#`!=1;Om|~;cDB1W zkc#MP5UuS)^fCD4gD+BAq=JGE3)>O}->oRL4;G8`MewN>*6-Xqw^>sWf503#bHDGL z@7_Ce?wx_T?-Wb3hGCGl7{!TMhfK<&{dB*|F_I0Sz!lz$C>^~rd%OvYO&V?3Qme29O0{eS)= zbn?f%urKv~Y7mD}K zY|~;A?M62SxS(JHu&m%PU_rqYU{=9BJK8khVsi8Qo~#Skmuo$D>?HMH-JkZCZan#! zSvTG|GWk`^w0^#jnCv}HTgE@nIAp!HE|Y9Oxs3jUHa9bKIC}siK9fC|x2CLv*{R&r zpGzYET5rz}Aqhlm?~o&hTP76N>}q%2OC0Ir7P8Q1|m z@QWcIiw)C9;C$}IW@3b&(8iJHJwFCcl^_t7)AniAYc;&O-4@RBs$B_$2zJFp(4?kc z&)dSO)I9~ghD%MiDRhjXiam%(UUh}t6fNQwGqi+6tgHu(s_h4^7sl0XSj%MF*a3EN z-kvQNUMt%3N6Tc-l@_K8C3|6ZcCol*FBPUsMH|BP7hkZd9%fj!MQyFIYB}q)>N_h9 zBCCDQ$Ni!eE!EaE^4IEOg&&_RuV$ZVIli}p?3&vmOL*(ZHUi;U)yA4tSzD>Q&#kyB zVg38Wmg@+ItSZXdtfP0O-6m@}@O`f#coqJijYGzJo4+;kgb+)ZmRMc%zJD52>(W@^ zG<2l_o&I*^26Xa_5<30{YSX$S2=I8raNai^=zh~8w4lu^2e1Gyx6lbH8GNUef zJbqvFc)Tw!LZ@@A)X&ilF@H<={n>7!E=wnc|5Mo2%P8C_UxlXH#I@aW3ln= Q4C?mcL%Jz5>Y{aj1Ag{3#Q*>R literal 5456 zcmeHL&ubG=5T4zXCT$aUtqO&REIEi?)-@>Mi85%_E&#rFh+TyBs`9^Dssz!BBZVtLOCUjBep-98SV=K9N@ zMwE4_fK)&#AQg}bNCl(6GJ4E{+=)<%fX%14~yyaP21avqmDGn2RUl zbKYS_ylHo1@Z-;LY0?G80F=Q=#U+8G5`MdO0)B(zlSBLz$4ODY-8%t)DDeCsf7QhU zKzjSl#$?pF=(pA((4Pm1p2rwWBmSDNmK}$grH%~^tKG7i#SSY~8pX21m@|Yi zX9Mb0R@`81*CVsd+{kKGVZ&}Fi>y>`T3$$4(`nU6=o%hfC$r$_o^xR6E_m6X)nB(Pm|1QUc-{&Jv zjO9eZ^LXP2>=tIU|M&n3Ao@ukzlrnv{jqk(%$c)ZJkNC(!rz&M|Vi bX)k%^!zdKr6)=5fRR1U5e@76xAMXDP2OFue diff --git a/boot.asm b/boot.asm index c7cd83b..933bccd 100644 --- a/boot.asm +++ b/boot.asm @@ -21,6 +21,18 @@ _start: mov eax, pml4_table mov cr3, eax ; Load the PML4 table into CR3 + ; Link PML4 -> PDPT + mov dword [pml4_table], pdpt_table + 0x3 + mov dword [pml4_table + 4], 0x0 + + ; Link PDPT -> PD + mov dword [pdpt_table], pd_table + 0x3 + mov dword [pdpt_table + 4], 0x0 + + ; Link PD -> 2MB Physical Page 0 + mov dword [pd_table], 0x83 + mov dword [pd_table + 4], 0x0 + mov eax, cr4 or eax, 0x20 ; Enable PAE mov cr4, eax @@ -45,15 +57,6 @@ kernel_stack_bottom: resb 16 * 1024 kernel_stack_top: -gdt_ptr: - dw 0 ; Limit (set by linker/code later) - dq 0 ; Base Address (set by linker/code later) -gdt_start: ; Start of the actual GDT entries - ; Entry 0: Null Descriptor - dq 0x0000000000000000 - dq 0x00AF9A000000FFFF - dq 0x00AF92000000FFFF -gdt_end: pml4_table: ; Define a simple PML4 table here (identity mapping for simplicity) @@ -61,6 +64,25 @@ pml4_table: resb 4096 ; Reserve 4 KB for the PML4 table pml4_end: +pdpt_table: + resb 4096 ; Reserve 4 KB for the PDPT table +pdpt_end: + +pd_table: + resb 4096 ; Reserve 4 KB for the PD table +pd_end: + +section .data +gdt_ptr: + dw (gdt_end - gdt_start - 1) ; Limit (set by linker/code later) + dq gdt_start ; Base Address (set by linker/code later) +gdt_start: ; Start of the actual GDT entries + ; Entry 0: Null Descriptor + dq 0x0000000000000000 + dq 0x00AF9A000000FFFF + dq 0x00AF92000000FFFF +gdt_end: + section .text [bits 64] ; Tell NASM to assemble in 64-bit mode diff --git a/build.sh b/build.sh index e6b90e2..1e54115 100755 --- a/build.sh +++ b/build.sh @@ -1,8 +1,8 @@ echo ">>> Compiling bootloader" -nasm boot.asm -o boot.o -f elf64 +nasm boot.asm -o boot.o -f elf32 echo ">>> Compiling kernel" -gcc kernel.c -o kernel.o -c -m64 -ffreestanding -nostdlib +gcc kernel.c -o kernel.o -c -m32 -ffreestanding -nostdlib -no-pie echo ">>> Linking kernel" -ld -T linker.ld -o SoraOS boot.o kernel.o +gcc -m32 -nostdlib -no-pie -T linker.ld -o SoraOS boot.o kernel.o diff --git a/kernel.o b/kernel.o index ddcc3d6b75e48d513c72de155a55b9364c958546..25eef42e369f2810c0c15d41120968b825013e5e 100644 GIT binary patch literal 1256 zcma)5&ubG=5T4!qG^Vu{4?+cVP>Dz%X-GxHLz9x^5)3rWdEKVlL}Grh*+41m3h~RxcH6R=rYbly|M&VyRZPB!L{d7Q+x@W`x`UzP zdWWJ|-04^cuHAD)wcWvZh;IH{K7x6Bfz9`sgz`K27I;_G`%vBw-z$Z8$+>IMcejSX z4d_;w_>Kf;&w9K;)?)pKQ10RAC};jUUv#}E2$BCUUJe}YiSrQ18I)&f(e-Kw5R*?i zhw67rpE+tXv@pI*L#vIh=OEy}jW98V&4!pp_izNvJz;xt1Y#rgfhCOtpC uck(!o#aeKsfWQ!T2}%x?`&diQ4p7d))BhoT)}inXEb`ds7e5m$n)e4n+mk#1 literal 1312 zcmbtTK`#SA6n?v^ElNrpBplWW36s@SA`Vh%N)JLpBrd|LDN?&_wkuH=5{X1y`~)Yz z!BIHyNBjV{-gvK_w_TH-c**R0-}l}(Z)Ruas<6Il8V0Z#unZl^ ztm(Clof&IBD>7o<%Gj9&J8LhfWyR22IC^nl8JJ+a5XXBlG(3tqGUIX!jEl4}o=PMi zuy_JF8f0bqtPG`Z&HP~8bg+Vm?nZrL@b%p-+Y_#$lkLZFB*M3PQMw|1Po9YqR9xrO zYwd|>`u&k301)+t8#ssP1HbK0I11!N0OH6A91w@~I*3x$b)|=#R}G}V-!oSaoKi*M zWA9wl{Ax}5K?8&@&m197_RGHGO6vSS8%H_)o47VjPT_Fh3R7*=CJ_+V6D2Wz(lA3^ zKZOZ8w!i9UQA=~$IHJb=`L1w|`?II}$uZZEe~p4jtk)JWm%#Ds>=Az`jlM4Zitb?@ z&8h2~O24Q)J6*qv33^94E>QkaEp$xbKJ>Is)-&I&H%V-zKOlfc?}5%p*VDZE*&zk= aR>{(B7k(8T;$e)s>7P~Maah?7bo~#tL~ZW? diff --git a/linker.ld b/linker.ld index 2dce285..28df9ed 100644 --- a/linker.ld +++ b/linker.ld @@ -1,3 +1,4 @@ +OUTPUT_FORMAT(elf32-i386) ENTRY(_start) SECTIONS