The memeory section of SRC/bootloader/eboot/boot. bib is as follows:
Memory
; Name start Size Type
;---------------------------
ARGs 80020800 00000800 Reserved
Ram 80021000 ipvb000 Ram
Stack 8002c000 2017a000 Reserved
Eboot 80038000 00040000 ramimage
Binfs 80080000 00021000 Reserved
For this configuration, I remember a post on csdn mentioned this problem (Http://topic.csdn.net/u/20100729/17/273faa20-c905-435b-a7d4-102bbac4ff40.html):
0x3000_0000 ~ What is 0x3002_8000 memory used?
Later, I saw the following memory section in wince600/platform/deviceemulator/src/bootloader/eboot/boot. bib:
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
We can see that 0x3000_0000 ~ 0x3002_0000 memory is used for pts. What is PTS? PTS is the abbreviation of page table space, that is, this memory space is used to store page tables.
Next let's take a look atCode
; 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.
We can see that the page table constructed by the startup function of the bootloader is stored at the address starting from 0x30010000 of the sdram. Then let's look at the code below 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: 1 MB 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
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 is combined with the g_oaladdresstable table. We know that the page table constructed by the startup function of bootloader must first overwrite 0x80000000 ~ Virtual Memory Address Space in the range of 0x9fffffff. The vertical capacity of this virtual memory space is 512 MB, which corresponds to 512 level-1 page tables (for the wince operating system, the Virtual Memory Design of bootloader is not very complex, it does not involve complex level-2 page tables. It only uses level-1 page tables in the unit of 1 MB .), Therefore, the required physical storage space is 2 kb (because it requires 4 bytes to store a page table item). The actual SDRAM address used in s3c2443 is 0x30012000 ~ 0x3000000ff. In addition, the startup function must be 0xa000000 ~ The virtual memory address in the range of 0xbfffffff constructs a level-1 page table item. This virtual memory address space is called the uncachable static virtual memory space in wince. This part of level-1 page table item occupies the amount of 0x30012800 ~ 0x30012fff.
However, I do not understand how to build a page table, so I need to continue learning.
this article from the csdn blog, reprinted please indicate the source: http://blog.csdn.net/chinesedragon2010/archive/2010/08/08/5796534.aspx