<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > Linux內核啟動(dòng)-內核解壓縮

Linux內核啟動(dòng)-內核解壓縮

作者: 時(shí)間:2012-07-10 來(lái)源:網(wǎng)絡(luò ) 收藏

這得從vmliux.bin的產(chǎn)生過(guò)程說(shuō)起。

本文引用地址:http://dyxdggzs.com/article/148792.htm

的生成過(guò)程來(lái)看的鏈接主要有三步:

第一步是把的源代碼編譯成.o文件,然后鏈接,這一步,鏈接的是arch/i386/kernel/head.S,生成的是vmlinux。注意的是這里的所有變量地址都是32位頁(yè)尋址方式的保護模式下的虛擬地址。通常在3G以上。

第二步,將vmlinux objcopy 成arch/i386/boot/compressed/vmlinux.bin,之后加以,最后作為數據編譯成piggy.o。這時(shí)候,在編譯器看來(lái),piggy.o里根本不存在什么STartup_32。

第三步,把head.o,misc.o和piggy.o鏈接生成arch/i386/boot/compressed/vmlinux,這一步,鏈接的是arch/i386/boot/compressed/head.S。這時(shí)arch/i386/kernel/head.S中的startup_32被,作為一段普通的數據,而被編譯器忽視了。注意這里的地址都是32位段尋址方式的保護模式下的線(xiàn)性地址。

自然,在這過(guò)程中,不可能會(huì )出現startup_32重定義的問(wèn)題。

你可能會(huì )說(shuō):太BT了,平時(shí)誰(shuí)會(huì )采用這種方式編譯程序?

是啊,然而在內核還沒(méi)的情況下,要高效地實(shí)現自解壓,還有更好的方式么?

所以前面的問(wèn)題就迎刃而解。setup執行完畢,跳轉到vmlinux.bin中的startup_32()是arch/i386/boot/compressed/head.S中的startup_32()

這是一段自解壓程序,過(guò)程和內核生成的過(guò)程正好相反。這時(shí),CPU處在32位段尋址方式的保護模式下,尋址范圍從1M擴大到4G。只是沒(méi)有頁(yè)表。

我們對具體的解壓過(guò)程不感興趣。

內核解壓完畢。位于0x100000即1M處

最后,執行一條跳轉指令,執行0x100000處的代碼,即startup_32(),這回是arch/i386/kernel/head.S中的startup_32()代碼

ljmp $(__BOOT_CS), $__PHYSICAL_START

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




關(guān)鍵詞: 內核 壓縮 啟動(dòng) Linux

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>