日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]Linux內(nèi)核啟動-內(nèi)核解壓縮

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

內(nèi)核的生成過程來看內(nèi)核的鏈接主要有三步:

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

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

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

自然,在這過程中,不可能會出現(xiàn)startup_32重定義的問題。

你可能會說:太BT了,平時誰會采用這種方式編譯程序?

是啊,然而在內(nèi)核還沒啟動的情況下,要高效地實現(xiàn)自解壓,還有更好的方式么?

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

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

我們對具體的解壓過程不感興趣。

內(nèi)核解壓完畢。位于0x100000即1M處

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

ljmp $(__BOOT_CS), $__PHYSICAL_START

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉