• <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)系,它實質(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計
            },
            ………………………
            {
            0,
            0,
            0
            }
            };
            如例子所示,OEMAddressTable為一個結(jié)構(gòu)數(shù)組,每項的第一個成員為虛擬地址,第二個成員為對應(yīng)的物理地址,最后一個成員為該段空間的大小。這個數(shù)組的最后一項必須全部為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)地址實際是物理地址的0x,但是由于啟用了MMU,所以CPU只能認(rèn)虛擬地址。至于這個虛實映射的對應(yīng)關(guān)系就在OEMAddressTable中。你看對應(yīng)物理地址是0x的虛擬地址是多少。
            你說的內(nèi)核從80001000這個虛擬地址開始,這個是可以在config.bib中設(shè)置的。實際的物理地址參考OEMAddressTable。
            希望對你有點作用。
              回復(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)一個問題就是,從各種實驗結(jié)果看好像是系統(tǒng)找不到94000000這個虛擬地址對30000000的映射,系統(tǒng)起不來。我想問一下,在使用XIP功能時對于RAM 的起始位置有什么規(guī)定嗎?還是有其他一些說法。我用的是三星的2443,ARM核。
            對這個的理解我還有些不是特別透徹,請您給我講解一下,好嗎? 謝謝!  回復(fù)  更多評論   

            導(dǎo)航

            統(tǒng)計

            公告

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

            常用鏈接

            留言簿(37)

            隨筆分類(104)

            隨筆檔案(101)

            文章分類(51)

            文章檔案(53)

            wince牛人

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            九九热久久免费视频| 99久久久精品| 99精品久久久久久久婷婷| 97精品伊人久久久大香线蕉 | 国产综合精品久久亚洲| 亚洲午夜久久久| 日本精品久久久久中文字幕8| 开心久久婷婷综合中文字幕| 久久精品国产亚洲av影院| 精品久久人人做人人爽综合| 久久综合狠狠综合久久| 久久精品国产亚洲AV不卡| 久久久久久九九99精品| 久久亚洲国产最新网站| 狠狠色伊人久久精品综合网| 色偷偷久久一区二区三区| 亚洲国产成人久久笫一页| 精品久久久久久国产91| 亚洲成色www久久网站夜月| 久久精品成人一区二区三区| 久久综合丁香激情久久| 国产一区二区三区久久精品| 精品人妻伦九区久久AAA片69| 开心久久婷婷综合中文字幕| 精品水蜜桃久久久久久久| 91精品国产高清久久久久久io| 亚洲AV日韩精品久久久久| 亚洲综合久久久| 无码任你躁久久久久久老妇App| 日韩久久久久中文字幕人妻| 久久免费99精品国产自在现线| 国产精品热久久无码av| 亚洲综合精品香蕉久久网97 | 久久久久久极精品久久久| 国产99久久久国产精免费| 99国内精品久久久久久久| 久久99精品久久久久久噜噜| 久久久综合九色合综国产| 丰满少妇人妻久久久久久4| 国产毛片久久久久久国产毛片 | 久久亚洲精品无码播放|