新聞中心

        Linux內(nèi)核定義的常量

        作者: 時(shí)間:2011-02-25 來(lái)源:網(wǎng)絡(luò) 收藏
        1 初始定義

        定義了你的機(jī)器上的地址轉(zhuǎn)換__virt_to_phys()。這個(gè)宏用于把虛擬地址轉(zhuǎn)換為一個(gè)物理地址。通常情況下:

        phys = virt - PAGE_OFFSET PHYS_OFFSET

        2 解壓縮符號(hào)

        l ZTEXTADDR

        解壓縮器的地址地址。由于當(dāng)你調(diào)用解壓縮器代碼時(shí),通常關(guān)閉MMU,因此這里并不討論虛擬地址和物理地址的問(wèn)題。通常你在這個(gè)地址處調(diào)用內(nèi)核,開(kāi)始引導(dǎo)內(nèi)核。它不需要在RAM中,只需要位于FLASH或其他只讀或讀/寫(xiě)的可尋址的存儲(chǔ)設(shè)備中。

        l ZBSSADDR

        解壓縮器的初始化為0的工作區(qū)的起始地址。必須位于RAM中,解壓縮器會(huì)替你把它初始化為0,此外,需要關(guān)閉MMU

        l ZRELADDR

        解壓縮內(nèi)核將被寫(xiě)入的地址和最終的執(zhí)行地址。必須滿足:

        __virt_to_phys(TEXTADDR) == ZRELADDR

        內(nèi)核的開(kāi)始部分被編碼為與位置無(wú)關(guān)的代碼。

        l INITRD_PHYS

        放置初始RAM盤(pán)的物理地址。僅當(dāng)你使用bootpImage時(shí)相關(guān)(這是一種非常老的param_struct結(jié)構(gòu))

        l INITRD_VIRT

        初始RAM盤(pán)的虛擬地址。必須滿足:

        __virt_to_phys(INITRD_VIRT) == INITRD_PHYS

        l PARAMS_PHYS

        param_struct 結(jié)構(gòu)體或tag lis的物理地址,用于給定內(nèi)核執(zhí)行環(huán)境下的不同參數(shù)。

        3 內(nèi)核符號(hào)

        l PHYS_OFFSET

        RAM第一個(gè)BANK的物理地址地址。

        l PAGE_OFFSET

        RAM第一個(gè)BANK的虛擬地址地址。在內(nèi)核引導(dǎo)階段,虛擬地址PAGE_OFFSE將被映射為物理地址PHYS_OFFSET,它應(yīng)該與TASK_SIZE具有相同的值。

        l TASK_SIZE

        一個(gè)用戶進(jìn)程的最大值,單位為byte。用戶空間的堆棧從這個(gè)地址處向下增長(zhǎng)。

        任何一個(gè)低于TASK_SIZE的虛擬地址對(duì)用戶進(jìn)程來(lái)說(shuō)都是不可見(jiàn)的,因此,內(nèi)核通過(guò)進(jìn)程偏移對(duì)每個(gè)進(jìn)行進(jìn)行動(dòng)態(tài)的管理。我把這叫做用戶段。任何高于TASK_SIZE的對(duì)所有進(jìn)程都是相同的,稱之為內(nèi)核段。(換句話說(shuō),你不能把IO映射放在低于TASK_SIZEPAGE_OFFSET的位置處。)

        l TEXTADDR

        內(nèi)核的虛擬起始地址,通常為PAGE_OFFSET 0x8000。內(nèi)核映射必須在此結(jié)束。

        l DATAADDR

        內(nèi)核數(shù)據(jù)段的虛擬地址,不能在使用解壓縮器的情況下定義。

        l VMALLOC_START

        l VMALLOC_END

        用于限制vmalloc( )區(qū)域的虛擬地址。此地址必須位于內(nèi)核段。 通常,vmalloc( )區(qū)域在最后的虛擬RAM地址以上開(kāi)始VMALLOC_OFFSET字節(jié)。

        l VMALLOC_OFFSET

        Offset normally incorporated into VMALLOC_START to provide a hole between virtual RAM and the vmalloc area. We do this to allow out of bounds memory accesses (eg, something writing off the end of the mapped memory map) to be caught. Normally set to 8MB.

        4 構(gòu)架相關(guān)的宏

        l BOOT_MEM(pram,pio,vio)

        pram——指定了RAM起始的物理地址,必須始終存在,并應(yīng)等于PHYS_OFFSET。

        pio——是供arch/arm/kernel/debug-armv.S中的調(diào)試宏使用的,包含IO8 MB區(qū)域的物理地址。

        vio——是8MB調(diào)試區(qū)域的虛擬地址。

        這個(gè)調(diào)試區(qū)域?qū)⒈晃挥诖a中(通過(guò)MAPIO函數(shù))的隨后的構(gòu)架相關(guān)代碼再次進(jìn)行初始化。

        l BOOT_PARAMS

        參見(jiàn) PARAMS_PHYS.

        l FIXUP(func)

        機(jī)器相關(guān)的修正,在存儲(chǔ)子系統(tǒng)被初始化前運(yùn)行。

        l MAPIO(func)

        機(jī)器相關(guān)的函數(shù),用于IO區(qū)域的映射(包括上面的調(diào)試區(qū))。

        l INITIRQ(func)

        用于初始化中斷的機(jī)器相關(guān)的函數(shù)。.

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 隆尧县| 得荣县| 崇义县| 东丽区| 延庆县| 揭西县| 青浦区| 会宁县| 开封县| 中江县| 辽宁省| 乡宁县| 乐东| 伊吾县| 航空| 东丽区| 皋兰县| 成安县| 西贡区| 阿克| 左权县| 元朗区| 双牌县| 岳西县| 牙克石市| 富锦市| 垣曲县| 江北区| 渑池县| 奎屯市| 上林县| 大连市| 兴义市| 车险| 康定县| 怀仁县| 辽源市| 资兴市| 麟游县| 观塘区| 大厂|