前言
本篇继续分析pre_init
函数的后半部分,代码不多。
kernel/arch/earm/pre_init.c
dcache_clean(); /* clean the caches */
pg_clear();
pg_identity(&kinfo);
kinfo.freepde_start = pg_mapkernel();
pg_load();
vm_enable_paging();
开始分析吧!
内容
dcache_clean 函数
清一下Cache,这里不展开说了,请小伙伴阅读ARM v7体系结构相关文档吧。
pg_clear 函数
这里是做页表清空操作。
页表定义如下
static u32_t pagedir[4096] __aligned(16384);
ARM v7要求页表要按照16K对齐(MMU只记录页表的高18位地址)。
pg_clear就是把页表 pagedir 的空间 memset 成0.
pg_identity函数
pg_identity函数稍微复杂一些,先整体看一下。
void pg_identity(kinfo_t *cbi)
{
uint32_t i;
phys_bytes phys;