• <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)的平臺下,用來定義從4GB的虛擬地址到物理512MB存儲空間的靜態(tài)映射關(guān)系,它實(shí)質(zhì)是一個結(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為一個結(jié)構(gòu)數(shù)組,每項(xiàng)的第一個成員為虛擬地址,第二個成員為對應(yīng)的物理地址,最后一個成員為該段空間的大小。這個數(shù)組的最后一項(xiàng)必須全部為0,以示整個數(shù)組的結(jié)束。內(nèi)核啟動時會讀取這個數(shù)組的內(nèi)容以初始化MMU頁表。啟用MMU以后OS內(nèi)核段程序(如ISR)可以用這里的虛擬地址來訪問設(shè)備。當(dāng)然,OEMAddressTable中所用到的每個物理地址及虛擬地址都需要在頭文件中定義。
                 

            比如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)會自動添加uncached段的映射,從0xA000000-0xBFFFFFFF.

                   CONFIG.BIB文件分兩個部分,我們且稱之為段,MEMORY段和CONFIG段。MEMORY段定義虛擬內(nèi)存的分片方法,CONFIG段定義它的一些屬性。以下是一個CONFIG.BIB文件MEMORY段的例子:
                 來自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 閱讀(3990) 評論(4)  編輯 收藏 引用 所屬分類: Wince學(xué)習(xí)小結(jié)

            評論

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

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

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

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

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

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

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

            請教一下?lián)е鳎?
            在使用XIPKERNEL時,之前我定義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的起始地址,在各個相關(guān)的文件中都把RAM的起始地址改為了94200000,映射表也為94000000 300000000 64

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

            導(dǎo)航

            統(tǒng)計(jì)

            公告

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

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久亚洲国产午夜精品理论片| 久久久久99这里有精品10| 粉嫩小泬无遮挡久久久久久| 久久久亚洲欧洲日产国码二区 | 男女久久久国产一区二区三区| 久久国产精品一国产精品金尊 | 婷婷综合久久狠狠色99h| 欧美亚洲国产精品久久久久| 精品九九久久国内精品| 亚洲精品乱码久久久久久蜜桃 | 777久久精品一区二区三区无码| 亚洲乱码日产精品a级毛片久久 | 久久精品无码专区免费 | 国产91久久精品一区二区| 久久综合久久综合亚洲| 国产成人久久777777| 久久婷婷国产综合精品| 国产精品一区二区久久精品涩爱| 久久伊人精品青青草原高清| 精品久久久久久久无码| 18岁日韩内射颜射午夜久久成人 | 久久亚洲国产成人精品无码区| 久久免费的精品国产V∧| 中文字幕久久精品无码| 久久这里的只有是精品23| 久久久久九国产精品| 国产精品久久久久一区二区三区| 91精品国产综合久久婷婷| 久久久久亚洲AV无码永不| 亚洲欧美成人综合久久久| 国产精品久久久久久久久软件| 色欲综合久久躁天天躁| 久久久亚洲精品蜜桃臀 | 国内精品伊人久久久久av一坑 | 久久国产视频网| 免费一级欧美大片久久网| 久久综合久久综合亚洲| 久久精品久久久久观看99水蜜桃| 亚洲va国产va天堂va久久| 久久精品亚洲精品国产色婷| 精品综合久久久久久888蜜芽|