版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 【學(xué)習(xí)目標(biāo)】l熟悉嵌入式系統(tǒng)開發(fā)環(huán)境的構(gòu)建 l熟悉U-Boot的移植l掌握嵌入式Linux操作系統(tǒng)內(nèi)核編譯 嵌入式系統(tǒng)開發(fā)環(huán)境的構(gòu)建嵌入式系統(tǒng)開發(fā)環(huán)境的構(gòu)建3.1U-bootU-boot的移植的移植3.2嵌入式Linux操作系統(tǒng)內(nèi)核編譯3.3習(xí)題與練習(xí)習(xí)題與練習(xí)3.4 所謂交叉編譯,就是利用運行在某臺計算所謂交叉編譯,就是利用運行在某臺計算機(宿主機)上的編譯器編譯某個源程序,生機(宿主機)上的編譯器編譯某個源程序,生成在另一臺機器(目標(biāo)機)上運行的目標(biāo)代碼成在另一臺機器(目標(biāo)機)上運行的目標(biāo)代碼的過程。使用交叉編譯的原因主要有兩個,一的過程。使用交叉編譯的原因主要有兩個,一是目標(biāo)平臺所需要
2、的是目標(biāo)平臺所需要的Bootloader以及操作系統(tǒng)以及操作系統(tǒng)核心沒有建立起來時,需要做交叉編譯;二是核心沒有建立起來時,需要做交叉編譯;二是一般目標(biāo)板的資源都比較有限,不具備一定的一般目標(biāo)板的資源都比較有限,不具備一定的處理器能力和存儲空間,需要有強大的宿主處理器能力和存儲空間,需要有強大的宿主PC機為它完成大部分的調(diào)試編譯任務(wù)。機為它完成大部分的調(diào)試編譯任務(wù)。binutils : 是一組二進制處理工具的集合,包是一組二進制處理工具的集合,包括連接器,匯編器和其他用于目標(biāo)文件和檔案的括連接器,匯編器和其他用于目標(biāo)文件和檔案的工具工具 。binutils的主要工具介紹如下:的主要工具介紹如下
3、: addr2line:把程序地址轉(zhuǎn)換為文件名和行號。在命令:把程序地址轉(zhuǎn)換為文件名和行號。在命令行中給它一個地址和一個可執(zhí)行文件名,它就會使用這行中給它一個地址和一個可執(zhí)行文件名,它就會使用這個可執(zhí)行文件的調(diào)試信息指出在給出的地址上是哪個文個可執(zhí)行文件的調(diào)試信息指出在給出的地址上是哪個文件以及行號。件以及行號。 ar:建立、修改、提取檔案文件。檔案文件是包含多:建立、修改、提取檔案文件。檔案文件是包含多個文件內(nèi)容的一個大文件,其結(jié)構(gòu)保證了可以恢復(fù)原始個文件內(nèi)容的一個大文件,其結(jié)構(gòu)保證了可以恢復(fù)原始文件內(nèi)容。文件內(nèi)容。 as:主要用來編譯:主要用來編譯GNU C編譯器編譯器gcc輸出的匯編文件
4、,輸出的匯編文件,產(chǎn)生的目標(biāo)文件由連接器產(chǎn)生的目標(biāo)文件由連接器ld連接。連接。 c+filt:連接器使用它來過濾:連接器使用它來過濾 C+ 和和 Java 符符號,防止重載函數(shù)沖突。號,防止重載函數(shù)沖突。 gprof: 顯示程序調(diào)用段的各種數(shù)據(jù)。顯示程序調(diào)用段的各種數(shù)據(jù)。 ld:是連接器,它把一些目標(biāo)和歸檔文件結(jié)合:是連接器,它把一些目標(biāo)和歸檔文件結(jié)合在一起,重定位數(shù)據(jù),并鏈接符號引用。通常,在一起,重定位數(shù)據(jù),并鏈接符號引用。通常,建立一個新編譯程序的最后一步就是調(diào)用建立一個新編譯程序的最后一步就是調(diào)用ld。 nm:列出目標(biāo)文件中的符號。:列出目標(biāo)文件中的符號。 objcopy:把一種目標(biāo)文
5、件中的內(nèi)容復(fù)制到另一:把一種目標(biāo)文件中的內(nèi)容復(fù)制到另一種類型的目標(biāo)文件中種類型的目標(biāo)文件中. objdump: 顯示一個或者更多目標(biāo)文件的信息。顯示一個或者更多目標(biāo)文件的信息。使用選項來進行控制。使用選項來進行控制。 ranlib:產(chǎn)生歸檔文件索引,并將其保存到這:產(chǎn)生歸檔文件索引,并將其保存到這個歸檔文件中。在索引中列出了歸檔文件各成員個歸檔文件中。在索引中列出了歸檔文件各成員所定義的可重分配目標(biāo)文件。所定義的可重分配目標(biāo)文件。 readelf:顯示:顯示ebf格式可執(zhí)行文件的信息。格式可執(zhí)行文件的信息。 size: 列出目標(biāo)文件每一段的大小以及總體的列出目標(biāo)文件每一段的大小以及總體的大小。
6、默認情況下,對于每個目標(biāo)文件或者一個大小。默認情況下,對于每個目標(biāo)文件或者一個歸檔文件中的每個模塊只產(chǎn)生一行輸出。歸檔文件中的每個模塊只產(chǎn)生一行輸出。 size: 列出目標(biāo)文件每一段的大小以及總體的列出目標(biāo)文件每一段的大小以及總體的大小。默認情況下,對于每個目標(biāo)文件或者一個大小。默認情況下,對于每個目標(biāo)文件或者一個歸檔文件中的每個模塊只產(chǎn)生一行輸出。歸檔文件中的每個模塊只產(chǎn)生一行輸出。 strings:打印某個文件的可打印字符串,這些:打印某個文件的可打印字符串,這些字符串最少字符串最少4個字符長,也可以使用選項個字符長,也可以使用選項-n設(shè)置設(shè)置字符串的最小長度。默認情況下,它只打印目標(biāo)字符
7、串的最小長度。默認情況下,它只打印目標(biāo)文件初始化和可加載段中的可打印字符;對于其文件初始化和可加載段中的可打印字符;對于其它類型的文件它打印整個文件的可打印字符,這它類型的文件它打印整個文件的可打印字符,這個程序?qū)τ诹私夥俏谋疚募膬?nèi)容很有幫助。個程序?qū)τ诹私夥俏谋疚募膬?nèi)容很有幫助。 strip:丟棄目標(biāo)文件中的全部或者特定符號。:丟棄目標(biāo)文件中的全部或者特定符號。 libiberty:包含許多:包含許多GNU程序都會用到的函數(shù),程序都會用到的函數(shù),這些程序有:這些程序有: getopt, obstack, strerror, strtol 和和 strtoul等。等。 libbfd :二進
8、制文件描述庫。:二進制文件描述庫。 libopcodes: 用來處理用來處理opcodes的庫的庫, 在生成一在生成一些應(yīng)用程序的時候也會用到它。些應(yīng)用程序的時候也會用到它。windres:一個一個windows資源的編譯器。資源的編譯器。GCC :工具是編譯程序的最為主要的工具。工具是編譯程序的最為主要的工具。GCC包括以下幾個主要的工具:包括以下幾個主要的工具:Cpp:C預(yù)處理器。預(yù)處理器。g+:C+編譯器。編譯器。gcc:C編譯器。編譯器。gccbug:創(chuàng)建:創(chuàng)建bug報告的報告的Shell腳本。腳本。gcov:分析在程序中哪里做優(yōu)化效果好。:分析在程序中哪里做優(yōu)化效果好。libgcc*
9、:gcc的運行庫。的運行庫。libstdc+:標(biāo)準(zhǔn):標(biāo)準(zhǔn)C+庫,包含許多常用函庫,包含許多常用函數(shù)。數(shù)。libsupc+:提供支持:提供支持C+語言的庫函數(shù)。語言的庫函數(shù)。 Glibe:是提供系統(tǒng)調(diào)用和基本函數(shù)的是提供系統(tǒng)調(diào)用和基本函數(shù)的 C 庫,庫,比如比如open(), malloc(), printf()等等。所有動態(tài)連等等。所有動態(tài)連接的程序都要用到它接的程序都要用到它 。Glibc 中主要有以下程序:中主要有以下程序:l catchsegv:當(dāng)程序發(fā)生:當(dāng)程序發(fā)生segmentation fault的的時候時候, 用來建立一個堆棧跟蹤。用來建立一個堆棧跟蹤。l gencat:建立消息
10、列表。:建立消息列表。l getconf:針對文件系統(tǒng)的指定變量顯示其系:針對文件系統(tǒng)的指定變量顯示其系統(tǒng)設(shè)置值。統(tǒng)設(shè)置值。l getent:從系統(tǒng)管理數(shù)據(jù)庫獲取一個條目。:從系統(tǒng)管理數(shù)據(jù)庫獲取一個條目。l glibcbug:建立:建立glibc的的bug報告并且發(fā)送到報告并且發(fā)送到bug報告的郵件地址。報告的郵件地址。l iconv:轉(zhuǎn)化字符集。:轉(zhuǎn)化字符集。l iconvconfig:建立快速讀取的:建立快速讀取的iconv模塊所使模塊所使用的設(shè)置文件。用的設(shè)置文件。l ldconfig:設(shè)置動態(tài)鏈接庫的實時綁定。:設(shè)置動態(tài)鏈接庫的實時綁定。l ldd:列出每個程序或者命令需要的共享庫。:
11、列出每個程序或者命令需要的共享庫。l lddlibc4: 輔助輔助 ldd 操作目標(biāo)文件。操作目標(biāo)文件。l locale: 是一個是一個 Perl 程序,可以告訴編譯器程序,可以告訴編譯器打開或關(guān)閉內(nèi)建的打開或關(guān)閉內(nèi)建的locale支持。支持。l localedef: 編譯編譯locale標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。l nscd:提供對常用名稱設(shè)備調(diào)用的緩存的守護:提供對常用名稱設(shè)備調(diào)用的緩存的守護進程。進程。l nscd_nischeck:檢查在進行:檢查在進行NIS+偵查時是否需偵查時是否需要安全模式。要安全模式。l pcprofiledump:打?。捍蛴C profiling產(chǎn)生的信息。產(chǎn)生的信息。l
12、 pt_chown:是一個輔助程序,幫助:是一個輔助程序,幫助grantpt設(shè)置設(shè)置子虛擬終端的屬主,用戶組和讀寫權(quán)限。子虛擬終端的屬主,用戶組和讀寫權(quán)限。l rpcgen:產(chǎn)生實現(xiàn):產(chǎn)生實現(xiàn)RPC協(xié)議的協(xié)議的C代碼。代碼。l rpcinfo:對:對RPC服務(wù)器產(chǎn)生一個服務(wù)器產(chǎn)生一個RPC呼叫。呼叫。l sln:用來創(chuàng)建符號鏈接,由于它本身是靜態(tài):用來創(chuàng)建符號鏈接,由于它本身是靜態(tài)連接的,在動態(tài)連接不起作用的時候,連接的,在動態(tài)連接不起作用的時候,sln仍然可仍然可以建立符號鏈接。以建立符號鏈接。l sprof:讀取并顯示共享目標(biāo)的特征描述數(shù)據(jù)。:讀取并顯示共享目標(biāo)的特征描述數(shù)據(jù)。l tzse
13、lect:對用戶提出關(guān)于當(dāng)前位置的問題:對用戶提出關(guān)于當(dāng)前位置的問題,并并輸出時區(qū)信息到標(biāo)準(zhǔn)輸出。輸出時區(qū)信息到標(biāo)準(zhǔn)輸出。l xtrace:通過打印當(dāng)前執(zhí)行的函數(shù)跟蹤程序執(zhí):通過打印當(dāng)前執(zhí)行的函數(shù)跟蹤程序執(zhí)行情況。行情況。l zdump:顯示時區(qū)。:顯示時區(qū)。l zic:時區(qū)編譯器。:時區(qū)編譯器。l ld.so:幫助動態(tài)鏈接庫的執(zhí)行。:幫助動態(tài)鏈接庫的執(zhí)行。l libBrokenLocale:幫助程序處理破損:幫助程序處理破損locale,如如Mozilla。l libSegFault:處理:處理 segmentation fault 信號,信號,試圖捕捉試圖捕捉segfaults。l lib
14、anl:異步名稱查詢庫。:異步名稱查詢庫。l L ibbsd-compat:為了在:為了在linux下執(zhí)行一些下執(zhí)行一些BSD程序程序,libbsd-compat提供了必要的可移植性。提供了必要的可移植性。llibc:是主要的:是主要的C庫庫-常用函數(shù)的集成。常用函數(shù)的集成。llibcrypt:加密編碼庫。:加密編碼庫。llibdl:動態(tài)連接接口。:動態(tài)連接接口。llibg:g+的運行時。的運行時。llibieee:IEEE浮點運算庫。浮點運算庫。llibm:數(shù)學(xué)函數(shù)庫。:數(shù)學(xué)函數(shù)庫。llibmcheck:包括了啟動時需要的代碼。:包括了啟動時需要的代碼。llibmemusage:幫助:幫助
15、memusage 搜集程序運行時搜集程序運行時內(nèi)存占用的信息。內(nèi)存占用的信息。llibnsl:網(wǎng)絡(luò)服務(wù)庫。:網(wǎng)絡(luò)服務(wù)庫。llibnss*: 是名稱服務(wù)切換庫,包含了解釋主機是名稱服務(wù)切換庫,包含了解釋主機名,用戶名,組名,別名,服務(wù),協(xié)議等等的函名,用戶名,組名,別名,服務(wù),協(xié)議等等的函數(shù)。數(shù)。llibpcprofile:幫助內(nèi)核跟蹤在函數(shù):幫助內(nèi)核跟蹤在函數(shù), 源碼行和命源碼行和命令中令中CPU使用時間。使用時間。llibpthread:POSIX 線程庫。線程庫。llibresolv:創(chuàng)建:創(chuàng)建,發(fā)送及解釋到互聯(lián)網(wǎng)域名服務(wù)發(fā)送及解釋到互聯(lián)網(wǎng)域名服務(wù)器的數(shù)據(jù)包。器的數(shù)據(jù)包。llibrpcsv
16、c:提供:提供RPC的其他服務(wù)。的其他服務(wù)。llibrt: 提供了大部分的提供了大部分的POSIX.1b實時擴展的接實時擴展的接口。口。llibthread_db: 對建立多線程程序的調(diào)試很有對建立多線程程序的調(diào)試很有用。用。llibutil: 包含了在很多不同的包含了在很多不同的 Unix程序中使用程序中使用的的“標(biāo)準(zhǔn)標(biāo)準(zhǔn)”函數(shù)。函數(shù)。 Bootloader 就是在操作系統(tǒng)內(nèi)核運行之前運就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,可以初始化行的一段小程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境
17、帶到一個合適的狀態(tài),以便為最終的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。 針對針對ARM處理器,常見的處理器,常見的Bootloader有有U-Boot、RedBoot、ARMBoot等:等:lU-Boot :它是它是sourceforge上的一個開放源代碼的項上的一個開放源代碼的項目,可對目,可對PowerPC、ARM、MIPS、x86等處理器提供等處理器提供支持,它支持的嵌入式操作系統(tǒng)有支持,它支持的嵌入式操作系統(tǒng)有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最廣泛、使用等,是目前支持最廣泛、
18、使用最多的最多的Bootloader。 3.2.1 3.2.1 BootloaderBootloader概述概述lRedBoot : RedBoot是是Redhat公司隨公司隨eCos (Embedded Configurable Operating System)發(fā)布的)發(fā)布的一個一個Boot方案,是一個開源項目。方案,是一個開源項目。lARMBoot:是是sourceforge上的一個開放源代碼的項上的一個開放源代碼的項目,它最初的設(shè)計只是針對目,它最初的設(shè)計只是針對ARM處理器體系結(jié)構(gòu),所處理器體系結(jié)構(gòu),所以它可以很容易地被移植到各種以以它可以很容易地被移植到各種以ARM為核心的平臺為核
19、心的平臺上。上。 圖圖3-1是一個同時裝有是一個同時裝有 Bootloader、內(nèi)核的啟動參數(shù)、內(nèi)核的啟動參數(shù)、內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲設(shè)備的典型空間內(nèi)核映像和根文件系統(tǒng)映像的固態(tài)存儲設(shè)備的典型空間分配結(jié)構(gòu)圖。分配結(jié)構(gòu)圖。 圖3-1 固態(tài)存儲設(shè)備的典型空間分配結(jié)構(gòu)3.2.2 3.2.2 BootloaderBootloader的啟動流程的啟動流程 Bootloader 的啟動過程有單階段(的啟動過程有單階段(Single Stage)和多)和多階段(階段(Multi-Stage)兩種形式。通常多階段的)兩種形式。通常多階段的 Bootloader 能能提供更為復(fù)雜的功能,以及更好的可
20、移植性。從固態(tài)存儲設(shè)提供更為復(fù)雜的功能,以及更好的可移植性。從固態(tài)存儲設(shè)備上啟動的備上啟動的 Bootloader 大多都是大多都是2 階段的啟動過程,也即啟階段的啟動過程,也即啟動過程可以分為動過程可以分為 stage 1 和和 stage 2 兩部分。兩部分。 stage1 通常包括以下步驟(按執(zhí)行的先后順序):通常包括以下步驟(按執(zhí)行的先后順序): (1)硬件設(shè)備初始化。)硬件設(shè)備初始化。 這是這是 Bootloader 一開始就執(zhí)行的操作,其目的是為一開始就執(zhí)行的操作,其目的是為 stage2 的執(zhí)行以及隨后的的執(zhí)行以及隨后的 kernel 的執(zhí)行準(zhǔn)備好一些基本的的執(zhí)行準(zhǔn)備好一些基本的
21、硬件環(huán)境。它通常包括以下步驟:硬件環(huán)境。它通常包括以下步驟: l屏蔽所有的中斷。為中斷提供服務(wù)通常是屏蔽所有的中斷。為中斷提供服務(wù)通常是OS 設(shè)備驅(qū)動程設(shè)備驅(qū)動程序的責(zé)任,因此在序的責(zé)任,因此在Bootloader 的執(zhí)行全過程中可以不必響的執(zhí)行全過程中可以不必響應(yīng)任何中斷。中斷屏蔽可以通過寫應(yīng)任何中斷。中斷屏蔽可以通過寫 CPU 的中斷屏蔽寄存的中斷屏蔽寄存器或狀態(tài)寄存器(比如器或狀態(tài)寄存器(比如 ARM 的的 CPSR 寄存器)來完成。寄存器)來完成。 l設(shè)置設(shè)置 CPU 的速度和時鐘頻率。的速度和時鐘頻率。 l RAM 初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控初始化。包括正確地設(shè)置系統(tǒng)的內(nèi)存控
22、制器的功能寄存器以及各內(nèi)存庫控制寄存器等。制器的功能寄存器以及各內(nèi)存庫控制寄存器等。 l初始化初始化 LED。典型地,通過。典型地,通過 GPIO 來驅(qū)動來驅(qū)動 LED,其目的是表明系統(tǒng)的狀態(tài)是其目的是表明系統(tǒng)的狀態(tài)是 OK 還是還是 Error。如。如果板子上沒有果板子上沒有 LED,那么也可以通過初始化,那么也可以通過初始化 UART 向串口打印向串口打印 Bootloader 的的 Logo 字符信息字符信息來完成這一點。來完成這一點。 l 關(guān)閉關(guān)閉 CPU 內(nèi)部指令數(shù)據(jù)內(nèi)部指令數(shù)據(jù) cache。 (2)為加載)為加載 Bootloader 的的 stage2 準(zhǔn)備準(zhǔn)備 RAM 空間???/p>
23、間。 為了獲得更快的執(zhí)行速度,通常把為了獲得更快的執(zhí)行速度,通常把 stage2 加載到加載到 R A M 空 間 中 來 執(zhí) 行 , 因 此 必 須 為 加 載空 間 中 來 執(zhí) 行 , 因 此 必 須 為 加 載 Bootloader 的的 stage2 準(zhǔn)備好一段可用的準(zhǔn)備好一段可用的RAM 空空間范圍。間范圍。 (3)拷貝)拷貝 Bootloader 的的 stage2 到到 RAM 空間中??臻g中。 拷貝時要確定拷貝時要確定stage2 的可執(zhí)行映象在固態(tài)的可執(zhí)行映象在固態(tài)存儲設(shè)備的存放起始地址和終止地址一級存儲設(shè)備的存放起始地址和終止地址一級RAM 空間的起始地址??臻g的起始地址。
24、 (4)設(shè)置好堆棧。)設(shè)置好堆棧。 堆棧指針的設(shè)置是為了執(zhí)行堆棧指針的設(shè)置是為了執(zhí)行 C 語言代碼作好準(zhǔn)語言代碼作好準(zhǔn)備。此外,在設(shè)置堆棧指針備。此外,在設(shè)置堆棧指針 sp 之前,也可以關(guān)閉之前,也可以關(guān)閉 LED 燈,以提示用戶準(zhǔn)備跳轉(zhuǎn)到燈,以提示用戶準(zhǔn)備跳轉(zhuǎn)到 stage2。經(jīng)過上述。經(jīng)過上述這些執(zhí)行步驟后,系統(tǒng)的物理內(nèi)存布局應(yīng)該如下圖這些執(zhí)行步驟后,系統(tǒng)的物理內(nèi)存布局應(yīng)該如下圖3-2所示。所示。圖3-2 Bootloader 的 stage2 可執(zhí)行映象剛被拷貝到 RAM 空間時的系統(tǒng)內(nèi)存布局(5)跳轉(zhuǎn)到)跳轉(zhuǎn)到 stage2 的的 C 入口點。入口點。 在上述一切都就緒后,就可以跳轉(zhuǎn)到
25、在上述一切都就緒后,就可以跳轉(zhuǎn)到 Bootloader 的的 stage2 去執(zhí)行了。比如,在去執(zhí)行了。比如,在 ARM 系統(tǒng)中,可以通過修改系統(tǒng)中,可以通過修改 PC 寄存器為合寄存器為合適的地址來實現(xiàn)。適的地址來實現(xiàn)。 stage2 通常包括以下步驟(按執(zhí)行的先后順序):通常包括以下步驟(按執(zhí)行的先后順序):(1)初始化本階段要使用到的硬件設(shè)備。)初始化本階段要使用到的硬件設(shè)備。 通常包括:初始化至少一個串口,以便和終通常包括:初始化至少一個串口,以便和終端用戶進行端用戶進行 I/O 輸出信息;初始化計時器等。在初輸出信息;初始化計時器等。在初始化這些設(shè)備之前,也可以重新把始化這些設(shè)備之前
26、,也可以重新把 LED 燈點亮,以燈點亮,以表明已經(jīng)進入表明已經(jīng)進入 main()函數(shù)執(zhí)行。設(shè)備初始化完成后,函數(shù)執(zhí)行。設(shè)備初始化完成后,可以輸出一些打印信息,程序名字字符串、版本號可以輸出一些打印信息,程序名字字符串、版本號等。等。 (2)檢測系統(tǒng)內(nèi)存映射()檢測系統(tǒng)內(nèi)存映射(memory map)。)。 所謂內(nèi)存映射就是指在整個所謂內(nèi)存映射就是指在整個 4GB 物理物理地址空間中有哪些地址范圍被分配用來尋地址空間中有哪些地址范圍被分配用來尋址系統(tǒng)的址系統(tǒng)的 RAM 單元。單元。 (3)將)將kernel 映像和根文件系統(tǒng)映像從映像和根文件系統(tǒng)映像從 Flash 上讀上讀到到 RAM 空間中
27、??臻g中。 首先規(guī)劃內(nèi)存占用的布局,這里包括兩個方面:首先規(guī)劃內(nèi)存占用的布局,這里包括兩個方面:內(nèi)核映像所占用的內(nèi)存范圍;根文件系統(tǒng)所占用的內(nèi)核映像所占用的內(nèi)存范圍;根文件系統(tǒng)所占用的內(nèi)存范圍。在規(guī)劃內(nèi)存占用的布局時,主要考慮基內(nèi)存范圍。在規(guī)劃內(nèi)存占用的布局時,主要考慮基地址和映像的大小兩個方面。地址和映像的大小兩個方面。 對于內(nèi)核映像,一般將其拷貝到從基地址開始對于內(nèi)核映像,一般將其拷貝到從基地址開始的大約的大約1MB大小的內(nèi)存范圍內(nèi)。大小的內(nèi)存范圍內(nèi)。(4)為內(nèi)核設(shè)置啟動參數(shù)。)為內(nèi)核設(shè)置啟動參數(shù)。 在將內(nèi)核映像和根文件系統(tǒng)映像拷貝到在將內(nèi)核映像和根文件系統(tǒng)映像拷貝到RAM空間中后,就可以
28、準(zhǔn)備啟動空間中后,就可以準(zhǔn)備啟動 Linux 內(nèi)核了。但是內(nèi)核了。但是在調(diào)用內(nèi)核之前,應(yīng)該作一步準(zhǔn)備工作,即設(shè)置在調(diào)用內(nèi)核之前,應(yīng)該作一步準(zhǔn)備工作,即設(shè)置 Linux 內(nèi)核的啟動參數(shù)。內(nèi)核的啟動參數(shù)。 (5)調(diào)用內(nèi)核。)調(diào)用內(nèi)核。 Bootloader 調(diào)用調(diào)用 Linux 內(nèi)核的方法是直接跳內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處,也即直接跳轉(zhuǎn)到轉(zhuǎn)到內(nèi)核的第一條指令處,也即直接跳轉(zhuǎn)到 MEM_START0 x8000 地址處。在跳轉(zhuǎn)時,下列地址處。在跳轉(zhuǎn)時,下列條件要滿足:條件要滿足: lCPU 寄存器的設(shè)置:寄存器的設(shè)置:R00;R1機器類型機器類型 ID;關(guān)于關(guān)于 Machine Typ
29、e Number,可以參見,可以參見 linux/arch/arm/tools/mach-types;R2啟動參數(shù)啟動參數(shù)標(biāo)記列表在標(biāo)記列表在 RAM 中起始基地址。中起始基地址。 lCPU 模式:必須禁止中斷(模式:必須禁止中斷(IRQs和和FIQs););CPU 必須必須 SVC 模式。模式。 lCache 和和 MMU 的設(shè)置:的設(shè)置:MMU 必須關(guān)閉;指必須關(guān)閉;指令令 Cache 可以打開也可以關(guān)閉;數(shù)據(jù)可以打開也可以關(guān)閉;數(shù)據(jù) Cache 必必須關(guān)閉。須關(guān)閉。Bootloader的系統(tǒng)啟動方案流程如圖3-3所示。圖3-3 Bootloader系統(tǒng)啟動方案流圖3.2.3 U-Boot
30、 3.2.3 U-Boot 分析與移植分析與移植 U-Boot (Universal Bootloader),即),即通用通用Bootloader,是遵循,是遵循GPL條款的開放條款的開放源碼項目。從源碼項目。從FADSROM、8xxROM、PPCBOOT逐步發(fā)展演化而來。其前身是逐步發(fā)展演化而來。其前身是由德國由德國DENX軟件工程中心的軟件工程中心的Wolfgang D e n k 基 于基 于 8 x x R O M 的 源 碼 創(chuàng) 建 的的 源 碼 創(chuàng) 建 的PPCBOOT工程。工程。 U-Boot不僅僅支持嵌入式不僅僅支持嵌入式Linux系統(tǒng)的系統(tǒng)的引導(dǎo),當(dāng)前,它還支持引導(dǎo),當(dāng)前,它
31、還支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作嵌入式操作系統(tǒng)。其目前要支持的目標(biāo)操作系統(tǒng)是系統(tǒng)。其目前要支持的目標(biāo)操作系統(tǒng)是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。 U-Boot有如下特性:有如下特性:l開放源碼開放源碼,支持多種嵌入式操作系統(tǒng)內(nèi)核,支持多種嵌入式操作系統(tǒng)內(nèi)核,如如Linux、NetBSD, VxWorks, QNX,
32、RTEMS, ARTOS, LynxOS;l支持多個處理器系列,如支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale;l較高的可靠性和穩(wěn)定性較高的可靠性和穩(wěn)定性;l高度靈活的功能設(shè)置,適合高度靈活的功能設(shè)置,適合U-Boot調(diào)試、操作調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等;l豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、豐富的設(shè)備驅(qū)動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等;、鍵盤等;l較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡(luò)技術(shù)支較為豐富的開發(fā)調(diào)試文檔與強大的網(wǎng)絡(luò)技術(shù)支持;持;l支持支持NFS掛載、
33、掛載、RAMDISK(壓縮或非壓縮)(壓縮或非壓縮)形式的根文件系統(tǒng);形式的根文件系統(tǒng);l支持支持NFS掛載、從掛載、從Flash中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核;中引導(dǎo)壓縮或非壓縮系統(tǒng)內(nèi)核;l可靈活設(shè)置、傳遞多個關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)可靈活設(shè)置、傳遞多個關(guān)鍵參數(shù)給操作系統(tǒng),適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤其對在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤其對Linux支支持最強;持最強;l支持目標(biāo)板環(huán)境變量多種存儲方式,如支持目標(biāo)板環(huán)境變量多種存儲方式,如Flash、NVRAM、EEPROM;lCRC32校驗,可校驗校驗,可校驗Flash中內(nèi)核、中內(nèi)核、RAMDISK鏡像文鏡像文件是否
34、完好。件是否完好。l上電自檢功能:上電自檢功能:SDRAM、Flash大小自動檢測,大小自動檢測,SDRAM故障檢測,故障檢測,CPU型號。型號。l特殊功能:特殊功能:XIP內(nèi)核引導(dǎo)。內(nèi)核引導(dǎo)。 U-Boot源碼結(jié)構(gòu):源碼結(jié)構(gòu): 從網(wǎng)站上下載得到從網(wǎng)站上下載得到U-Boot源碼包,例如:源碼包,例如:U-Boot-1.1.26tar.bz2,解壓就可以得到全部,解壓就可以得到全部U-Boot源程序。在頂源程序。在頂層目錄下有層目錄下有26個子目錄,分別存放和管理不同的源程序。個子目錄,分別存放和管理不同的源程序。這些目錄中所要存放的文件有其規(guī)則,可以分為這些目錄中所要存放的文件有其規(guī)則,可以分
35、為4類。類。l第第1類目錄與處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān);類目錄與處理器體系結(jié)構(gòu)或者開發(fā)板硬件直接相關(guān);l第第2類目錄是一些通用的函數(shù)或者驅(qū)動程序;類目錄是一些通用的函數(shù)或者驅(qū)動程序;l第第3類目錄是通用的設(shè)備驅(qū)動程序。類目錄是通用的設(shè)備驅(qū)動程序。l第第4類目錄是類目錄是U-Boot的應(yīng)用程序、工具或者文檔。的應(yīng)用程序、工具或者文檔。目 錄特 性解 釋 說 明board平臺依賴存放電路板相關(guān)的目錄文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目錄cpu平臺依賴存放CPU相關(guān)的目錄文件,例如:mpc8xx、ppc4xx、a
36、rm720t、arm920t、 xscale、i386等目錄lib_ppc平臺依賴存放對PowerPC體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)PowerPC平臺通用的函數(shù)lib_arm平臺依賴存放對ARM體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)ARM平臺通用的函數(shù)lib_i386平臺依賴存放對X86體系結(jié)構(gòu)通用的文件,主要用于實現(xiàn)X86平臺通用的函數(shù)include通用頭文件和開發(fā)板配置文件,所有開發(fā)板的配置文件都在configs目錄下common通用通用的多功能函數(shù)實現(xiàn)表3-1 U-Boot頂層目錄說明lib_generic通用通用庫函數(shù)的實現(xiàn)Net通用存放網(wǎng)絡(luò)的程序Fs通用存放文件系統(tǒng)的程序Post通用存放
37、上電自檢程序drivers通用通用的設(shè)備驅(qū)動程序,主要有以太網(wǎng)接口的驅(qū)動Disk通用硬盤接口程序Rtc通用RTC的驅(qū)動程序Dtt通用數(shù)字溫度測量器或者傳感器的驅(qū)動examples應(yīng)用例程一些獨立運行的應(yīng)用程序的例子,例如helloworldtools工具存放制作S-Record 或者 U-Boot格式的映像等工具,例如mkimageDoc文檔開發(fā)使用文檔U-Boot的編譯:的編譯: U-Boot的源碼是通過的源碼是通過GCC和和Makefile組織組織編譯的。頂層目錄下的編譯的。頂層目錄下的Makefile首先可以設(shè)置開首先可以設(shè)置開發(fā)板的定義,然后遞歸地調(diào)用各級子目錄下的發(fā)板的定義,然后遞歸
38、地調(diào)用各級子目錄下的Makefile,最后把編譯過的程序鏈接成,最后把編譯過的程序鏈接成U-Boot映映像。像。表3-2 U-Boot編譯生成的映像文件文件名稱說明System.mapU-Boot映像的符號表u-bootU-Boot映像的ELF格式u-boot.binU-Boot映像原始的二進制格式u-boot.srecU-Boot映像的S-Record格式U-Boot的移植:的移植: U-Boot能夠支持多種體系結(jié)構(gòu)的處理器,能夠支持多種體系結(jié)構(gòu)的處理器,支持的開發(fā)板也越來越多。因為支持的開發(fā)板也越來越多。因為Bootloader是完是完全依賴硬件平臺的,所以在新電路板上需要移植全依賴硬件平
39、臺的,所以在新電路板上需要移植U-Boot程序。程序。移植移植U-Boot的基本步驟如下:的基本步驟如下:(1)在頂層)在頂層Makefile中為開發(fā)板添加新的配置選項。中為開發(fā)板添加新的配置選項。(2)創(chuàng)建一個新目錄存放開發(fā)板相關(guān)的代碼,并且添加)創(chuàng)建一個新目錄存放開發(fā)板相關(guān)的代碼,并且添加文件。文件。(3)為開發(fā)板添加新的配置文件)為開發(fā)板添加新的配置文件(4)配置開發(fā)板)配置開發(fā)板(5)編譯)編譯U-Boot(6)添加驅(qū)動或者功能選項。在能夠編譯通過的基礎(chǔ)上,)添加驅(qū)動或者功能選項。在能夠編譯通過的基礎(chǔ)上,還要實現(xiàn)還要實現(xiàn)U-Boot的以太網(wǎng)接口、的以太網(wǎng)接口、Flash擦寫等功能。擦寫
40、等功能。(7)調(diào)試)調(diào)試U-Boot源代碼,直到源代碼,直到U-Boot在開發(fā)板上能夠正在開發(fā)板上能夠正常啟動。常啟動。3.2.4 VIVI 分析 VIVI是韓國是韓國MIZI Research公司為其開發(fā)的公司為其開發(fā)的SMDK2410開發(fā)板編寫的一款開發(fā)板編寫的一款Bootloader。VIVI也也有前面說過的兩種工作模式,啟動加載模式可以在有前面說過的兩種工作模式,啟動加載模式可以在一段時間(這個時間可更改)后自行啟動一段時間(這個時間可更改)后自行啟動Linux內(nèi)內(nèi)核,這是核,這是VIVI的默認模式。在下載模式下,的默認模式。在下載模式下,VIVI為為用戶提供一個命令行接口,通過該接口
41、可以使用用戶提供一個命令行接口,通過該接口可以使用VIVI提供的一些命令,見表提供的一些命令,見表3-3。表3-3 VIVI的命令命令功能Load把二進制文件載入Flash或RAMPart操作MTD分區(qū)信息Param設(shè)置參數(shù)Boot啟動系統(tǒng)Flash管理Flash配置VIVI使用的命令如下:make distclean; make menuconfig; 編 譯 之 前 , 要 先 指 定 M a k e f i l e 文 件 中 的LINUX_INCLUDE_DIR、CROSS_COMPILE和ARM_GCC_LIBS。配置并保存后,使用make命令開始編譯VIVI。 VIVI的代碼包括的
42、代碼包括arch, init, lib, drivers和和include等幾個目錄,共有等幾個目錄,共有200多個文件。多個文件。VIVI包包括下面幾個目錄。括下面幾個目錄。l arch:此目錄包括了所有:此目錄包括了所有VIVI支持的目標(biāo)板支持的目標(biāo)板的子目錄,這里只有的子目錄,這里只有s3c2410目錄。目錄。l drivers:其中包括了引導(dǎo)內(nèi)核需要的設(shè)備的:其中包括了引導(dǎo)內(nèi)核需要的設(shè)備的驅(qū)動程序(驅(qū)動程序(mtd和串口)。和串口)。mtd目錄下的目錄下的maps、nand和和nor三個目錄分別是內(nèi)存映射、三個目錄分別是內(nèi)存映射、NAND Flash驅(qū)動和驅(qū)動和NOR Flash驅(qū)動。
43、驅(qū)動。linit:這個目錄只有:這個目錄只有main.c和和version.c兩個文件。兩個文件。和普通的和普通的C程序一樣,程序一樣,VIVI將從將從main函數(shù)開始執(zhí)函數(shù)開始執(zhí)行。行。llib:一些平臺公共的接口代碼,比如:一些平臺公共的接口代碼,比如time.c里里的的udelay( )和和mdelay( )。linclude:頭文件的公共目錄,其中的:頭文件的公共目錄,其中的s3c2410.h定義了這塊處理器的一些寄存器,以及定義了這塊處理器的一些寄存器,以及NAND Flash的一些寄存器等。的一些寄存器等。platform/smdk2410.h定定義了與開發(fā)板相關(guān)的資源配置參數(shù),我
44、們往往只義了與開發(fā)板相關(guān)的資源配置參數(shù),我們往往只需修改這個文件就可以配置目標(biāo)板的參數(shù),如波需修改這個文件就可以配置目標(biāo)板的參數(shù),如波特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。特率、引導(dǎo)參數(shù)、物理內(nèi)存映射等。 Linux內(nèi)核是指內(nèi)核是指Linux源代碼經(jīng)過編譯和鏈接源代碼經(jīng)過編譯和鏈接生成的映像文件(生成的映像文件(Image)。通常編譯嵌入式)。通常編譯嵌入式Linux內(nèi)核都是通過不同的內(nèi)核都是通過不同的make命令來實現(xiàn)的命令來實現(xiàn)的,它的執(zhí)行配置文件就是通常所說的它的執(zhí)行配置文件就是通常所說的Makefile,而而不同的不同的Makefile又通過互相的依賴關(guān)系構(gòu)成一又通過互相的依賴關(guān)系構(gòu)成一個統(tǒng)
45、一的整體去完成建立依存關(guān)系、建立內(nèi)核個統(tǒng)一的整體去完成建立依存關(guān)系、建立內(nèi)核等功能。等功能。3.3.1 Linux3.3.1 Linux內(nèi)核結(jié)構(gòu)內(nèi)核結(jié)構(gòu)1、進程調(diào)度(、進程調(diào)度(SCHED) 控制進程對控制進程對CPU的訪問。當(dāng)需要選擇下一個進程運的訪問。當(dāng)需要選擇下一個進程運行時,由調(diào)度程序選擇最值得運行的進程??蛇\行進程行時,由調(diào)度程序選擇最值得運行的進程??蛇\行進程實際上是僅等待實際上是僅等待CPU資源的進程,如果某個進程在等待資源的進程,如果某個進程在等待其它資源,則該進程是不可運行進程。其它資源,則該進程是不可運行進程。Linux使用了比使用了比較簡單的基于優(yōu)先級的進程調(diào)度算法選擇新
46、的進程。較簡單的基于優(yōu)先級的進程調(diào)度算法選擇新的進程。2、內(nèi)存管理(、內(nèi)存管理(MM) 允許多個進程安全的共享主內(nèi)存區(qū)域。允許多個進程安全的共享主內(nèi)存區(qū)域。Linux的內(nèi)存管理支持虛擬內(nèi)存,即在計算機中的內(nèi)存管理支持虛擬內(nèi)存,即在計算機中運行的程序,其代碼,數(shù)據(jù),堆棧的總量可以運行的程序,其代碼,數(shù)據(jù),堆棧的總量可以超過實際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使超過實際內(nèi)存的大小,操作系統(tǒng)只是把當(dāng)前使用的程序塊保留在內(nèi)存中,其余的程序塊則保用的程序塊保留在內(nèi)存中,其余的程序塊則保留在磁盤中。必要時,操作系統(tǒng)負責(zé)在磁盤和留在磁盤中。必要時,操作系統(tǒng)負責(zé)在磁盤和內(nèi)存間交換程序塊。內(nèi)存管理從邏輯上分為硬內(nèi)
47、存間交換程序塊。內(nèi)存管理從邏輯上分為硬件無關(guān)部分和硬件有關(guān)部分。硬件無關(guān)部分提件無關(guān)部分和硬件有關(guān)部分。硬件無關(guān)部分提供了進程的映射和邏輯內(nèi)存的對換;硬件相關(guān)供了進程的映射和邏輯內(nèi)存的對換;硬件相關(guān)的部分為內(nèi)存管理硬件提供了虛擬接口。的部分為內(nèi)存管理硬件提供了虛擬接口。3、虛擬文件系統(tǒng)(、虛擬文件系統(tǒng)(VirtualFileSystem,VFS) 隱藏了各種硬件的具體細節(jié),為所有的設(shè)備隱藏了各種硬件的具體細節(jié),為所有的設(shè)備提供了統(tǒng)一的接口,提供了統(tǒng)一的接口,VFS提供了多達數(shù)十種不提供了多達數(shù)十種不同的文件系統(tǒng)。虛擬文件系統(tǒng)可以分為邏輯文同的文件系統(tǒng)。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動
48、程序。邏輯文件系統(tǒng)指件系統(tǒng)和設(shè)備驅(qū)動程序。邏輯文件系統(tǒng)指Linux所支持的文件系統(tǒng),如所支持的文件系統(tǒng),如ext2,fat等,設(shè)備驅(qū)動程等,設(shè)備驅(qū)動程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動程序指為每一種硬件控制器所編寫的設(shè)備驅(qū)動程序模塊。序模塊。4、網(wǎng)絡(luò)接口(、網(wǎng)絡(luò)接口(NET) 提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬提供了對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動程序。網(wǎng)絡(luò)協(xié)議部分負責(zé)實現(xiàn)每一種可能的動程序。網(wǎng)絡(luò)協(xié)議部分負責(zé)實現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動程序負責(zé)與硬件網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動程序負責(zé)與硬件設(shè)
49、備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動程序。設(shè)備驅(qū)動程序。5、 進程間通訊進程間通訊(IPC) 支持進程間各種通信機制。支持進程間各種通信機制。 各個子系統(tǒng)之間的依賴關(guān)系如下:各個子系統(tǒng)之間的依賴關(guān)系如下:l 進程調(diào)度與內(nèi)存管理之間的關(guān)系:這兩進程調(diào)度與內(nèi)存管理之間的關(guān)系:這兩個子系統(tǒng)互相依賴。在多道程序環(huán)境下,個子系統(tǒng)互相依賴。在多道程序環(huán)境下,程序要運行必須為之創(chuàng)建進程,而創(chuàng)建進程序要運行必須為之創(chuàng)建進程,而創(chuàng)建進程的第一件事情,就是將程序和數(shù)據(jù)裝入程的第一件事情,就是將程序和數(shù)據(jù)裝入內(nèi)存。內(nèi)存。l進程間通信與內(nèi)存管理的關(guān)系:進程間通信子進程
50、間通信與內(nèi)存管理的關(guān)系:進程間通信子系統(tǒng)要依賴內(nèi)存管理支持共享內(nèi)存通信機制,這系統(tǒng)要依賴內(nèi)存管理支持共享內(nèi)存通信機制,這種機制允許兩個進程除了擁有自己的私有空間,種機制允許兩個進程除了擁有自己的私有空間,還可以存取共同的內(nèi)存區(qū)域。還可以存取共同的內(nèi)存區(qū)域。l虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口之間的關(guān)系:虛擬文虛擬文件系統(tǒng)與網(wǎng)絡(luò)接口之間的關(guān)系:虛擬文件系統(tǒng)利用網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)件系統(tǒng)利用網(wǎng)絡(luò)接口支持網(wǎng)絡(luò)文件系統(tǒng)(NFS),也也利用內(nèi)存管理支持利用內(nèi)存管理支持RAMDISK設(shè)備。設(shè)備。l內(nèi)存管理與虛擬文件系統(tǒng)之間的關(guān)系:內(nèi)內(nèi)存管理與虛擬文件系統(tǒng)之間的關(guān)系:內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換存管理利用
51、虛擬文件系統(tǒng)支持交換,交換進程進程(swapd)定期由調(diào)度程序調(diào)度,這也是定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進程調(diào)度的唯一原因。當(dāng)內(nèi)存管理依賴于進程調(diào)度的唯一原因。當(dāng)一個進程存取的內(nèi)存映射被換出時,內(nèi)存一個進程存取的內(nèi)存映射被換出時,內(nèi)存管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)管理向文件系統(tǒng)發(fā)出請求,同時,掛起當(dāng)前正在運行的進程。前正在運行的進程。 Linux內(nèi)核的配置系統(tǒng)由內(nèi)核的配置系統(tǒng)由3部分組成:部分組成:(1)Makefile:分布在:分布在Linux內(nèi)核源代碼中的內(nèi)核源代碼中的Makefile,定義,定義Linux內(nèi)核的編譯規(guī)則;內(nèi)核的編譯規(guī)則;(2)配置文件()配置文件(conf
52、ig.in):給用戶提供配置):給用戶提供配置選擇的功能。選擇的功能。(3)配置工具,包括配置命令解釋器(對配置)配置工具,包括配置命令解釋器(對配置腳本中使用的命令進行解釋)和配置用戶界面腳本中使用的命令進行解釋)和配置用戶界面(提供基于字符界面、基于(提供基于字符界面、基于Ncurses圖形界面和圖形界面和基于基于Xwindows圖形界面的用戶配置界面)。圖形界面的用戶配置界面)。內(nèi)核配置方法有以下幾種:內(nèi)核配置方法有以下幾種:(1) make config: 基于文本的最為傳統(tǒng)的配置基于文本的最為傳統(tǒng)的配置界面界面, 進入命令行進入命令行, 可以一行一行的配置可以一行一行的配置,該方法該
53、方法較煩瑣。較煩瑣。(2) make menuconfig: 基于文本菜單的配置界基于文本菜單的配置界面面, 是字符終端下常用的方式。是字符終端下常用的方式。(3) make xconfig: 基于圖形窗口模式的配置界基于圖形窗口模式的配置界面面, Xwindow下推薦使用。下推薦使用。(4) make oldconfig:自動讀入自動讀入“config”配置文配置文件件,并且只要求用戶設(shè)定前次沒有設(shè)定過的選項。并且只要求用戶設(shè)定前次沒有設(shè)定過的選項。3.3.3 3.3.3 內(nèi)核編譯的過程內(nèi)核編譯的過程# make clean#make dep) #make zImage注意:如果在配置內(nèi)核時選擇了對內(nèi)核模塊的支持,還注意:如果在配置內(nèi)核時選擇了對內(nèi)核模塊的支持,還需要使用如下命令單獨地編譯內(nèi)核模塊:需要
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)生態(tài)公園綠化景觀施工監(jiān)理合同4篇
- 2025年度冷鏈?zhǔn)称芳庸せ?#生產(chǎn)線冷鏈?zhǔn)称防滏溑渌头?wù)合同4篇
- 二零二五版美術(shù)館東館館舍租賃消防安全管理合同3篇
- 二零二五年度模特形象代言人合同
- 二零二五年度互聯(lián)網(wǎng)數(shù)據(jù)中心運維人員聘用合同范本4篇
- 二零二五年度安置房買賣合同集錦:安置房維修基金管理規(guī)范3篇
- 二零二五年度應(yīng)急救援駕駛員聘用合同4篇
- 二零二五年度儲煤場租賃及煤炭倉儲設(shè)施租賃與維護合同4篇
- 案例1-西南航空公司的核心競爭力
- 二零二五版農(nóng)業(yè)種植項目科技培訓(xùn)與人才培養(yǎng)合同4篇
- (完整版)高考英語詞匯3500詞(精校版)
- 我的家鄉(xiāng)瓊海
- (2025)專業(yè)技術(shù)人員繼續(xù)教育公需課題庫(附含答案)
- 《互聯(lián)網(wǎng)現(xiàn)狀和發(fā)展》課件
- 【MOOC】計算機組成原理-電子科技大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年上海健康醫(yī)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
- 2024年湖北省武漢市中考語文適應(yīng)性試卷
- 非新生兒破傷風(fēng)診療規(guī)范(2024年版)解讀
- 2024-2030年電炒鍋項目融資商業(yè)計劃書
- EDIFIER漫步者S880使用說明書
- 上海市華東師大二附中2025屆高二數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
評論
0/150
提交評論