Src/Bootloader/Eboot/boot.bib的memeory部分如下:
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
ARGS 80020800 00000800 RESERVED
RAM 80021000 0000B000 RAM
STACK 8002c000 0000A000 RESERVED
EBOOT 80038000 00040000 RAMIMAGE
BINFS 80080000 00021000 RESERVED
針對這個配置,我記得在CSDN上有一個帖子提過這樣一個問題(http://topic.csdn.net/u/20100729/17/273faa20-c905-435b-a7d4-102bbac4ff40.html):
0x3000_0000~0x3002_8000內存是用來做什麼的?
後來我在WINCE600/PLATFORM/DEVICEEMULATOR/SRC/BOOTLOADER/EBOOT/boot.bib看到的memory部分如下:
MEMORY
; Name Start Size Type
; ------- -------- -------- ----
PTS 80000000 00020000 RESERVED
ARGS 80020000 00000800 RESERVED
SLEEPSTATE 80020800 00000800 RESERVED
EBOOT 80021000 00040000 RAMIMAGE
STACK 80061000 00004000 RESERVED
RAM 80065000 00006000 RAM
可以看出0x3000_0000~0x3002_0000內存是用於PTS的,什麼是PTS呢?PTS是page table space的縮寫,也即這段內存空間是用於存放頁表的。
我們接下來看看S3C2443的/Src/Bootloader/Eboot/startup.s下面的代碼
; Define RAM space for the Page Tables:
;
PHYBASE EQU 0x30000000 ; physical start
PTs EQU 0x30010000 ; 1st level page table address (PHYBASE + 0x10000)
; save room for interrupt vectors.
可以看出bootloader的startup函數構造的頁表是存放在SDRAM的0x30010000開始的地址處,接着我們看看starup.s下面的代碼
; Compute physical address of the OEMAddressTable.
20 add r11, pc, #g_oalAddressTable - (. + 8)
ldr r10, =PTs ; (r10) = 1st level page table
; Setup 1st level page table (using section descriptor)
; Fill in first level page table entries to create "un-mapped" regions
; from the contents of the MemoryMap array.
;
; (r10) = 1st level page table
; (r11) = ptr to MemoryMap array
add r10, r10, #0x2000 ; (r10) = ptr to 1st PTE for "unmapped space"
mov r0, #0x0E ; (r0) = PTE for 0: 1MB cachable bufferable
orr r0, r0, #0x400 ; set kernel r/w permission
25 mov r1, r11 ; (r1) = ptr to MemoryMap array
30 ldr r2, [r1], #4 ; (r2) = virtual address to map Bank at
ldr r3, [r1], #4 ; (r3) = physical address to map from
ldr r4, [r1], #4 ; (r4) = num MB to map
cmp r4, #0 ; End of table?
beq %f40結合g_oalAddressTable表,我們知道bootloader的startup函數所構造的頁表首先需要覆蓋0x80000000~0x9FFFFFFF範圍的虛擬內存地址空間。這塊虛擬內存空間縱容量是512MB,則對應着512個一級頁表(對於WINCE操作系統而言,bootloader的虛擬內存設計並不是很複雜,它不涉及較爲複雜的二級頁表,只使用已1MB爲單位的一級頁表。),那麼所需物理存儲空間爲2KB(因爲需要4個字節來保存一個頁表項),在S3C2443中實際使用的SDRAM地址爲0x30012000~0x300127FF。此外startup函數還要爲0xA000000~0xBFFFFFFF範圍的虛擬內存地址構造一級頁表項,這塊虛擬內存地址空間在WINCE中被稱作uncachable靜態虛擬內存空間,這一部分的一級頁表項佔用SDRAM的0x30012800~0x30012FFF。
但關於頁表是如何構建的,我目前不是很理解,需要繼續學習。