ARM 上的 Xen:引导页表设置

问题描述 投票:0回答:0

我正在尝试理解 Arm64 上 Xen 的开始日代码。在

create_page_tables
中的
boot.S
函数中,有一部分我们尝试将Xen文本和数据映射到3级表中。

        /* Map Xen */
        adr_l x4, boot_third

        lsr   x2, x19, #THIRD_SHIFT  /* Base address for 4K mapping */
        lsl   x2, x2, #THIRD_SHIFT
        mov   x3, #PT_MEM_L3         /* x2 := Section map */
        orr   x2, x2, x3

        /* ... map of vaddr(start) in boot_third */
        mov   x1, xzr
1:      str   x2, [x4, x1]           /* Map vaddr(start) */
        add   x2, x2, #PAGE_SIZE     /* Next page */
        add   x1, x1, #8             /* Next slot */
        cmp   x1, #(XEN_PT_LPAE_ENTRIES<<3) /* 512 entries per page */
        b.lt  1b

x19 存储

start
入口点的物理地址,这是Xen文本的开始。我在这里感到困惑的是我们将 Xen 逐页映射到 L3 表的第一个索引,而没有考虑 L3 表索引。

例如,如果 x19 是

0x00100000
,我们是否必须从索引
0x10
开始映射,因为 L3 索引是位 [20:12],假设 4KB 颗粒大小?

还有一点不太明白,评论说我们是“section map”,是不是等同于“block mapping”?这在 L3 表中不是不可能的,因为 L3 条目必须是页面条目吗?

我在这里缺少什么?提前致谢!

arm64 boot bare-metal xen
© www.soinside.com 2019 - 2024. All rights reserved.