From d186e164f95055a55c9c28718ff6f395700a419c Mon Sep 17 00:00:00 2001 From: SpookyDervish Date: Wed, 28 Jan 2026 13:25:40 +1100 Subject: [PATCH] get memory map --- OVMFbin/OVMF_VARS-pure-efi.fd | Bin 131072 -> 131072 bytes kernel/bin/CustomOS.img | Bin 48000000 -> 48000000 bytes kernel/bin/kernel.elf | Bin 10536 -> 10976 bytes kernel/lib/efiMemory.o | Bin 0 -> 1952 bytes kernel/lib/kernel.o | Bin 2688 -> 2264 bytes kernel/src/efiMemory.cpp | 18 ++++++++++++++++++ kernel/src/efiMemory.h | 12 ++++++++++++ kernel/src/kernel.cpp | 25 ++++++++++++------------- 8 files changed, 42 insertions(+), 13 deletions(-) create mode 100644 kernel/lib/efiMemory.o create mode 100644 kernel/src/efiMemory.cpp create mode 100644 kernel/src/efiMemory.h diff --git a/OVMFbin/OVMF_VARS-pure-efi.fd b/OVMFbin/OVMF_VARS-pure-efi.fd index 80b9da2e1a685842ad3108ceb0136a279fb73380..cd4ff9d27eefdc471ecf219c7cfbb8eecd331f23 100644 GIT binary patch delta 72 zcmZo@;Am*z*ihs#xz5UI^A?YDoSXYxo-l)Wj9HrxT5aS7GqZur&%BH|KbaBc~#i-Vc7>p0RUR5A1nX> delta 34 qcmZo@;Am*z*ihs#*{{fH^A?YDoSWln78P#}Xt<-<^kLZtMgaf`4iDJ? diff --git a/kernel/bin/CustomOS.img b/kernel/bin/CustomOS.img index df8a15199317386e8d37ce5f8dc72ece5f17a78b..9ccb1c68b6155a7c14db11f11f8b3d456ab58371 100644 GIT binary patch delta 5025 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 M;{(rw+T$7ZU%0w>LI3~& delta 4505 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 Zs>l10HNLG)2=cST{3C+1Y%%z}{x>;1xFP@m literal 0 HcmV?d00001 diff --git a/kernel/lib/kernel.o b/kernel/lib/kernel.o index c85e5cae24456cfd8c5ee686c494dd5c836c65bc..cfa38b8a052f8f24bf43517cbe4dd5253d5b55f4 100644 GIT binary patch delta 701 zcmZut&ubG=5Z-ya>F$PVqqe3iNK;T)?ZsZ&g3w>`%+%5vnhLF#Q0h$t4_>83L0BFs zl{xt1BKQv^pogMRl7hrTkQ{SdrH6V;Pxc_jdD-21@q>9k=KE&mdvANFeQwtmYpIvl zuWS`Cc)Irhm37rO3djZ$E3i#JUUybtRj)*@_c69H<;1d}Vzbx0GxvBdB3{@Qbd*a;mqfL7~U)cNwRH z%R`Zb^S#4ALv2)Ss2=uX{V08^4-TRp#{YYCIX{+&l{|c2JKvC@?i}z%HbL8djW=a$ z;Mq9)pbBJDIb(6&pcY)F4)_4%iNyLnLcwK`fZ26_Gni;hCG2e2@h%1 z%tD}73e93x-d-pz$)&q1>!sE8f-DtRR~DA@MVht7;1TUxm%Mk{2Sae!9KZEXFh0_; zmGwSrilJGPBVn68_E1v{i^Jte*b~iCHRW7O>i$GcyBYlghOTfpk_!AV*Ea&NOdIx; zs|PVU2EDf@#18NqFH*<$lj9A?cX#4ODf(`Y(6%!SL~ooKQHj-#4^{Hq84&{Acc(?w gqPOmJdP*CLdjD`ITt6Q5ibm6uZm3-`p6H%`0X%8u5&!@I literal 2688 zcmbuA-%Aux6vywVrIwmm4?zX<&`+viM^P}MHf6Vg!WK1(AeM1=wpI5Rvm>Yw20^q) z;A0RyMi2c7K`j|=5k%07(2Gz}4+iz-L$ICi%)NQN?UL4k@!s<}-*fKWd(Vt>kqglV zO=H3|cABkug3{Q$HV^yLFzaCL?2=Xbyl`z1gLP{qWR-3#C9V0UgGWeXl_INV*_w|m zS@W@$U~IAOMwYG8TdP$0iZajir7q^rtkQGDo>r?>$_%2F$TCEg$fqtEtV(71@VDv) z)CZuR--6tfwIf&FKuRBJpM9r48_-&t&|ckyHuG2Q0-fS&(mEC#u(!qE?CV9wMn68h z|3YsqvvY%kC-o!ehAth|&0eG1F!k@d@&JGH%S%`FQg-bWk{%x{ge9i6uu2HUp|kboFsrw}BYLvayroYew_ANu1D zq)qHc^^X97#^1YKA8qu1&3e{GZkMDN?Yp0I;rn|dhK}i^N3{_GwYXh}&(+~~>+t(^ z_~SbKNge*C4rh~&n{zToqEKM*c+s;Hlkr4)GM=)>GYr1#vG~;?vuD6AjwgnlT+(qJ zchHQ)Of%}*S!Zl2m2%uze{3Xb#-kU9MoHf9fNbZeM#EVSC&L`GsX+0@3 zNuC*^Lg}?ivOl53u}wLirXNfudJH|hm7bsU`G7?cBm>7?3y#+j297=z+yf*7NAC-M z2artFKL{|rKj_Of{Ugqy-zIU~8%(Y9KEOWTPIIyD7m3UJ6fXwqpvQ%N7hW7Pwf-@Q zw^Ll`&q!RZe_7%kl73R+vi_#Tv9_qM(;SBL!6PipCxVOjkQv39tY?qW=()j&#_(sZ zld%oYnf92Gv^|>{W5psf+C?%d|*BVvln_EG@n78U|NmI2A`@dWe+rZ{`po?u{yXaq+O z%Jx!ShzC`CoH%O!YraXjs43qux$G5RNbDC3ruzNFAPpfX**l&u{>O+A$9@jj06l^U z4aSvPu!eS+7l|F6xNK@Zy0F&$U*QcU*2n$hyCm|({bQTz u+Jx9NhiU#h@U6f)YCdYJcTb2dbNB&{Wa_c*q*$%|JAD7*yDCbk`M&_07RT=Z diff --git a/kernel/src/efiMemory.cpp b/kernel/src/efiMemory.cpp new file mode 100644 index 0000000..e9d5559 --- /dev/null +++ b/kernel/src/efiMemory.cpp @@ -0,0 +1,18 @@ +#include "efiMemory.h" + +const char* EFI_MEMORY_TYPE_STRINGS[] = { + "EfiReservedMemoryType", + "EfiLoaderCode", + "EfiLoaderData", + "EfiBootServicesCode", + "EfiBootServicesData", + "EfiRuntimeServicesCode", + "EfiRuntimeServicesData", + "EfiConventionalMemory", + "EfiUnusableMemory", + "EfiACPIReclaimMemory", + "EfiACPIMemoryNVS", + "EfiMemoryMappedIO", + "EfiMemoryMappedIOPortSpace", + "EfiPalCode" +}; \ No newline at end of file diff --git a/kernel/src/efiMemory.h b/kernel/src/efiMemory.h new file mode 100644 index 0000000..8acdf72 --- /dev/null +++ b/kernel/src/efiMemory.h @@ -0,0 +1,12 @@ +#pragma once +#include + +struct EFI_MEMORY_DESCRIPTOR { + uint32_t type; + void* physAddr; + void* virtAddr; + uint64_t numPages; + uint64_t attribs; +}; + +extern const char* EFI_MEMORY_TYPE_STRINGS[]; \ No newline at end of file diff --git a/kernel/src/kernel.cpp b/kernel/src/kernel.cpp index af5cf45..41fb9a4 100644 --- a/kernel/src/kernel.cpp +++ b/kernel/src/kernel.cpp @@ -2,6 +2,7 @@ #include #include "BasicRenderer.h" #include "cstr.h" +#include "efiMemory.h" struct BootInfo { @@ -20,19 +21,17 @@ extern "C" void __stack_chk_fail(void) { extern "C" void _start(BootInfo* bootInfo) { BasicRenderer newRenderer = BasicRenderer(bootInfo->framebuffer, bootInfo->psf1_Font); - newRenderer.Print(0xFFFFFF, to_string((uint64_t)1234976)); - newRenderer.cursorPosition = {0, 18}; - newRenderer.Print(0xFFFFFF, to_string((int64_t)-1234976)); - newRenderer.cursorPosition = {0, 36}; - newRenderer.Print(0xFFFFFF, to_string(-3.141)); - newRenderer.cursorPosition = {0, 54}; - newRenderer.Print(0xFFFFFF, to_hstring((uint64_t)0xF0)); - newRenderer.cursorPosition = {0, 72}; - newRenderer.Print(0xFFFFFF, to_hstring((uint32_t)0xF0)); - newRenderer.cursorPosition = {0, 90}; - newRenderer.Print(0xFFFFFF, to_hstring((uint16_t)0xF0)); - newRenderer.cursorPosition = {0, 108}; - newRenderer.Print(0xFFFFFF, to_hstring((uint8_t)0xF0)); + + // display information of memory map + uint64_t mMapEntries = bootInfo->mMapSize / bootInfo->mMapDescriptorSize; + for (int i = 0; i < mMapEntries; i++) { + EFI_MEMORY_DESCRIPTOR* desc = (EFI_MEMORY_DESCRIPTOR*)((uint64_t)bootInfo->mMap + (i * bootInfo->mMapDescriptorSize)); + newRenderer.Print(0xFFFFFFFF, EFI_MEMORY_TYPE_STRINGS[desc->type]); + newRenderer.Print(0xFFFFFFFF, " "); + newRenderer.Print(0xFFFF00FF, to_string(desc->numPages * 4096 / 1024)); + newRenderer.Print(0xFFFF00FF, " KB"); + newRenderer.cursorPosition = {0, newRenderer.cursorPosition.y + 18}; + } return; } \ No newline at end of file