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内存的作用相关推荐

  1. CE5.0 - romimage.exe如何填充eboot.bin中的pTOC特殊指针生成.nb0

    eboot.bin和eboot.nb0的差别就是 eboot.bin中没有填充pTOC结构体,必须使用parser解释器[类似于romimage.exe luther.gliethttp]将全局变量数 ...

  2. 5 个 Android 开发中比较常见的内存泄漏问题及解决办法

    Android开发中,内存泄漏是比较常见的问题,有过一些Android编程经历的童鞋应该都遇到过,但为什么会出现内存泄漏呢?内存泄漏又有什么影响呢? 在Android程序开发中,当一个对象已经不需要再 ...

  3. 【Linux 内核 内存管理】内存管理架构 ⑤ ( sbrk 内存分配系统调用代码示例 | 在 /proc/pid/maps 中查看进程堆内存详情 )

    文章目录 一.sbrk 内存分配系统调用代码示例 二.在 /proc/pid/maps 中查看进程堆内存详情 本篇博客调用 sbrk 系统调用函数 , 申请并修改 堆内存 , 并在 /proc/pid ...

  4. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  5. VS中查看子类对象内存分布的方法

    文章目录 1 VS中查看子类对象内存分布的方法 1 VS中查看子类对象内存分布的方法 设置vs编译器: 在命令行中添加选项(打印指定类的内存分布):/d1 reportSingleClassLayou ...

  6. java 方法执行结束局部变量释放_JAVA-方法在执行过程中,JVM的内存分配和变化情况,栈(stack)的情况浅析...

    方法在执行过程中,在JVM中的内存是如何分配的?内存是如何变化的? 一.方法只定义不调用,是不会被执行的,并且在JVM中也不会给该方法分配"运行所属"的内存空间.只有在调用这个方法 ...

  7. c++中堆、栈内存分配

    转自:https://blog.csdn.net/qingtingchen1987/article/details/7698415 一个由C/C++编译程序占用内存分为以下几个部分 1.栈区(stac ...

  8. Windows 任务管理器中的几个内存概念

    我们使用的大部分 PC 是基于 Intel 微处理器的 x86 和 x64 架构计算机. 因此, 我们面对的 windows 避免不了和 Intel 架构有些设计上的契合. 比如接下来要说到的内存管理 ...

  9. 操作系统核心原理-5.内存管理(中):分页内存管理

    在上一篇介绍的几种多道编程的内存管理模式中,以交换内存管理最为灵活和先进.但是这种策略也存在很多重大问题,而其中最重要的两个问题就是空间浪费和程序大小受限.那么有什么办法可以解决交换内存存在的这些问题 ...

最新文章

  1. SpringBoot+Docker+Git+Jenkins实现简易的持续集成和持续部署
  2. Xilinx FFT IP core V9.0的介绍和使用
  3. SpringBoot中请求映射的原理(源码)
  4. 680. Valid Palindrome II
  5. html5做的太阳系
  6. Air Data System
  7. 1+X web中级 Laravel学习笔记——路由和控制器的简单使用
  8. 会玩!拼多多联手非诚勿扰“拼对象”:为2亿单身狗操碎了心
  9. 计算机中那些事儿(二):如何神操作你的电脑
  10. 在fedora linux中,wine 成功安装手记
  11. Impala中行转列在合并列
  12. C#串口编程测试收发
  13. NSString中如何正确判断包含一个变量字串NSString
  14. gfsk调制频谱_gfsk调制方式
  15. 小心!使用网页版的WhatsApp时,请选择隐私模式
  16. PMP知识点总结—质量功能展开(QFD)
  17. 几步操作即可实现WhatsApp群发
  18. android 高德静态地图api,静态地图-API文档-开发指南-Web服务 API | 高德地图API
  19. win10浏览器闪退_win10 ie浏览器闪退
  20. c++ lamber表达式

热门文章

  1. 动圈耳机振膜_耳机中的动圈、动铁、圈铁都是什么意思 买哪种最好?
  2. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
  3. windoes硬盘备份(数据迁移)的方法
  4. oralce 数据库监听日志状态及目录:查看监听(使用grid用户登陆):
  5. 服务器堡垒机登录方式
  6. namespace命名空间的理解C++
  7. python中怎么做分组问题_详解Python中的分组函数groupby和itertools)
  8. php 上个月天数,php日期所在月的天数_PHP教程
  9. Docker容器网络管理
  10. c语言i o编程,C 语言输入输出 (I/O)