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

但关于页表是如何构建的,我目前不是很理解,需要继续学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值