ARM Linux 上的核心記憶體佈局¶
Russell King <rmk@arm.linux.org.uk>
2005 年 11 月 17 日 (2.6.15)
本文件描述了 Linux 核心用於 ARM 處理器的虛擬記憶體佈局。 它指出了哪些區域可供平臺使用,以及哪些區域由通用程式碼使用。
ARM CPU 能夠定址最大 4GB 的虛擬記憶體空間,這必須在使用者空間程序、核心和硬體裝置之間共享。
隨著 ARM 架構的成熟,有必要保留某些 VM 空間區域以用於新設施; 因此,本文件可能會隨著時間的推移保留更多的 VM 空間。
開始 |
結束 |
用途 |
|---|---|---|
ffff8000 |
ffffffff |
copy_user_page / clear_user_page 使用。 對於 SA11xx 和 Xscale,這用於設定微型快取對映。 |
ffff4000 |
ffffffff |
ARMv6 及更高版本 CPU 上的快取別名。 |
ffff1000 |
ffff7fff |
已保留。 平臺不得使用此地址範圍。 |
ffff0000 |
ffff0fff |
CPU 向量頁。 如果 CPU 支援向量重定位(控制暫存器 V 位),則 CPU 向量將對映到此處。 |
fffe0000 |
fffeffff |
XScale 快取重新整理區域。 這在 proc-xscale.S 中用於重新整理整個資料快取。 (XScale 沒有 TCM。) |
fffe8000 |
fffeffff |
用於在 CPU 內部安裝了 DTCM 的平臺的 DTCM 對映區域。 |
fffe0000 |
fffe7fff |
用於在 CPU 內部安裝了 ITCM 的平臺的 ITCM 對映區域。 |
ffc80000 |
ffefffff |
Fixmap 對映區域。 由 fix_to_virt() 提供的地址將位於此處。 |
ffc00000 |
ffc7ffff |
保護區域 |
ff800000 |
ffbfffff |
韌體提供的 DT blob 的永久、固定的只讀對映 |
fee00000 |
feffffff |
PCI I/O 空間的對映。 這是 vmalloc 空間中的靜態對映。 |
VMALLOC_START |
VMALLOC_END-1 |
vmalloc() / |
PAGE_OFFSET |
high_memory-1 |
核心直接對映的 RAM 區域。 這映射了平臺的 RAM,通常以 1:1 的關係對映所有平臺 RAM。 |
PKMAP_BASE |
PAGE_OFFSET-1 |
永久核心對映。 將 HIGHMEM 頁面對映到核心空間的一種方法。 |
MODULES_VADDR |
MODULES_END-1 |
核心模組空間。 透過 insmod 插入的核心模組使用動態對映放置在此處。 |
TASK_SIZE |
MODULES_VADDR-1 |
使用 KASan 時的 KASAn 影子記憶體。 從 MODULES_VADDR 到記憶體頂部的範圍在此處被陰影化,每位元組記憶體 1 位。 |
00001000 |
TASK_SIZE-1 |
使用者空間對映。 每個執行緒的對映透過 mmap() 系統呼叫放置在此處。 |
00000000 |
00000fff |
CPU 向量頁/空指標陷阱。 不支援向量重對映的 CPU 將其向量頁放置在此處。 核心和使用者空間的 NULL 指標取消引用也透過此對映捕獲。 |
請注意,與上述區域衝突的對映可能會導致核心無法啟動,或者可能導致核心在執行時(最終)崩潰。
由於未來的 CPU 可能會影響核心對映佈局,因此使用者程式不得訪問未對映在其 0x0001000 到 TASK_SIZE 地址範圍內的任何記憶體。 如果他們希望訪問這些區域,他們必須使用 open() 和 mmap() 設定自己的對映。