Eboot.bib中0x30000000到0x300020000内存的作用
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。
但關于頁表是如何構建的,我目前不是很理解,需要繼續學習。
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/chinesedragon2010/archive/2010/08/08/5796534.aspx
總結
以上是生活随笔為你收集整理的Eboot.bib中0x30000000到0x300020000内存的作用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nboot中nand flash控制器参
- 下一篇: WINCE6.0+S3C2443自动重启