linux版本:4.14.74
硬體:armv8 a53
經過前面幾章的內容,我們開啟了mmu,為kernel image建立了對映,通過呼叫start_kernel setup_arch建立頁表對映,讀取kernel建立頁表對映的**和流程如下圖所示,下面分章節對這三個部分進行說明
本文主要描述對映dtb的過程
1.
static pte_t bm_pte[ptrs_per_pte] __page_aligned_bss;
2.static pmd_t bm_pmd[ptrs_per_pmd] __page_aligned_bss __maybe_unused;
3.static pud_t bm_pud[ptrs_per_pud] __page_aligned_bss __maybe_unused;
1.
/* 2. * the p*d_populate functions call virt_to_phys implicitly so they can't be used
3. * directly on kernel symbols (bm_p*d). this function is called too early to use
4. * lm_alias so __p*d_populate functions must be used to populate with the
5. * physical address from __pa_symbol.
6. */
7.void __init early_fixmap_init
(void)8.
else
29.if
(pud_none
(*pud)
)/******3*****/
30.__pud_populate
(pud,
__pa_symbol
(bm_pmd)
, pmd_type_table)
;31. pmd =
fixmap_pmd
(addr)
;/******4******/
32.__pmd_populate
(pmd,
__pa_symbol
(bm_pte)
, pmd_type_table)
;33. …
34.}
dtb的實際對映位於fixmap_remap_fdt中,在前面的過程中,已經對fixmap區域的pgd–>pud–>pmd–>pte有了初步的對映,並且dtb區域的虛擬位址是2m的對齊的,這也是為了以2m為單位進行section map的對映。dtb對映的過程如下圖
Linux 記憶體管理 高階記憶體的對映方式
cited from 解釋一 高階記憶體是指實體地址大於 896m 的記憶體。對於這樣的記憶體,無法在 核心直接對映空間 進行對映。為什麼?因為 核心直接對映空間 最多只能從 3g 到 4g,只能直接對映 1g 物理記憶體,對於大於 1g 的物理記憶體,無能為力。實際上,核心直接對映空間 也達不到 ...
Linux 記憶體管理 高階記憶體的對映方式
解釋一 核心在 fixaddr start 到 fixaddr top 之間保留了一些線性空間用於特殊需求。這個空間稱為 固定對映空間 在這個空間中,有一部分用於高階記憶體的臨時對映。這塊空間具有如下特點 1 每個 cpu 占用一塊空間 2 在每個 cpu 占用的那塊空間中,又分為多個小空間,每個小...
Linux 記憶體管理 高階記憶體的對映方式
分類 server開發2010 10 11 00 27 1146人閱讀 收藏舉報 linux struct linux核心 資料結構 table演算法 核心在 fixaddr start 到 fixaddr top 之間保留了一些線性空間用於特殊需求。這個空間稱為 固定對映空間 在這個空間中,有一部...