資源描述:
《基于i386體系結(jié)構(gòu)的Linux啟動代碼分析》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、嵌入式操作系統(tǒng)xlanchen@2007.6.5http://staff.ustc.edu.cn/~xlanchenEmail:xlanchen@ustc.edu.cnPhone:0551-3606864-83上次課內(nèi)容回顧一、嵌入式Linux開發(fā)綜述二、Linux的配置和編譯三、根文件系統(tǒng)及其制作xlanchen@2007.6.52EmbeddedOperatingSystems基于i386體系結(jié)構(gòu)的Linux啟動代碼分析xlanchen@2007.6.5源代碼來源Linux-2.4.18加壓縮后,建立SourceInsigt工程閱讀linu
2、x目錄下的README關(guān)于Linux的介紹該版本內(nèi)核支持的體系結(jié)構(gòu)如何配置、編譯、安裝xlanchen@2007.6.54EmbeddedOperatingSystems考慮Arch為i386在arch/i386下存在如下目錄I386的啟動源代碼文件目錄I386的核心源代碼文件目錄I386的庫源代碼文件目錄I386的數(shù)學仿真源代碼文件目錄I386的內(nèi)存管理源代碼文件目錄I386的配置文件I386的體系相關(guān)部分的MakefileI386的Linux內(nèi)核的鏈接描述文件xlanchen@2007.6.55EmbeddedOperatingSystem
3、sI386的啟動代碼文件在arch/i386/boot目錄下在arch/i386/boot/compressed目錄下I386的體系結(jié)構(gòu)相關(guān)部分的啟動代碼都采用匯編碼寫的啟動扇區(qū)中的啟動代碼,其目標碼必然是512字節(jié)I386初始化內(nèi)核解壓縮xlanchen@2007.6.56EmbeddedOperatingSystems在arch/i386/kernel目錄下的.S文件在init目錄下32位啟動代碼這是體系結(jié)構(gòu)無關(guān)部分,i386體系結(jié)構(gòu)相關(guān)部分的啟動,其目的就是進入main.c中的start_kernel處執(zhí)行xlanchen@2007.6.
4、57EmbeddedOperatingSystems閱讀documentation/i386/boot.txt對于i386平臺,由于一些歷史的原因,因此Linux的啟動比較復(fù)雜這個文檔包含如下內(nèi)容1、Linux/i386的啟動協(xié)議(4個)2、內(nèi)存布局圖3、實模式下的內(nèi)核頭結(jié)構(gòu)4、內(nèi)核的命令行(commandline)xlanchen@2007.6.58EmbeddedOperatingSystems5、啟動配置示例6、裝載Linux的剩余部分7、特殊的命令行參數(shù)8、運行內(nèi)核9、高級啟動回調(diào)函數(shù)關(guān)于其中的一些內(nèi)容,我們將在合適的時候說明xlanc
5、hen@2007.6.59EmbeddedOperatingSystems閱讀頂層目錄下的Makefile找到缺省目標鏈接xlanchen@2007.6.510EmbeddedOperatingSystems找到vmlinux找到vmlinux所依賴的各個文件或者目標可以看到vmlinux包含如下內(nèi)容i386/kernel/head.S+init/main.c+init/version.o+CORE_FILES+DRIVERS+NETWORKS+LIBSxlanchen@2007.6.511EmbeddedOperatingSystems若ma
6、keinstall在i386的Makefile中有install規(guī)則若makeboot/bzImage/zImage等等,則要找到對應(yīng)的目標然后進行makeboot在頂層的Makefile中可以找到boot規(guī)則bzImage/zImage可以在i386的Makefile中找到相應(yīng)規(guī)則其他的zXXX/bzXXX也都依賴于boot下的zImage/bzImage它們最終都找到i386/boot的Makefilexlanchen@2007.6.512EmbeddedOperatingSystemsi386/boot的Makefile看i386/boo
7、t的Makefilez代表壓縮;b代表大內(nèi)核可見compressed下的vmlinux/bvmlinux為compressed/head.S+壓縮后的頂層目錄下的vmlinuxzImage為bootsect+setup+compressed/vmlinuxbzImage為bbootsect+bsetup+compressed/bvmlinuxxlanchen@2007.6.513EmbeddedOperatingSystems下面根據(jù)在bzImage/zImage中的順序,我們依次看啟動相關(guān)的源代碼和相關(guān)概念arch/i386/boot/boo
8、tsect.Sarch/i386/boot/setup.Sarch/i386/boot/compressed/head.Sarch/i386/kern