• <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>

            milkyway的窩

            最初想法的誕生地

             

            OEMAddressTable,config.bib詳解

            OEMAddressTable只存在于X86和ARM架構(gòu)的平臺(tái)下,用來(lái)定義從4GB的虛擬地址到物理512MB存儲(chǔ)空間的靜態(tài)映射關(guān)系,它實(shí)質(zhì)是一個(gè)結(jié)構(gòu)變量。
            typedef struct
            {
            ULONG ulVirtualAddress;
            ULONG ulPhysicalAddress;
            ULONG ulSizeInMegs;
            } AddressTableStruct;

            #define MEG(A) (((A - 1)>>20) + 1)

            const AddressTableStruct OEMAddressTable[] =
            {
            { SDRAM_VIRTUAL_MEMORY, //虛擬地址
            PHYSICAL_ADDR_SDRAM_MAIN, //物理地址
            MEG(SDRAM_MAIN_BLOCK_SIZE) //這段空間的大小,以M計(jì)
            },
            ………………………
            {
            0,
            0,
            0
            }
            };
            如例子所示,OEMAddressTable為一個(gè)結(jié)構(gòu)數(shù)組,每項(xiàng)的第一個(gè)成員為虛擬地址,第二個(gè)成員為對(duì)應(yīng)的物理地址,最后一個(gè)成員為該段空間的大小。這個(gè)數(shù)組的最后一項(xiàng)必須全部為0,以示整個(gè)數(shù)組的結(jié)束。內(nèi)核啟動(dòng)時(shí)會(huì)讀取這個(gè)數(shù)組的內(nèi)容以初始化MMU頁(yè)表。啟用MMU以后OS內(nèi)核段程序(如ISR)可以用這里的虛擬地址來(lái)訪問(wèn)設(shè)備。當(dāng)然,OEMAddressTable中所用到的每個(gè)物理地址及虛擬地址都需要在頭文件中定義。
                 

            比如X86的OEMAddressTable (platform\common\src\x86\common\startup\startup.asm):

            _OEMAddressTable:

                    dd  80000000h,     0,      04000000h  //格式為:虛擬地址,物理地址,大小

            注意(1)這里的大小,X86下為4MB的倍數(shù),ARM下為1MB的倍數(shù)。
                     (2)這里的映射是靜態(tài)的cached,虛擬地址范圍是0x8000000-0x9FFFFFFF,系統(tǒng)會(huì)自動(dòng)添加uncached段的映射,從0xA000000-0xBFFFFFFF.

                   CONFIG.BIB文件分兩個(gè)部分,我們且稱之為段,MEMORY段和CONFIG段。MEMORY段定義虛擬內(nèi)存的分片方法,CONFIG段定義它的一些屬性。以下是一個(gè)CONFIG.BIB文件MEMORY段的例子:
                 來(lái)自platform\CEPC\files\config.bib:

             

            MEMORY

            ;   Name     Start     Size      Type

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

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

                NK       80220000  009E0000  RAMIMAGE     //系統(tǒng)鏡像

                RAM      80C00000  03400000  RAM                // 應(yīng)用程序與文件系統(tǒng)區(qū)域

                DMA      80100000  00030000  RESERVED   ; Native DMA reserved.

                BOOTARGS 801FFF00  00000100  RESERVED   ; Boot arguments

                EDBG_DMA 80200000  00020000  RESERVED   ; EDBG DMA buffer





            posted on 2007-04-19 11:24 milkyway 閱讀(3998) 評(píng)論(4)  編輯 收藏 引用 所屬分類: Wince學(xué)習(xí)小結(jié)

            評(píng)論

            # re: OEMAddressTable,config.bib詳解 2007-05-12 15:04 楊銳

            請(qǐng)問(wèn)一下樓主:
            Wince中的中斷向量表保存在什么位置呢?由于使能了MMU,這個(gè)位置是物理地址,還是虛擬地址呢?
            我有個(gè)過(guò)程沒(méi)有搞清楚,但外部中斷發(fā)生時(shí),ARM的PC指針應(yīng)該自動(dòng)跳轉(zhuǎn)到0x0,或者0xffff0000這個(gè)地址,但當(dāng)使能了MMU以后,PC會(huì)跳轉(zhuǎn)到物理地址的0x0呢?還是虛擬地址0x0?
            本來(lái)我認(rèn)為是要跳轉(zhuǎn)到虛擬地址的0x0,通過(guò)MMU映射以后,可以把它映射到物理地址的SDRAM空間,這樣訪問(wèn)速度就會(huì)快很多,但是在OEMAddressTable中,看不到把虛擬地址0x0映射的物理地址。
            通過(guò)看config.bib,發(fā)現(xiàn)內(nèi)核是從80001000這個(gè)虛擬地址開始,在OEMAddressTable將他映射到了SDRAM的物理地址空間。
            我上述的理解肯定有問(wèn)題,請(qǐng)您給我解釋一下,好嗎?謝謝!!  回復(fù)  更多評(píng)論   

            # re: OEMAddressTable,config.bib詳解 2007-05-13 18:23 milkyway

            在wince啟動(dòng)后,MMU就被使能了,所以這時(shí)你訪問(wèn)的只能是虛擬地址,不是物理地址。
            中斷向量表的位置和處理器有關(guān),ARM要求中斷向量表放置從0地址開始。你說(shuō)的中斷跳轉(zhuǎn)地址實(shí)際是物理地址的0x,但是由于啟用了MMU,所以CPU只能認(rèn)虛擬地址。至于這個(gè)虛實(shí)映射的對(duì)應(yīng)關(guān)系就在OEMAddressTable中。你看對(duì)應(yīng)物理地址是0x的虛擬地址是多少。
            你說(shuō)的內(nèi)核從80001000這個(gè)虛擬地址開始,這個(gè)是可以在config.bib中設(shè)置的。實(shí)際的物理地址參考OEMAddressTable。
            希望對(duì)你有點(diǎn)作用。
              回復(fù)  更多評(píng)論   

            # re: OEMAddressTable,config.bib詳解 2007-05-18 20:15 楊銳

            謝謝你啊!!  回復(fù)  更多評(píng)論   

            # re: OEMAddressTable,config.bib詳解 2008-01-15 09:59 abby

            請(qǐng)教一下?lián)е鳎?
            在使用XIPKERNEL時(shí),之前我定義CONFIG。BIB為
            XIPKERNEL 80040000 001C0000 RAMIMAGE
            NK 80200000 01C00000 RAMIMAGE
            CHAIN $(CHAIN_ADDRESS) 00004000 RESERVED

            RESERVE 8df00000 00080000
            RAM 8c200000 03C00000 RAM
            現(xiàn)在我想改變一下RAM的起始地址,在各個(gè)相關(guān)的文件中都把RAM的起始地址改為了94200000,映射表也為94000000 300000000 64

            但我發(fā)現(xiàn)一個(gè)問(wèn)題就是,從各種實(shí)驗(yàn)結(jié)果看好像是系統(tǒng)找不到94000000這個(gè)虛擬地址對(duì)30000000的映射,系統(tǒng)起不來(lái)。我想問(wèn)一下,在使用XIP功能時(shí)對(duì)于RAM 的起始位置有什么規(guī)定嗎?還是有其他一些說(shuō)法。我用的是三星的2443,ARM核。
            對(duì)這個(gè)的理解我還有些不是特別透徹,請(qǐng)您給我講解一下,好嗎? 謝謝!  回復(fù)  更多評(píng)論   

            導(dǎo)航

            統(tǒng)計(jì)

            公告

            隨筆皆原創(chuàng),文章乃轉(zhuǎn)載. 歡迎留言!

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久香蕉国产线看观看99| 久久成人国产精品免费软件| 国内精品伊人久久久久av一坑 | 久久久亚洲AV波多野结衣| 久久人人爽人人爽人人片AV高清| 伊人久久大香线蕉亚洲| 亚洲精品成人久久久| 一本大道加勒比久久综合| 人妻少妇久久中文字幕 | 久久99国产精品久久99果冻传媒| 亚洲欧美一区二区三区久久| 成人精品一区二区久久久| 久久精品草草草| 久久笫一福利免费导航| 久久精品国产亚洲麻豆| 亚洲精品高清一二区久久| 2022年国产精品久久久久| 久久久精品国产sm调教网站| 久久夜色精品国产欧美乱| 久久精品成人欧美大片| 久久久久久国产精品美女| 久久AV高清无码| 久久亚洲AV成人无码| 一本色道久久88精品综合 | 婷婷国产天堂久久综合五月| 欧美亚洲另类久久综合| 九九久久自然熟的香蕉图片| 久久天天躁夜夜躁狠狠| 亚洲国产成人乱码精品女人久久久不卡| 久久99精品国产麻豆| 欧美丰满熟妇BBB久久久| 麻豆精品久久久久久久99蜜桃| 久久国产精品一区| 国产精品99久久久久久猫咪| 国产精品久久国产精品99盘| 国内精品久久久久久99蜜桃| 欧洲精品久久久av无码电影| 久久久久人妻一区精品色| 国产V综合V亚洲欧美久久| 97久久香蕉国产线看观看| 日日噜噜夜夜狠狠久久丁香五月|