From d811827586614d884a3aaeb6fae12958f825ca2b Mon Sep 17 00:00:00 2001 From: Z Date: Wed, 18 Nov 2020 19:52:25 +0800 Subject: [PATCH] Update linux-initialization-2.md --- Initialization/linux-initialization-2.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Initialization/linux-initialization-2.md b/Initialization/linux-initialization-2.md index 34fd00b..d7cdd47 100644 --- a/Initialization/linux-initialization-2.md +++ b/Initialization/linux-initialization-2.md @@ -444,6 +444,18 @@ And the `_AC` macro is defined in the [include/uapi/linux/const.h](https://elixi ``` So, where `__PAGE_OFFSET` expands to `0xffff880000000000`. +Then, let's dive a little deeper. From Documentation/x86/x86_64/mm.txt: +``` + + +Virtual memory map with 4 level page tables: +... +ffff880000000000 - ffffc7ffffffffff (=64 TB) direct mapping of all phys. memory +... +``` + +As you may see, the virtual address space `ffff880000000000-ffffc7ffffffffff` is direct mapping of all physical memory. When the kernel wants to access all physical memory, it uses direct mapping. + We initialize `pmd` and pass it to the `__early_make_pgtable` function along with `address`. The `__early_make_pgtable` function is defined in the same file as the `early_make_pgtable` function as the following: ```C