Eboot.bib中0x30000000到0x300020000內存的作用

Src/Bootloader/Eboot/boot.bibmemeory部分如下:

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呢?PTSpage 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.

可以看出bootloaderstartup函數構造的頁表是存放在SDRAM0x30010000開始的地址處,接着我們看看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表,我們知道bootloaderstartup函數所構造的頁表首先需要覆蓋0x80000000~0x9FFFFFFF範圍的虛擬內存地址空間。這塊虛擬內存空間縱容量是512MB,則對應着512個一級頁表(對於WINCE操作系統而言,bootloader的虛擬內存設計並不是很複雜,它不涉及較爲複雜的二級頁表,只使用已1MB爲單位的一級頁表。),那麼所需物理存儲空間爲2KB(因爲需要4個字節來保存一個頁表項),在S3C2443中實際使用的SDRAM地址爲0x30012000~0x300127FF。此外startup函數還要爲0xA000000~0xBFFFFFFF範圍的虛擬內存地址構造一級頁表項,這塊虛擬內存地址空間在WINCE中被稱作uncachable靜態虛擬內存空間,這一部分的一級頁表項佔用SDRAM0x30012800~0x30012FFF

但關於頁表是如何構建的,我目前不是很理解,需要繼續學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章