From 476943d2a547fb22f2fd1484a0109b1837d4be30 Mon Sep 17 00:00:00 2001 From: hahahazhangyan <3316749729@qq.com> Date: Fri, 22 Dec 2023 21:20:11 +0800 Subject: [PATCH] boot --- .../kernel/base/vm/los_vm_boot.c | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/kernel_liteos_a-OpenHarmony-v3.1.7-Release/kernel/base/vm/los_vm_boot.c b/kernel_liteos_a-OpenHarmony-v3.1.7-Release/kernel/base/vm/los_vm_boot.c index 81287a26..fdb31e61 100644 --- a/kernel_liteos_a-OpenHarmony-v3.1.7-Release/kernel/base/vm/los_vm_boot.c +++ b/kernel_liteos_a-OpenHarmony-v3.1.7-Release/kernel/base/vm/los_vm_boot.c @@ -38,46 +38,47 @@ #include "los_vm_page.h" #include "los_arch_mmu.h" - +// 全局变量,代表启动内存的基地址,初始化为__bss_end的地址(通常是未初始化数据段的结束地址) UINTPTR g_vmBootMemBase = (UINTPTR)&__bss_end; +// 全局变量,表示内核堆是否已初始化,初始化为FALSE BOOL g_kHeapInited = FALSE; - +// 启动内存分配函数,用于在系统启动阶段从启动内存中分配内存 VOID *OsVmBootMemAlloc(size_t len) { UINTPTR ptr; - +// 如果内核堆已经初始化,则不能使用启动内存分配,返回NULL并报错 if (g_kHeapInited) { VM_ERR("kernel heap has been initialized, do not to use boot memory allocation!"); return NULL; } - + // 对启动内存基地址进行对齐处理,然后更新基地址为分配后的下一个位置 ptr = LOS_Align(g_vmBootMemBase, sizeof(UINTPTR)); g_vmBootMemBase = ptr + LOS_Align(len, sizeof(UINTPTR)); - +// 返回分配的内存地址 return (VOID *)ptr; } - +// 系统内存初始化函数,用于初始化系统内存管理相关资源 UINT32 OsSysMemInit(VOID) { STATUS_T ret; - + // 如果定义了LOSCFG_KERNEL_VM,则初始化内核的地址空间 #ifdef LOSCFG_KERNEL_VM OsKSpaceInit(); #endif - + // 初始化内核堆,如果失败则返回错误并报错 ret = OsKHeapInit(OS_KHEAP_BLOCK_SIZE); if (ret != LOS_OK) { VM_ERR("OsKHeapInit fail\n"); return LOS_NOK; } - + // 如果定义了LOSCFG_KERNEL_VM,则启动虚拟页和映射的初始化,然后设置内核堆为已初始化状态 #ifdef LOSCFG_KERNEL_VM OsVmPageStartup(); g_kHeapInited = TRUE; OsInitMappingStartUp(); -#else +#else // 否则直接设置内核堆为已初始化状态 g_kHeapInited = TRUE; #endif - + // 返回成功状态码 return LOS_OK; }