青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

milkyway的窩

最初想法的誕生地

 

Understanding Memory Sections in config.bib, boot.bib, and OEMAddressTable in Windows CE 5.0 and 6.0

Understanding Memory Sections in config.bib, boot.bib, and OEMAddressTable in Windows CE 5.0 and 6.0

 

Introduction

Windows CE uses .bib (binary image builder) files to track, among other things, the memory layout of bootloaders as well as OS images. If you’re writing a new BSP, you’ll definitely need a config.bib file for your OS, and you’ll likely need a boot.bib file for your bootloader.

 

Let’s take a few minutes to understand how .bib files relate to memory usage. It’s going to be muddy at the beginning, but I promise if you stick with me through the end you’ll be glad that you did. Well, maybe you won’t be glad but you’ll know more about .bib files. Let’s get to it!

 

OEMAddressTable

Before we look at the .bib files themselves, it’s important to understand the OEMAddressTable. This table defines the mappings between physical and virtual addresses. For MIPS and SH processors, this table is hard coded into the processor. For x86 and ARM, the mapping is defined in a variable called OEMAddressTable. Since .bib files operate largely on virtual addresses, we need to remember to reference the OEMAddressTable to address any confusion about what is happening at a particular physical address.

 

The table’s layout is quite simple. Each line creates a mapping of virtual addresses to physical addresses. The syntax is: Base virtual address, base physical address, size. Let’s take an example from the Mainstone BSP:

 

DCD     0x80000000, 0xA0000000,  64     ; MAINSTONEII: SDRAM (64MB).

DCD     0x88000000, 0x5C000000,   1     ; BULVERDE: Internal SRAM (64KB bank 0).

DCD     0x88100000, 0x58000000,   1     ; BULVERDE: Internal memory PM registers.

DCD     0x88200000, 0x4C000000,   1     ; BULVERDE: USB host controller.

 

So in the first line, we are mapping the 64MB of RAM at physical address 0xA0000000 to the virtual address 0x80000000. Since 64MB = 0x04000000 this means that the physical addresses 0xA000000-0xA4000000 are now mapped to virtual addresses 0x80000000-0x84000000. Likewise, we’ve mapped the USB host controller which resides at physical addresses 0x4C000000-0x4C100000 to virtual addresses 0x88200000-0x8300000.

 

Inside Windows CE, memory access is virtual by default. So when we access memory at 0x81005000, we’ll be accessing some physical memory in the Mainstone’s 64MB SDRAM bank. If we access memory at 0x88201000, we’ll be accessing the USB host controller, physically. If we access memory at 0x86001000, we’ll get a page fault because this virtual address has no corresponding physical address.

 

Now that we understand the OEMAddressTable, let’s talk about the .bib files.

 

Config.bib – this contains a lot of configuration info for a CE OS image. The MEMORY section is what we’ll focus on – it defines the memory blueprint for the CE image. Here are the important terms:

 

RAMIMAGE – This is the virtual address region that the kernel and any other components you select for your image will be placed in. This can be RAM or linearly addressable flash. Your config.bib file should have exactly one RAMIMAGE section. It needs to be virtually contiguous, and it needs to be large enough to hold whatever components you’ve selected.

 

RAM – This is the virtual address region of RAM that the kernel can allocate to applications and RAM-based file systems. It needs to be virtually contiguous. (If you need a non-contiguous section, you can allocate another, non-virtually-contiguous section at run-time by implementing the OEMGetExtensionDRAM function, but that’s outside our scope)

 

RESERVED – These are virtual address regions that are set aside – the kernel won’t allocate memory in these addresses and components won’t be placed in these addresses.

 

AUTOSIZE - In the CONFIG section, we have the AUTOSIZE=ON (or OFF) variable. If this variable is on, it will treat the RAMIMAGE and RAM regions as a single region, allocating just enough space to hold all of the components to the RAMIMAGE section and making the rest of the space available as RAM. This is a pretty convenient and easy way to make sure you’re getting maximal use out of your RAM. One thing autosize won’t do is interfere with reserved or unallocated regions.

 

Eboot.bib (sometimes known as boot.bib) – this works identically to config.bib, except we’re building a bootloader image as opposed to one with a full kernel. All of the terminology is exactly the same. The only difference is, in the case where we’re not using an MMU in the bootloader (CEPC is an example of these), the addresses will be physical as opposed to virtual. Otherwise, the layout is identical.

 

Bringing it together

In almost all cases, the bootloader and OS use the same OEMAddressTable. Thus, they have the same virtual address space.

 

This is especially useful when it comes to RESERVED regions. Since nothing will be allocated or placed in these addresses, only components that refer directly to the address will have access. That means we can use these regions for special buffers (say, DMA) or passing arguments passed in from the bootloader to the OS. It also means that, if you want, you can leave the bootloader in RAM.

 

Keep in mind that while RESERVED means that we won’t allocate/place components in those virtual addresses, by default if an area isn’t specified in a .bib file then we won’t allocate/place in it. This means RESERVED is really more of a comment then anything. However, it is useful in our .bib files because it helps us identify the location of special buffers and arguments so that we know not to overwrite them in other modules.

 

An Example

Let’s take a look at a simplified example in the CEPC BSP:

Here’s our OEMAddressTable (platform\common\src\x86\common\startup\startup.asm):

_OEMAddressTable:

        dd 80000000h,     0,      04000000h

This means that we’re mapping physical addresses 0x00000000-0x04000000 to virtual addresses 0x80000000-0x84000000. That’s 64MB of RAM.

 

Here’s our boot.bib (platform\CEPC\src\bootloader\eboot\boot.bib):

MEMORY

;   Name     Start     Size      Type

;   ------- -------- -------- ----

    EBOOT    00130000 00020000 RAMIMAGE

    RAM      00150000 00070000 RAM

    ETHDMA   00200000 00020000 RESERVED

 

Remember the CEPC bootloader uses physical addresses. So in virtual address terms, our bootloader code is living at 0x80130000-0x80150000, with RAM available from 0x80150000-0x801C0000. We’re reserving a buffer for our Ethernet card from 0x80200000-0x80220000.

 

And a condensed version of config.bib (platform\CEPC\files\config.bib):

 

MEMORY

;   Name     Start     Size      Type

;   ------- -------- -------- ----

; 64 MB of RAM (note: AUTOSIZE will adjust boundary)

    NK       80220000 009E0000 RAMIMAGE

    RAM      80C00000 03400000 RAM

    DMA      80100000 00030000 RESERVED   ; Native DMA reserved.

    BOOTARGS 801FFF00 00000100 RESERVED   ; Boot arguments

    EDBG_DMA 80200000 00020000 RESERVED   ; EDBG DMA buffer

 

 

There are several interesting things going on here:

 

First, our OS image (NK) starts at 0x80220000, and RAM resides directly above it. That means we’re not allowing any components or allocation to write below 0x80220000, and thus our bootloader code is protected.

 

Second, note that we have also reserved some regions. The EDBG_DMA corresponds to the same addresses that the bootloader reserved. This way we can make a smooth transition from bootloader to kernel without worrying about the contents of this memory being tampered with. 

 

Another region has been reserved from 0x80100000-0x80130000. This is very close to the start of our bootloader. If we reserved even a byte more, we would not expect our bootloader to continue to be executable after we boot the OS. However, since the bootloader’s address space isn’t referenced by any region in config.bib, we know that it will remain untouched by the OS. This way we can jump back to the bootloader code during a warm reset, if desired.

 

We’re not required to keep our bootloader in memory, though. We could easily place the bootloader (in boot.bib) at the end of the RAM space (in config.bib). This way after the image was successfully downloaded we could allocate memory over the top of the bootloader and make full use of all of our system RAM. What you don’t want to do is intersect the bootloader with the RAMIMAGE part of config.bib – this means you’ll overwrite the code you’re running to download, during download!

 

Finally, notice we have a special reserved region called “boot arguments”.  If we at the CEPC’s bootloader we will see that it writes explicitly to the (physical) 0x001FFF00-0x002000000. You’ll also notice this isn’t used anywhere in the boot.bib layout. That means we can be assured it will be untouched (unless, of course, something else in the bootloader writes explicitly to that address range).

 

This is how we pass arguments from the bootloader to the OS – the OS can read directly from 0x801FFF00 and be assured that the kernel won’t tamper with it because it is RESERVED. Technically, we could have indicated that area as RESERVED in the bootloader as well.

 

Hopefully this has given you some insight into .bib memory layouts.

posted on 2007-04-19 11:03 milkyway 閱讀(1494) 評論(1)  編輯 收藏 引用

評論

# re: Understanding Memory Sections in config.bib, boot.bib, and OEMAddressTable in Windows CE 5.0 and 6.0 2007-04-19 11:04 相思酸中有甜

注意
1。以太網卡DMA在eboot.bib和config.bib的復用;
2。不要在config.bib中覆蓋eboot的IMAGE  回復  更多評論   


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


導航

統計

公告

隨筆皆原創,文章乃轉載. 歡迎留言!

常用鏈接

留言簿(37)

隨筆分類(104)

隨筆檔案(101)

文章分類(51)

文章檔案(53)

wince牛人

搜索

積分與排名

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99视频精品在线| 夜色激情一区二区| 欧美一区永久视频免费观看| 一区二区三区视频在线看| 国产精品大片| 欧美一区二区啪啪| 欧美一区二区播放| 在线精品国产欧美| 亚洲国产精品第一区二区| 欧美裸体一区二区三区| 亚洲一区二区黄色| 性亚洲最疯狂xxxx高清| 在线观看国产精品淫| 亚洲国产另类久久精品| 欧美午夜免费电影| 久久久国产一区二区三区| 麻豆国产精品一区二区三区| 亚洲深夜激情| 欧美专区第一页| 亚洲精品久久久久久久久久久久久| 亚洲乱码精品一二三四区日韩在线 | 国语精品中文字幕| 欧美韩日亚洲| 国产精品久久一区二区三区| 老司机午夜精品| 欧美日韩国产色综合一二三四| 欧美在线播放一区二区| 狼人社综合社区| 亚洲欧美日韩视频二区| 免费成人性网站| 亚洲欧美日韩另类| 欧美凹凸一区二区三区视频| 亚洲欧美日韩精品久久奇米色影视 | 久久精品国产一区二区三| 欧美99在线视频观看| 亚洲女ⅴideoshd黑人| 麻豆精品在线播放| 久久不射2019中文字幕| 欧美国产三级| 久久久久久久久岛国免费| 欧美日韩麻豆| 亚洲电影天堂av| 国产一区二区三区四区hd| 亚洲毛片在线观看| 亚洲第一二三四五区| 亚洲欧美在线免费| 亚洲一区二区在线视频| 欧美成人精品影院| 免费国产一区二区| 国产一区二区三区四区hd| 一区二区三区回区在观看免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 性欧美8khd高清极品| 亚洲一区免费观看| 欧美日韩国产三级| 亚洲人www| 亚洲精品日本| 免费高清在线一区| 欧美成人综合网站| 激情小说另类小说亚洲欧美| 亚洲欧美国产高清va在线播| 亚洲一级黄色| 欧美午夜理伦三级在线观看| 亚洲乱码国产乱码精品精可以看| 亚洲国产精品小视频| 看片网站欧美日韩| 嫩草国产精品入口| 亚洲精华国产欧美| 欧美成人小视频| 欧美国产视频一区二区| 亚洲黄色免费电影| 欧美激情第三页| 亚洲精品日韩久久| 亚洲自拍偷拍色片视频| 国产精品美腿一区在线看 | 亚洲视频综合在线| 亚洲性夜色噜噜噜7777| 国产精品九色蝌蚪自拍| 亚洲一区二区三区在线播放| 香蕉久久国产| 韩国av一区二区三区| 久久久亚洲精品一区二区三区| 蜜桃精品久久久久久久免费影院| 亚洲高清电影| 欧美婷婷六月丁香综合色| 中文在线资源观看网站视频免费不卡| 午夜精品福利电影| 韩国亚洲精品| 欧美大片在线观看一区| 亚洲视频自拍偷拍| 久久婷婷亚洲| 日韩视频一区二区在线观看 | 久久久久久久一区二区| 亚洲高清免费视频| 亚洲婷婷综合色高清在线| 国产亚洲欧洲997久久综合| 榴莲视频成人在线观看| 亚洲美女在线看| 久久丁香综合五月国产三级网站| 尹人成人综合网| 国产精品第十页| 久久综合久久综合这里只有精品| 亚洲激情影视| 久久精品国产精品亚洲精品| 最新亚洲激情| 国产日韩在线一区二区三区| 美女精品自拍一二三四| 亚洲欧美国产毛片在线| 亚洲欧洲视频在线| 久久久久久色| 亚洲午夜精品久久| 在线观看中文字幕亚洲| 欧美性大战久久久久久久蜜臀| 久久精品日韩一区二区三区| 亚洲精品你懂的| 欧美中文字幕精品| 亚洲视频在线观看免费| 亚洲国产精品久久| 国产精品一区二区三区乱码| 欧美激情在线狂野欧美精品| 久久经典综合| 亚洲免费在线观看| 亚洲免费av观看| 亚洲第一区中文99精品| 久久久久久久一区二区三区| 亚洲一区区二区| 99国产麻豆精品| 18成人免费观看视频| 国产欧美日韩精品专区| 欧美日韩在线一区二区| 欧美激情精品久久久| 麻豆精品一区二区综合av| 欧美自拍丝袜亚洲| 亚洲免费一级电影| 999亚洲国产精| 亚洲精品久久7777| 91久久国产自产拍夜夜嗨| 欧美aa国产视频| 免费亚洲电影在线| 免费久久99精品国产自| 美女精品网站| 麻豆精品精品国产自在97香蕉| 久久人人超碰| 久久天天躁夜夜躁狠狠躁2022| 久久爱另类一区二区小说| 欧美在线免费| 久久精品一区二区三区不卡| 久久久精品午夜少妇| 久久久久久久久久码影片| 久久九九久久九九| 美女在线一区二区| 女人色偷偷aa久久天堂| 亚洲国产成人精品久久久国产成人一区 | 男女精品视频| 欧美激情亚洲综合一区| 亚洲国产美女精品久久久久∴| 亚洲国产欧美在线 | 亚洲欧美99| 久久国产婷婷国产香蕉| 久久精品视频亚洲| 久久一区二区视频| 欧美大片在线观看| 亚洲精品一二区| 亚洲综合色视频| 欧美在线视频免费播放| 欧美mv日韩mv国产网站app| 欧美激情一区二区| 国产精一区二区三区| 黄色成人在线网址| 亚洲精品一区二区三区四区高清| 洋洋av久久久久久久一区| 午夜影院日韩| 美日韩丰满少妇在线观看| 91久久视频| 香蕉久久夜色精品国产使用方法| 久久久国产视频91| 欧美日本二区| 国产丝袜一区二区| 亚洲精品一区二区在线观看| 亚洲午夜国产成人av电影男同| 久久国产福利| 亚洲国产一区二区a毛片| 亚洲午夜久久久久久久久电影网| 欧美在线网站| 欧美日韩另类综合| 一区二区在线视频播放| 亚洲一级黄色av| 免费h精品视频在线播放| 在线中文字幕一区| 老司机精品视频网站| 国产精品一区一区| 亚洲精品社区| 久久伊人精品天天| 艳女tv在线观看国产一区| 老巨人导航500精品| 国产欧美日韩一区二区三区在线观看| 91久久综合亚洲鲁鲁五月天| 欧美在线三区| 一区二区高清在线观看| 美女在线一区二区|