zy-branch
hahahazhangyan 1 year ago
parent 5258ef6f8d
commit 476943d2a5

@ -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;
}

Loading…
Cancel
Save