[fix] Serial & PFPrint

This commit is contained in:
2026-05-24 19:48:37 +08:00
Unverified
parent 4fc02d296f
commit 2c17e426c1
4 changed files with 35 additions and 57 deletions
-2
View File
@@ -1,5 +1,3 @@
#pragma once #pragma once
// 存放各类参数定义,后续给CI用 // 存放各类参数定义,后续给CI用
#define ENABLE_SERIAL_PRINTS true
+1 -8
View File
@@ -1,7 +1,6 @@
#include <memory/heap.h> #include <memory/heap.h>
#include <memory/pmm.h> #include <memory/pmm.h>
#include <serial.h> #include <serial.h>
#include <BUILD_INFOS.h>
struct heap_block { struct heap_block {
UINTN size; // includes header; bit 0 = 1 used, 0 free UINTN size; // includes header; bit 0 = 1 used, 0 free
@@ -67,11 +66,9 @@ static void heap_expand(UINTN min_size) {
g_heap_end = (UINT8*)new_block + BLOCK_SIZE(new_block); g_heap_end = (UINT8*)new_block + BLOCK_SIZE(new_block);
} }
if (ENABLE_SERIAL_PRINTS) {
serial_write("HEAP: expanded by "); serial_write("HEAP: expanded by ");
serial_write_hex(pages * PAGE_SIZE); serial_write_hex(pages * PAGE_SIZE);
serial_write(" bytes\n"); serial_write(" bytes\n");
}
} }
void init_heap() { void init_heap() {
@@ -89,13 +86,11 @@ void init_heap() {
initial->next = NULL; initial->next = NULL;
g_heap_free_list = initial; g_heap_free_list = initial;
if (ENABLE_SERIAL_PRINTS) {
serial_write("HEAP: init OK, "); serial_write("HEAP: init OK, ");
serial_write_hex(HEAP_INIT_PAGES * PAGE_SIZE); serial_write_hex(HEAP_INIT_PAGES * PAGE_SIZE);
serial_write(" bytes @ "); serial_write(" bytes @ ");
serial_write_hex((UINTN)mem); serial_write_hex((UINTN)mem);
serial_write("\n"); serial_write("\n");
}
} }
void* kmalloc(UINTN size) { void* kmalloc(UINTN size) {
@@ -125,7 +120,7 @@ void* kmalloc(UINTN size) {
block->size = block_sz | 1; // mark used block->size = block_sz | 1; // mark used
} }
if (ENABLE_SERIAL_PRINTS && size > 1024) { if (size > 1024) {
serial_write("HEAP: kmalloc "); serial_write("HEAP: kmalloc ");
serial_write_hex(size); serial_write_hex(size);
serial_write(" -> "); serial_write(" -> ");
@@ -180,11 +175,9 @@ void kfree(void* ptr) {
block->next = *prev; block->next = *prev;
*prev = block; *prev = block;
if (ENABLE_SERIAL_PRINTS) {
serial_write("HEAP: kfree @ "); serial_write("HEAP: kfree @ ");
serial_write_hex((UINTN)ptr); serial_write_hex((UINTN)ptr);
serial_write("\n"); serial_write("\n");
}
} }
void* kcalloc(UINTN num, UINTN size) { void* kcalloc(UINTN num, UINTN size) {
+1 -9
View File
@@ -1,7 +1,6 @@
#include <memory/pmm.h> #include <memory/pmm.h>
#include <efilib.h> #include <efilib.h>
#include <serial.h> #include <serial.h>
#include <BUILD_INFOS.h>
pmm_t g_pmm; pmm_t g_pmm;
@@ -158,7 +157,6 @@ EFI_STATUS pmm_init() {
uefi_call_wrapper((void*)ST->BootServices->FreePool, 1, mem_map); uefi_call_wrapper((void*)ST->BootServices->FreePool, 1, mem_map);
if (ENABLE_SERIAL_PRINTS) {
serial_write("PMM: init OK, total "); serial_write("PMM: init OK, total ");
serial_write_hex(total_pages); serial_write_hex(total_pages);
serial_write(" pages ("); serial_write(" pages (");
@@ -168,7 +166,6 @@ EFI_STATUS pmm_init() {
serial_write(" pages @ "); serial_write(" pages @ ");
serial_write_hex(bitmap_addr); serial_write_hex(bitmap_addr);
serial_write("\n"); serial_write("\n");
}
return EFI_SUCCESS; return EFI_SUCCESS;
} }
@@ -191,11 +188,9 @@ void* pmm_alloc_pages(UINTN n) {
bitmap_set(idx); bitmap_set(idx);
g_pmm.free_pages--; g_pmm.free_pages--;
if (ENABLE_SERIAL_PRINTS) {
serial_write("PMM: alloc 1 page @ "); serial_write("PMM: alloc 1 page @ ");
serial_write_hex((UINTN)page); serial_write_hex((UINTN)page);
serial_write("\n"); serial_write("\n");
}
return page; return page;
} }
@@ -214,13 +209,11 @@ void* pmm_alloc_pages(UINTN n) {
} }
g_pmm.free_pages -= n; g_pmm.free_pages -= n;
if (ENABLE_SERIAL_PRINTS) {
serial_write("PMM: alloc "); serial_write("PMM: alloc ");
serial_write_hex(n); serial_write_hex(n);
serial_write(" pages @ "); serial_write(" pages @ ");
serial_write_hex((UINTN)base); serial_write_hex((UINTN)base);
serial_write("\n"); serial_write("\n");
}
return base; return base;
} }
} else { } else {
@@ -247,14 +240,13 @@ void pmm_free_pages(void* addr, UINTN n) {
g_pmm.free_list_head = page; g_pmm.free_list_head = page;
} }
if (ENABLE_SERIAL_PRINTS) {
serial_write("PMM: free "); serial_write("PMM: free ");
serial_write_hex(n); serial_write_hex(n);
serial_write(" pages @ "); serial_write(" pages @ ");
serial_write_hex((UINTN)addr); serial_write_hex((UINTN)addr);
serial_write("\n"); serial_write("\n");
} }
}
UINTN pmm_get_free_count() { UINTN pmm_get_free_count() {
return g_pmm.free_pages; return g_pmm.free_pages;
-5
View File
@@ -1,7 +1,5 @@
#include <serial.h> #include <serial.h>
#include <efilib.h> #include <efilib.h>
#include <fonts/pixel_font.h>
#include <BUILD_INFOS.h>
serial_context g_serial; serial_context g_serial;
@@ -11,14 +9,12 @@ void serial_init(EFI_SERIAL_IO_PROTOCOL *SerialIo) {
} }
void serial_write_char(char c) { void serial_write_char(char c) {
// 不要直接调用,ENABLE_SERIAL_PRINTS有问题,因此不会打印DEBUG
if (!g_serial.SerialIo) { if (!g_serial.SerialIo) {
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n"); uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
return; return;
} }
UINTN size = 1; UINTN size = 1;
EFI_STATUS status = uefi_call_wrapper((void*)g_serial.SerialIo->Write, 3, g_serial.SerialIo, &size, &c); EFI_STATUS status = uefi_call_wrapper((void*)g_serial.SerialIo->Write, 3, g_serial.SerialIo, &size, &c);
// if (ENABLE_SERIAL_PRINTS) pf_print((const char*) c);
if (status != EFI_SUCCESS) { if (status != EFI_SUCCESS) {
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: write failed\n"); uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: write failed\n");
} }
@@ -29,7 +25,6 @@ void serial_write(const char *str) {
uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n"); uefi_call_wrapper((void*)ST->ConOut->OutputString, 2, ST->ConOut, L"serial: null io\n");
return; return;
} }
if (ENABLE_SERIAL_PRINTS) pf_print(str);
while (*str) { while (*str) {
serial_write_char(*str++); serial_write_char(*str++);
} }