日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/4/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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内存的作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。