更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_vm_boot.h 文件参考

浏览源代码.

结构体

struct  ArchMmuInitMapping
 

类型定义

typedef struct ArchMmuInitMapping LosArchMmuInitMapping
 

函数

UINT32 OsVmAddrCheck (size_t tempAddr, size_t length)
 
VOID * OsVmBootMemAlloc (size_t len)
 
UINT32 OsSysMemInit (VOID)
 整个系统内存初始化 更多...
 
VOID OsInitMappingStartUp (VOID)
 OsInitMappingStartUp 开始初始化mmu 更多...
 

变量

LosArchMmuInitMapping g_archMmuInitMapping []
 
UINTPTR g_vmBootMemBase
 虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图 更多...
 
BOOL g_kHeapInited
 内核堆区初始化变量 更多...
 

类型定义说明

◆ LosArchMmuInitMapping

函数说明

◆ OsInitMappingStartUp()

VOID OsInitMappingStartUp ( VOID  )

OsInitMappingStartUp 开始初始化mmu

返回
参见

在文件 los_arch_mmu.c1263 行定义.

1264{
1265 OsArmInvalidateTlbBarrier();//使TLB失效
1266
1267 OsSwitchTmpTTB();//切换到临时TTB ,请想想为何要切换到临时 @note_thinking
1268
1269 OsSetKSectionAttr(KERNEL_VMM_BASE, FALSE);//设置内核空间属性
1270 OsSetKSectionAttr(UNCACHED_VMM_BASE, TRUE);//设置未缓存空间属性
1272}
STATIC VOID OsSetKSectionAttr(UINTPTR virtAddr, BOOL uncached)
设置内核空间段属性,可看出内核空间是固定映射到物理地址
STATIC VOID OsKSectionNewAttrEnable(VOID)
STATIC VOID OsSwitchTmpTTB(VOID)
切换临时页表
STATIC INLINE VOID OsArmInvalidateTlbBarrier(VOID)
Definition: los_tlb_v6.h:48

◆ OsSysMemInit()

UINT32 OsSysMemInit ( VOID  )

整个系统内存初始化

在文件 los_vm_boot.c65 行定义.

66{
67 STATUS_T ret;
68
69#ifdef LOSCFG_KERNEL_VM
70 OsKSpaceInit();//内核空间初始化
71#endif
72
73 ret = OsKHeapInit(OS_KHEAP_BLOCK_SIZE);// 内核堆空间初始化 512K
74 if (ret != LOS_OK) {
75 VM_ERR("OsKHeapInit fail\n");
76 return LOS_NOK;
77 }
78
79#ifdef LOSCFG_KERNEL_VM
80 OsVmPageStartup();// 物理内存初始化
81 g_kHeapInited = TRUE; //内核堆区初始化完成
82 OsInitMappingStartUp();//映射初始化
83#else
84 g_kHeapInited = TRUE;//内核堆区完成初始化
85#endif
86 return LOS_OK;
87}
VOID OsInitMappingStartUp(VOID)
OsInitMappingStartUp 开始初始化mmu
STATUS_T OsKHeapInit(size_t size)
内核空间动态内存(堆内存)初始化 , 争取系统动态内存池
Definition: los_memory.c:2095
int STATUS_T
Definition: los_typedef.h:215
BOOL g_kHeapInited
内核堆区初始化变量
Definition: los_vm_boot.c:46
VOID OsKSpaceInit(VOID)
内核虚拟空间初始化
Definition: los_vm_map.c:250
VOID OsVmPageStartup(VOID)
Definition: los_vm_page.c:72
函数调用图:
这是这个函数的调用关系图:

◆ OsVmAddrCheck()

UINT32 OsVmAddrCheck ( size_t  tempAddr,
size_t  length 
)

◆ OsVmBootMemAlloc()

VOID * OsVmBootMemAlloc ( size_t  len)

在文件 los_vm_boot.c50 行定义.

51{
52 UINTPTR ptr;
53
54 if (g_kHeapInited) {
55 VM_ERR("kernel heap has been initialized, do not to use boot memory allocation!");
56 return NULL;
57 }
58
59 ptr = LOS_Align(g_vmBootMemBase, sizeof(UINTPTR));//对齐
60 g_vmBootMemBase = ptr + LOS_Align(len, sizeof(UINTPTR));//通过改变 g_vmBootMemBase来获取内存
61 //这样也行,g_vmBootMemBase 真是野蛮粗暴
62 return (VOID *)ptr;
63}
LITE_OS_SEC_TEXT UINTPTR LOS_Align(UINTPTR addr, UINT32 boundary)
Align the value (addr) by some bytes (boundary) you specify.
Definition: los_misc.c:35
unsigned long UINTPTR
Definition: los_typedef.h:68
UINTPTR g_vmBootMemBase
虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图
Definition: los_vm_boot.c:45
函数调用图:
这是这个函数的调用关系图:

变量说明

◆ g_archMmuInitMapping

LosArchMmuInitMapping g_archMmuInitMapping[]
extern

◆ g_kHeapInited

BOOL g_kHeapInited
extern

内核堆区初始化变量

开机引导分配器分配内存,只有开机时采用的分配方式

在文件 los_vm_boot.c46 行定义.

◆ g_vmBootMemBase

UINTPTR g_vmBootMemBase
extern

虚拟内存区间检查, 需理解 los_vm_zone.h 中画出的鸿蒙虚拟内存全景图

内核空间可用于分配的区域,紧挨着.bss区

在文件 los_vm_boot.c45 行定义.