記憶體管理 四 DTB的對映

2021-10-05 18:47:45 字數 1829 閱讀 4537

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 之間保留了一些線性空間用於特殊需求。這個空間稱為 固定對映空間 在這個空間中,有一部...