




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARMARM LinuxLinux 的移植與應(yīng)用設(shè)計的移植與應(yīng)用設(shè)計 目錄 1.1.概述概述.3 1.1 課題研究的背景和目的.3 1.2 重點研究內(nèi)容 .4 2.2.嵌入式系統(tǒng)嵌入式系統(tǒng) .4 2.1 嵌入式系統(tǒng) .4 2.1.1 嵌入式系統(tǒng)介紹.4 2.1.2 嵌入式操作系統(tǒng).6 2.2 嵌入式 LINUX操作系統(tǒng) .6 2.2.1 Linux 操作系統(tǒng)的特點.7 2.3 嵌入式 ARM 處理器 .8 2.3.1 ARM處理器的種類.8 2.3.2 ARM 處理器的內(nèi)存管理.9 2.3.3Linux 與 ARM 處理器.9 3.3.嵌入式交叉編譯環(huán)境的建立嵌入式交叉編譯環(huán)境的建立 .10
2、3.1 創(chuàng)建嵌入式交叉開發(fā)環(huán)境.10 3.1.1 交叉開發(fā)環(huán)境介紹.10 3.1.2 Linux 交叉編譯環(huán)境的建立.12 4.BOOTLOADER4.BOOTLOADER 的移植的移植 .13 4.1 BOOTLOADER介紹.13 4.1.1 嵌入式 Bootloader.13 4.1.2 Bootloader 的操作模式和啟動流程.15 4.1.4 BootLoader 程序結(jié)構(gòu)框架.17 4.2 U-BOOT的移植.19 5.5.嵌入式嵌入式 LINUXLINUX 內(nèi)核分析與移植內(nèi)核分析與移植.20 5.1 LINUX內(nèi)核介紹.20 5.1.1 嵌入式 Linux 內(nèi)核體系結(jié)構(gòu).20
3、5.2 嵌入式 LINUX內(nèi)核移植 .23 5.2.1 ARM Linux 內(nèi)核的剪裁.23 5.2.2 ARM Linux 內(nèi)核的配置.24 5.2.3 內(nèi)核編譯.25 5.2.4 內(nèi)核下載.26 5.3 LINUX根文件系統(tǒng)的建立 .26 5.4 ARM LINUX系統(tǒng)的建立和啟動.26 6.結(jié)論結(jié)論.28 1.1.概述概述 1.11.1 課題研究的背景和目的課題研究的背景和目的 嵌入式系統(tǒng)發(fā)展的現(xiàn)狀 : 現(xiàn)在嵌入式系統(tǒng)正處于高速發(fā)展階段,未來的幾年里,這種發(fā)展和競爭將越來越 激烈。目前將嵌入式系統(tǒng)的應(yīng)用按照市場領(lǐng)域劃分,可以分為: 消費類電子產(chǎn)品 控制系統(tǒng)和工業(yè)自動化 機器人領(lǐng)域 數(shù)據(jù)和
4、無線通信 隨著信息產(chǎn)業(yè)的發(fā)展和集成電路技術(shù)的進步 ,嵌入式系統(tǒng)已經(jīng)廣泛地應(yīng)用到移 動計算設(shè)備、網(wǎng)絡(luò)設(shè)備、 工控設(shè)備、 信息家電和儀器儀表等領(lǐng)域。傳統(tǒng)的研究方 法是基于硬件的開發(fā)過程 ,開發(fā)人員必須面臨硬件操作、 任務(wù)管理、 事件管理和 中斷處理等問題 ,不能更好地關(guān)注于行業(yè)應(yīng)用的開發(fā) ,從而影響產(chǎn)品的開發(fā)周期和 上市時間。因此有必要針對特定的硬件平臺和實際的應(yīng)用移植操作系統(tǒng)進行研究 , 于是移植操作系統(tǒng)就成為系統(tǒng)開發(fā)的重要環(huán)節(jié)。ARM 系列處理器是當今在國內(nèi)外最 流行的嵌入式處理器之一,面向 ARM 微處理器構(gòu)架的嵌入式操作系統(tǒng)的使用量將在 今后五年持續(xù)增長,眾多的半導體廠商都生產(chǎn)基于 ARM
5、 體系結(jié)構(gòu)的通用微處理芯片, ARM 技術(shù)已經(jīng)在嵌入未處理領(lǐng)域中占據(jù)了它的領(lǐng)先地位。在各種嵌入式操作系統(tǒng)中, Linux 是獲得支持最多的第三大力量,因此在 ARM Linux 的基礎(chǔ)上,很多開發(fā)者將 其移植到了自己的硬件平臺上。 Linux 具有內(nèi)核小、 效率高、 源代碼開放等優(yōu)點 ,廣泛應(yīng)用于嵌入式系統(tǒng)開 發(fā)中。因此,現(xiàn)今 Linux 操作系統(tǒng)近年來 Linux 移植/ARM 在嵌入式領(lǐng)域中發(fā)展很快, 由于其強大的性能和開源免費的特點,越來越受到嵌入式系統(tǒng)開發(fā)商的青睞,信息 家電、網(wǎng)絡(luò)設(shè)備、手持終端等都是嵌入式 Linux 應(yīng)用的廣大市場。隨著 ARM 芯片的 應(yīng)用發(fā)展,未來會有大量基于
6、ARMLinux 內(nèi)核的嵌入式設(shè)備涌現(xiàn)。 1.21.2 重點研究內(nèi)容重點研究內(nèi)容 本文的重點研究內(nèi)容是闡述 ARM Linux 的移植的過程。其中包括嵌入式交叉編 譯環(huán)境的建立,嵌入式 Bootloader 的的移植過程,嵌入式 Linux 內(nèi)核移植。由于嵌 入式系統(tǒng)的硬件一般有很大的局限性,不能在這種嵌入式目標硬件平臺上構(gòu)建 Linux 系統(tǒng)并進行編譯,所以為了進行嵌入式開發(fā)就必須搭建一套完整的開發(fā)環(huán)境。 Bootloader 引導加載程序是系統(tǒng)加電后運行的第一段軟件代碼 ,整個系統(tǒng)的加 載啟動任務(wù)就完全由 BootLoader 來完成。 我們可以初始化硬件設(shè)備、建立內(nèi) 存空間的映射圖,從而
7、將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào) 用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。 2.2.嵌入式系統(tǒng)嵌入式系統(tǒng) 2.12.1 嵌入式系統(tǒng)嵌入式系統(tǒng) .1 嵌入式系統(tǒng)介紹嵌入式系統(tǒng)介紹 目前對嵌入式系統(tǒng)的定義有很多種,目前在多數(shù)的書籍中的定義是:嵌入式系統(tǒng) 是一應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用于應(yīng)用系統(tǒng)對功 能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。一般嵌入式系統(tǒng)是 由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶應(yīng)用程序等幾部分組 成。 嵌嵌入入式式軟軟件件系系統(tǒng)統(tǒng) 應(yīng)應(yīng)用用程程序序 中中間間件件 操操作作系系統(tǒng)統(tǒng) 嵌嵌入入式式硬硬
8、件件系系統(tǒng)統(tǒng) 嵌嵌入入式式處處理理器器 其其它它外外圍圍硬硬件件 圖 2.1 嵌入式系統(tǒng)的組成 i 嵌入式微處理器作為嵌入式系統(tǒng)的核心,嵌入式微處理器與通用的處理器不 同,其到大部分是在為特定用戶群開發(fā)設(shè)計的。為了使嵌入式系統(tǒng)的設(shè)計趨于小型 化,它通常把許多部件都集中在芯片內(nèi)部,這樣可以具有很高的運行率和很高的可 靠性能。 ii 外圍硬件設(shè)備在嵌入式系統(tǒng)中指除了嵌入式微處理器以外的其他用于存儲、 調(diào)試、通訊、顯示等輔助功能的部件。其通常包括存儲器、接口和人機交互設(shè)備三 部分。 iii 嵌入式操作系統(tǒng)可以提高嵌入式系統(tǒng)的功能,方便應(yīng)用軟件的設(shè)計,通常 在大型的嵌入式系統(tǒng)中使用。 iiii 嵌入式
9、系統(tǒng)的應(yīng)用程序通常是針對特定用戶的,基于一定的嵌入式平臺。 嵌入式系統(tǒng)和我們平常的通用計算機系統(tǒng)相比較又具有其自身特點,其特殊性概 括為以下幾點: (1).和 PC 機相比,嵌入式系統(tǒng)本身很少具有大容量的存儲設(shè)備(通常很少帶有 磁盤) ,所以操作系統(tǒng)的可以執(zhí)行的程序一般都是存放在只讀存儲器中(ROM)或者 閃存(Flash)中。 (2).嵌入式系統(tǒng)的軟硬件均是具備高度的可定制性,具有很大的專用性。嵌入式 處理器通常是為特定的應(yīng)用而設(shè)計的,其提供的功能及面對的應(yīng)用過程都是相對固 定及可以提起預知的。所以,嵌入式系統(tǒng)對處理器的的能力要求不是很高。 (3).通常許多的嵌入式系統(tǒng)具有很高的實時性,要求
10、具有對外部突發(fā)事件作出反 應(yīng)的能力。 (4).嵌入式系統(tǒng)沒有在本地系統(tǒng)開發(fā)的能力,要開發(fā)嵌入式系統(tǒng)需要有專門的開 發(fā)工具和開發(fā)環(huán)境。 .2 嵌入式操作系統(tǒng)嵌入式操作系統(tǒng) 嵌入式操作系統(tǒng)包括實時系統(tǒng)和分時系統(tǒng)。 目前嵌入式實時系統(tǒng)占據(jù)嵌入式操作系統(tǒng)的主要部分。所謂的實時性,是指在確 定的時間內(nèi)響應(yīng)一個事件的特性。實時操作系統(tǒng)就 是把實時性作為第一要求,要求 在確定的時間內(nèi),調(diào)度一切可以利用的資源,來完成控制任務(wù),然后才是怎么來提 高系統(tǒng)的使用效率,實時系統(tǒng)的執(zhí)行具有很高的確定性。它有具體可以劃分為硬實 時系統(tǒng)和軟實時系統(tǒng),所謂硬實時系統(tǒng)指在特定的時間內(nèi)沒有完成一個確定的任務(wù), 系
11、統(tǒng)將崩潰;而軟實時系統(tǒng)對時間要求很重要,但在出現(xiàn)超時的時候不會出現(xiàn)致命 的錯誤。 分時系統(tǒng)的要求是追求系統(tǒng)資源總體的利用率,其特點是在于多任務(wù)的管理, 目前在在嵌入式系統(tǒng)中常用幾種操作系統(tǒng): (1).VxWorks VxWorks 是 VindRiver 公司在 1993 年專為實時嵌入式系統(tǒng)而設(shè)計開發(fā)的軟件 操作系統(tǒng)。 (2). uC/OS uC/OS 是一個典型的實時操作系統(tǒng)。其 結(jié)構(gòu)小巧、源代碼公開、 可移植性好、 具有可 搶占的實時內(nèi)核的實時操作系統(tǒng) ,其最多可以管理 60 個任務(wù)。該系統(tǒng)對共享資源提供了 保護機制,一般情況下使用信號量方法。在使用uC/OS 系統(tǒng)時,必須對所開發(fā)的系統(tǒng)
12、了解 清楚才能選擇對于共享資源是否使用信號量。 (3).Windows CE WindowsCE 是從整體上為有限資源的平臺設(shè)計的多線程、多任務(wù)和完整優(yōu)先權(quán)的操作系統(tǒng), 也是微軟公司移動計算平臺、嵌入式的基礎(chǔ),它是一個開放的、可升級的 32 位操作系統(tǒng),是基 于掌上型電腦到專用的工業(yè)控制器的用戶類的電子設(shè)備操作系統(tǒng)。 這個操作系統(tǒng)的基本內(nèi)核至 少需要 200k 的 ROM。 2.22.2 嵌入式嵌入式 LinuxLinux 操作系統(tǒng)操作系統(tǒng) 所謂的嵌入式 Linux 系統(tǒng)就是指 Linux 系統(tǒng)在嵌入式系統(tǒng)中的應(yīng)用,但 Linux 系 統(tǒng)沒有什么嵌入式功能。Linux 系統(tǒng)是完全在互聯(lián)網(wǎng)上產(chǎn)生
13、、發(fā)展和壯大起來的, Linux 操作系統(tǒng)于 1991 年 10 月第一次正式發(fā)布。 .1 LinuxLinux 操作系統(tǒng)的特點操作系統(tǒng)的特點 Linux 從問世至今,已經(jīng)發(fā)展成為一個功能強大而且設(shè)計比較完善的操作系統(tǒng)。 目前 Linux 不僅僅在服務(wù)器領(lǐng)域取得了成功,在嵌入式領(lǐng)域也獲得了很大的發(fā)展。 Linux 的發(fā)展與其自身的許多優(yōu)點有很大的關(guān)系。 (1).源代碼幾乎都是開放的,而且具有很豐富的軟件資源;任何人都可以通過網(wǎng) 絡(luò)得到,并且可以重新修改和發(fā)布。Linux 的軟件資源比較豐富,可以在 Linux 上 找到每個通用程序,并且持續(xù)增加,而且?guī)缀醵际怯性床⑶沂敲赓M的。
14、(2).Linux 可以支持多種體系結(jié)構(gòu),可以在許多的硬件平臺上運行;Linux 能支 持一般的通用計算機,ARM,ALPHA 等多種體系結(jié)構(gòu)。目前由于全球很多的愛好者的 努力,使得 Linux 上的驅(qū)動非常的豐富,所以 Linux 就可以在各種硬件平臺上進行 移植。 (3).其內(nèi)核的功能強大,性能高效穩(wěn)定,且易于修改;由于 Linux 內(nèi)核的小巧靈 活,且易于剪裁,使得 Linux 很適合用于嵌入式系統(tǒng)的開發(fā)。 (4).強大的網(wǎng)絡(luò)通信功能及圖形和文件管理機制;Linux 誕生于網(wǎng)絡(luò),其網(wǎng)絡(luò)功 能非常強大。在圖形系統(tǒng)方面,Linux 有成熟的嵌入式 GUI,可以作為不同的用途。 內(nèi)核(Kern
15、el)是操作系統(tǒng)的內(nèi)部的核心程序,內(nèi)核向外部提供了對 PC 設(shè)備的 核心管理和調(diào)用。Linux 是比較受歡迎的電腦操作系統(tǒng)內(nèi)核。 Linux 內(nèi)核是用 C 語言寫成的,而且符合 POSIX 標準的類 Unix 操作系統(tǒng)。 作為一個實用的操作系統(tǒng),Linux 系統(tǒng)使用了單一內(nèi)核結(jié)構(gòu)。其內(nèi)核結(jié)構(gòu)如圖: 用用戶戶進進程程 系系統(tǒng)統(tǒng)調(diào)調(diào)用用 內(nèi)內(nèi)核核服服務(wù)務(wù)1 1內(nèi)內(nèi)核核服服務(wù)務(wù)2 2 硬硬件件資資源源 圖 2.2 Linux 的單一內(nèi)核結(jié)構(gòu) 目前使用最多的 Linux 內(nèi)核版本是 2.4 和 2.6 內(nèi)核。 2.32.3 嵌入式嵌入式 ARMARM 處理器處理器 2.3.1 ARM 處理器的種類處理
16、器的種類 ARM(Advanced RISC Machines) ,其即可以認為是一個企業(yè)的名字,也可以它 是對一類微處理器的統(tǒng)稱。ARM 公司設(shè)計了很多的高性能、廉價、低能耗的 RISC 處 理器和軟件。其技術(shù)具有高性能、低成本和低能耗的特點。可以適用于多種領(lǐng)域, 例如其在嵌入控制、消費/教育類多媒體、DSP 和移動式應(yīng)用等多個領(lǐng)域中都有應(yīng)用。 ARM 處理器本身是一個低功耗高性能的 32 位 RISC 處理器,但也配備 16 位指令 集。一般來講存儲器比等價 32 位節(jié)省 35的代碼,而且還保留了 32 位系統(tǒng)的所有 優(yōu)勢。CPU 功能上增加 DSP 指令集可以提供增強的 32 位和 16
17、 位算術(shù)運算能力,可 以提高其性能和靈活性。ARM 還提供兩個輔助帶深嵌入處理器的高集成 SoC 器件的 調(diào)試,它們是嵌入式 ICE-RT 邏輯和嵌入式跟蹤宏核(ETMS)系列。 ARM 處理器目前有 ARM7 系列、ARM9 系列、ARM9E 系列、ARM11 系列和 SecurCore 系 列和 IntelXScale 系列?,F(xiàn)在對常用的 ARM7 系列、ARM9 系列、ARM11 系列和 XScale 系列進行一下介紹: (1). ARM7 系列 ARM7 系列處理器是低功耗的 32 位 RISC 處理器,其廣泛的應(yīng)用于對功耗和成本 要求比較低的消費產(chǎn)品。它的最高主頻可以道道 130MI
18、PS。其特點有:采用三級流 水線,采用了 ARM V4 指令集,支持 16 位的 Thumb 指令集。 ARM7 系列包括一下幾種類型的核:ARM7TDMI、ARM7TDMI-S、ARM7EJ-S 和 ARM7720T。其中 ARM7TDMI 是一款使用比較廣泛的 ARM 處理器核,其中的 T 標識 16 位的 Thumb 指令集,D 表示支持片上調(diào)試,M 表示增強型內(nèi)嵌硬件乘法器,I 表示嵌 入式 ICE 硬件提供片上斷點核調(diào)試點支持。ARM720T 支持全功能的內(nèi)存管理單元 MMU,適用于低共和和體積作為關(guān)鍵的應(yīng)用。 (2).ARM9 系列 ARM9 系列處理器核包括 ARM9TDMI、R
19、M920T、RM940T 等類型,主要用于適應(yīng)不同 的市場需求。其特點有:5 級流水線,執(zhí)行指令的效率高,采用哈佛體系結(jié)構(gòu),全 功能 MMU 支持,可以支持 WinCE、Linux、Palm OS 等操作系統(tǒng),單一的 32 位 AMBA 總線接口。 (3). ARM11 系列 ARM11 系列的處理器主要是針對于高性能應(yīng)用而設(shè)計,其特點有:執(zhí)行 ARM V6 架構(gòu)指令集,采用 8 級流水線,增加了多媒體處理指令單元擴展單指令多數(shù)據(jù)流 (SIMD),增加了快速浮點運算和向量浮點運算。 (4).XScale 系列 Intel XScale 核采用了 ARMV5TE 指令集。采用了 XScale 核
20、的處理器用于手持 和無線設(shè)備的 PXA 系列處理器和用于網(wǎng)絡(luò)處理的 IXP 系列處理器。其特點是:采用 7-8 級的超級流水線結(jié)構(gòu)帶來的高性能核超級低功耗,支持多媒體處理技術(shù),采用 了分離的 32KB 指令快存 I-Cache 和 32KB 數(shù)據(jù)快存 D-Cache,使用了微小型指令快 存,動態(tài)電源管理技術(shù)。 .2 ARMARM 處理器的內(nèi)存管理處理器的內(nèi)存管理 一般來說,處理器地內(nèi)存管理是由其內(nèi)部地 MMU 單元來實現(xiàn)地。MMU 地功能就是 實現(xiàn)虛擬地址到物理地址地轉(zhuǎn)換(MMU 功能)和對內(nèi)存訪問權(quán)限地控制(MPU 內(nèi)存保護 單元功能)。在 ARM 存儲系統(tǒng)中,使用內(nèi)存管理單
21、元 MMU 實現(xiàn)虛擬地址到實際物理地 址地映射。利用 MMU,可把 SDRAM 地地址完全映射到 0 x0 起始地一片連續(xù)地址空間, 而把原來占據(jù)這片空間地 FLASH 或者 ROM 映射到其他不相沖突地存儲空間位置。例 如,F(xiàn)LASH 地地址從 Ox-OxOOffffff,而 SDRAM 地地址范圍是 OxO-Ox31ffffff,則 可把 SDRAM 地址映射為 Ox-Oxlfffffff 而 FLASH 地地址可以映射到 Oxg- Ox90ffffff(此處地址空間為空閑,未被占用)。映射完成后,如果處理器發(fā)生異常, 假設(shè)為工 RQ 中斷,PC 指針指向 Ox18 處地地址,而這個時候
22、PC 實際上是從位于物 理地址地 Ox3O 處讀取指令。通過 M 初 U 地映射,則可實現(xiàn)程序完全運行在 SDRAM 之 中。在實際地應(yīng)用中,可能會把兩片不連續(xù)地物理地址空間分配給 SDRAM。而在操 作系統(tǒng)中,習慣于把 SDRAM 地空間連續(xù)起來,方便內(nèi)存管理,且應(yīng)用程序申請大塊 地內(nèi)存時,操作系統(tǒng)內(nèi)核也可方便地分配,通過 MMU 可實現(xiàn)不連續(xù)地物理地址空間 映射為連續(xù)地虛擬地址空間。操作系統(tǒng)內(nèi)核或者一些比較關(guān)鍵地代碼,一般是不希 望被用戶應(yīng)用程序訪問。通過 MMU 可以控制地址空間地訪問權(quán)限,從而保護這些代 碼不被破壞。 2.3.3Linux2.3.3Linux 與與 ARMARM 處理器
23、處理器 在 32 位的 RISC 處理器領(lǐng)域,基于 ARM 的結(jié)構(gòu)體系在嵌入式系統(tǒng)中發(fā)揮了重要 作用,因此 ARM 處理器和嵌入式 Linux 的結(jié)合也就變的越來越緊密了,而且目前在 嵌入式領(lǐng)域得到了很多的應(yīng)用。這與 Linux 的本身特點有很大的關(guān)系。 不同特征的 Linux 都是在某一個 CPU 架構(gòu)體系上運行,而 ARM 體系結(jié)構(gòu)經(jīng)過這 么多年的發(fā)展也產(chǎn)生了很多的版本,Linux 對于已在 ARM 規(guī)劃中獲得新定義的特征 都有相應(yīng)的支持。ARM 體系的處理器按照不同的目標應(yīng)用分類有著不同的特點和發(fā) 展方向,基于與操作系統(tǒng)結(jié)合的特點考慮,可以根據(jù)有無內(nèi)存管理單元(MMU)把 CPU 分成兩
24、類,即帶 MMU 功能的處理器和不帶 MMU 功能的處理器。 Linux 作為一種基于 X86 平臺發(fā)展過來的操作系統(tǒng),是一種典型的應(yīng)用操作系統(tǒng), 在硬件上需要 MMU 的支持,所以必須在包含 MMU 的 ARM 處理器上才能運行 Linux 系 統(tǒng)。比如現(xiàn)在的 ARM720T、ARM920T、和 ARM926EJ。另外一些常用的處理器如 ARM7TDMI 系列因為不具有 MMU,所以不支持標準的 Linux。由于不帶有 MMU 的處理 器特別適合于深度嵌入的特點,在嵌入式系統(tǒng)應(yīng)用非常廣泛。為了適應(yīng)這種需求, 誕生了 uClinux。uClinux 是開放源代碼的嵌入式 Linux 系統(tǒng),它設(shè)
25、計的目標平臺式 為那些沒有內(nèi)存單元的微處理芯片。為了滿足嵌入式的要求,uClinux 改寫和裁減 了大量 Linux 內(nèi)核代碼,所以 uClinux 得內(nèi)核遠小于標準的 Linux 內(nèi)核,但仍然保 持了 Linux 操作系統(tǒng)的絕大部分特性,包括穩(wěn)定強大的網(wǎng)絡(luò)功能及出色的文件系統(tǒng) 的支持。 目前,在 Linux2.6 內(nèi)核版本加強了對無 MMU 的支持,Linux2.6 內(nèi)核擴展多嵌入 式平臺的支持得一個主要途徑就是把 uClinux 得大部分并入主流的內(nèi)核功能中,這 使得 ARM 與 Linux 的關(guān)系更加緊密。 3.3.嵌入式交叉編譯環(huán)境的建立嵌入式交叉編譯環(huán)境的建立 3.13.1 創(chuàng)建嵌入
26、式交叉開發(fā)環(huán)境創(chuàng)建嵌入式交叉開發(fā)環(huán)境 .1 交叉開發(fā)環(huán)境介紹交叉開發(fā)環(huán)境介紹 為了進行嵌入式開發(fā)就必須搭建一套完整的開發(fā)環(huán)境。由于嵌入式系統(tǒng)的硬件 一般有很大的局限性,一般其處理器頻率很低,存儲空間空間小,或者沒有鍵盤等 外部設(shè)備,所以一般不能在這種嵌入式目標硬件平臺上構(gòu)建 Linux 系統(tǒng)并進行編譯。 所以需要為特定的目標板專門定制 Linux 操作系統(tǒng),這樣開發(fā)者就提出了交叉開發(fā) 環(huán)境模型。 內(nèi)內(nèi)核核映映像像 根根文文件件系系統(tǒng)統(tǒng) 主主機機(H HO OS ST T) ) 內(nèi)內(nèi)核核映映像像 目目標標板板(T TA AR RG GE ET T) ) 掛掛接接N NF FS S
27、文文件件系系統(tǒng)統(tǒng) 下下載載內(nèi)內(nèi)核核映映像像 連連接接 圖 3.1 嵌入式交叉開發(fā)環(huán)境模型 在開發(fā)主機上,可以安裝開發(fā)工具,對目標板的 Linux 引導程序、內(nèi)核、和文 件系統(tǒng)進行編輯和編譯,然后在目標板上進行運行,開發(fā)主機也是工作站,可以給 開發(fā)者提供開發(fā)工具;同時這種在主機環(huán)境下開發(fā),在目標板上運行的開發(fā)模式叫 做交叉開發(fā)。其中在嵌入式開發(fā)過程中的一項重要技術(shù)是交叉編譯,它的主要特點 是在某機器中執(zhí)行的程序代碼不是在本機編譯生成,而是由在另外一臺機器編譯生 成。對于這種交叉開發(fā)方式,開發(fā)者可以一邊在熟悉的主機環(huán)境下進行程序開發(fā), 另外又可以真實的在目標板系統(tǒng)上運行調(diào)試程序,可以避免受到目標板
28、硬件的限制。 要建立起來交叉開發(fā)環(huán)境,下一步需要在主機和目標板之間建立連接,這樣才 能實現(xiàn)通訊和傳輸文件等功能。 目標板和主機的鏈接:通??梢允褂么凇⒁蕴W(wǎng)接口、USB 接口以及 JTAG 等 連接方式。目前使用最多的是串口和 USB 接口 ,下面對這兩種接口分別介紹一下: 1、串行通訊接口 串行通訊接口通常用 9 針和 25 針串口,當目標板和主機的通訊距離較近時可以 用電纜線直接連接標準 RS232C 端口;如果距離較遠,就采用 RS422 或者 RS485 接口, 而且還另外需要調(diào)制解調(diào)器。其中比較常用的三線制接法,地、接受數(shù)據(jù)和發(fā)送數(shù) 據(jù)三角相連??梢酝ㄟ^串口作為控制臺,向目標板發(fā)送
29、命令,顯示信息;也可以通 過串口傳送文件;而且通過串口可以調(diào)試內(nèi)核及程序。 但是這種連接方式通訊速率比較慢,不適合大數(shù)據(jù)量傳輸。 2、通過 USB 接口進行連接。USB(Universal Serial Bus)接口支持熱插拔, 具有即插即用的優(yōu)點,最多可以連接 127 臺外設(shè)。該接口目前有兩個規(guī)范,即 USB1.1 和 USB2.0 。USB1.1 最高的傳輸速率為 12Mbps,而 USB2.0 的傳輸速率達到了 480Mbps,可以滿足大多數(shù)外設(shè)的速率要求。 文件傳輸:主機端編譯的 Linux 內(nèi)核影像必須下載到開發(fā)板上執(zhí)行,通常是目 標板的引導程序負責把主機端的影像文件下載到內(nèi)存中,本
30、設(shè)計的傳輸方式通過 USB 接口的傳輸方式,主機端為主設(shè)備端,目標板為從設(shè)備端。 如果在每一次在開發(fā)板上測試程序時都需要燒寫 FLASH 的話,將是一件十分麻 煩的事情,對于我們的嵌入式 Linux 開發(fā)來說需要重新生成根文件系統(tǒng)鏡像才能燒 錄。通過 NFS 方式,即將主機的硬盤作為開發(fā)板的網(wǎng)絡(luò)硬盤來使用。 NFS(Network File System)即網(wǎng)絡(luò)文件系統(tǒng)。其最早是由 SUN 開發(fā)的文件系 統(tǒng)。NFS 允許一個系統(tǒng)在網(wǎng)路上共享目錄和文件。通過使用 NFS,用戶和程序可以像 訪問本地文件一樣來訪問遠端系統(tǒng)上的文件,極大的簡化了信息共享。Linux 系統(tǒng) 支持 NFS,并且可以配置啟
31、動 NFS 網(wǎng)絡(luò)服務(wù)。 .2 LinuxLinux 交叉編譯環(huán)境的建立交叉編譯環(huán)境的建立 通過建立的交叉編譯環(huán)境可以使用宿主機對目標板進行調(diào)試。1inux 下的交叉編 譯環(huán)境最主要包括以下幾個部分:針對目標系統(tǒng)的二進制工具 binutils、針對目標 系統(tǒng)的編譯器 gcc 以及目標系統(tǒng)的標準 c 庫 glibc。 其中的 binutils 是 GNU 工具之一,它是處理和維護二進制代碼程序的工具,它 包括連接器、匯編器等目標程序處理的工具。gcc 是編譯工具,使用來編譯內(nèi)核代 碼的工具,它能夠支持匯編語言和 C/C+程序的編譯,生成 ARM 代碼。Glibc 是應(yīng)用 程序編程的
32、函數(shù)庫軟件包。 Linux交叉編譯環(huán)境的生成步驟包括下面幾個步驟: (1) 取得binutils、gcc 、glibc 的源碼。 (2) 配置并編譯binutils ,得到下一步需要用到的匯編器和連接器。 (3) 配置并編譯gcc 源碼,生成gcc 編譯器。 (4) 配置glibc 編譯生成glibc 的c 庫函數(shù)。 (5) 在此配置并編譯gcc 源代碼,生成其他語言的編譯器如:c + + 等。 Binutils、GCC 和 glibc 的版本匹配比較麻煩,新的版本雖然功能強大,但是 最新的版本有可能存在 BUG,這就需要不斷的修正。對于 glibc 的版本需要跟 Linux 內(nèi)核版本號相匹配
33、。在編譯 glibc 時,要用到 Linux 內(nèi)核頭文件,在內(nèi)核源碼 include 目錄下。 b bi in nu ut ti il ls s源源碼碼 本本地地編編譯譯B Bi in nu ut ti il ls s工工具具 內(nèi)內(nèi)核核源源碼碼G Gl li ib bc c源源碼碼 G Gc cc c源源碼碼 本本地地編編譯譯輔輔助助編編譯譯器器G Gl li ib bc c庫庫 本本地地編編譯譯 完完整整的的G GC CC C編編譯譯 器器 圖 3.2 交叉工具編譯流程 把Binutils、GCC和glibc工具通過上述流程編譯,然后安裝在宿主機上,這樣 一個完整的嵌入式ARM的交叉編譯環(huán)境
34、就建立起來了。 4.Bootloader4.Bootloader 的移植的移植 4.14.1 BootloaderBootloader 介紹介紹 .1 嵌入式嵌入式 BootloaderBootloader 引導加載程序是系統(tǒng)加電后運行的第一段軟件代碼。和通用的 PC 機中的引 導加載程序為 BIOS 相類似。而在嵌入式系統(tǒng) 中,通常并沒有像 BIOS 那樣的固 件程序,因此整個系統(tǒng)的加載啟動任務(wù)就完全由BootLoader 來完成。 簡單地說,BootLoader 就是在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。 通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而
35、將系 統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確 的環(huán)境。 嵌入式Linux系統(tǒng)離不開的引導程序是Bootloader。Bootloader是在Linux運行 之前執(zhí)行的一小段程序。 B Bo oo ot tL Lo oa ad de er r參參數(shù)數(shù)內(nèi)內(nèi)核核根根文文件件系系統(tǒng)統(tǒng) 圖4.2 BootLoader在系統(tǒng)中所處的位置 通過它可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表, 將系統(tǒng)的軟硬件環(huán)境設(shè) 到一個合適的狀態(tài), 同時將操作系統(tǒng)內(nèi)核本身從ROM、FLASH載人到RAM中并調(diào)用操作 系統(tǒng)內(nèi)核。Bootloader的主要完成工作如下: 設(shè)設(shè)備備初初始始化化 啟啟動
36、動延延時時時時 串串口口是是否否接接受受F Fl la as sh h代代 碼碼段段的的請請求求 延延時時是是否否繼繼續(xù)續(xù)? N NO O 反反饋饋確確認認信信息息 接接收收數(shù)數(shù)據(jù)據(jù) F Fl la as sh h編編程程/ /校校 驗驗 反反饋饋校校驗驗數(shù)數(shù)據(jù)據(jù) 是是否否完完成成?跳跳轉(zhuǎn)轉(zhuǎn)到到正正常常的的程程序序代代碼碼 Y YE ES S N NO O Y YE ES S Y YE ES S N NO O 圖4.3 Bootloader的主要工作 1.建立和初始化SDRAM,探測所有的SDRAM位置以及大小并進行初始化。 2.Bootloader初始化并啟動一個串口,讓內(nèi)核的串口驅(qū)動自然探
37、測哪個串口作 為內(nèi)核控制臺。 3.檢測機器的系統(tǒng)結(jié)構(gòu),Bootloader探測器類型傳遞給內(nèi)核MACH_TYPE值。 4.Bootloader創(chuàng)建和初始化內(nèi)核的tagged list,傳遞系統(tǒng)內(nèi)存的大小和位置, 以及根系統(tǒng)的位置。 5.調(diào)用內(nèi)核鏡像。可以從Flash調(diào)用內(nèi)核,也可以從RAM中調(diào)用內(nèi)核。 對于嵌入式系統(tǒng)來說,Bootloader是基于特定的硬件平臺來實現(xiàn)的,所以不同 的處理器架構(gòu)都會有不同的Bootloader。 .2 BootloaderBootloader 的操作模式的操作模式和啟動流程和啟動流程 大多數(shù)Bootloader都包含兩種不同的操作模式,分別是啟動
38、加載模式和下載模 式,這種加載模式對于開發(fā)人員有具體的意義。不過從最終用戶的角度來看, Bootloader的作用就是加載操作系統(tǒng)。 1.啟動加載模式:這種模式也被稱為自主模式,即Bootloader從宿主機的摸個 固態(tài)存儲設(shè)備上將操作系統(tǒng)加載到RAM中運行,整個過程中并沒有用戶介入。這種模 式是Bootloader的正常工作模式,所以在嵌入式產(chǎn)品發(fā)布時,必須在這種模式下工 作。 2.下載模式:在這種模式下,目標機上的Bootloader將通過串口連接或通過網(wǎng) 絡(luò)連接等手段從主機上下載文件,例如下載應(yīng)用程序、數(shù)據(jù)文件、內(nèi)核映像等。從 主機下載的文件一般首先被Bootloader保存到目標板的R
39、AM中,這種Bootloader的工 作模式用在系統(tǒng)更新時。工作于這種模式下的Bootloader通常都會向它的終端用戶 提供一個簡單的命令行接口。 Bootloader的啟動流程主要包括以下三種方式: 網(wǎng)絡(luò)啟動方式:網(wǎng)絡(luò)啟動方式: 在這種啟動模式下開發(fā)板需要配置較大的存儲介質(zhì),但在這種啟動模式下,需 要把 Bootloader 安裝到目標板上的 EPROM 或者 Flash 中。Bootloader 通過以太網(wǎng) 的接口遠程下載 Linux 內(nèi)核映像或文件系統(tǒng)。 還要在服務(wù)器上配置啟動相關(guān)網(wǎng)絡(luò)服 務(wù)。Bootloader 下載文件一般都使用 TFTP 網(wǎng)絡(luò)協(xié)議,還可以通過 DHCP 的方式動態(tài)
40、 配置 IP 地址。TFTP 服務(wù)為 Bootloader 的客戶端提供了下載的功能,把內(nèi)核映像和 其它文件放在/tftpboot 目錄下,這樣就可以通過 TFTP 網(wǎng)絡(luò)協(xié)議遠程下載內(nèi)核映像 到內(nèi)存。 內(nèi)內(nèi)核核映映像像 目目標標板板文文件件系系統(tǒng)統(tǒng) 主主機機 啟啟動動內(nèi)內(nèi)核核 目目標標板板 B BO OI IS S B BO OO OT TP P T TF FT TP P N NF FS S 以以太太網(wǎng)網(wǎng)連連接接 圖 4.3 Bootloader 的網(wǎng)絡(luò)啟動 磁盤啟動方式磁盤啟動方式 一般都使用 BIOS 引導,并且使用磁盤作為存儲介質(zhì)??梢栽O(shè)置 BIOS 從軟盤、光 盤或者某塊硬盤啟動。但是
41、 BIOS 并不直接引導操作系統(tǒng),所以必須在硬盤引導區(qū)需 要一個 Bootloader。用這個 Bootloader 就可以從磁盤文件系統(tǒng)中把操作系統(tǒng)引導 起來。 在傳統(tǒng) Linux 系統(tǒng)有 LILO 和 GRUB 兩種 Bootloader 引導。除了傳統(tǒng)上的引導程 序外,還有其他的一些引導程序,如 LoadLin 可以從 DOS 下啟動 Linux。 FlashFlash啟動方式啟動方式 大多數(shù)的嵌入式系統(tǒng)上一般都使用 Flash 存儲介質(zhì)。其中 Flash 包括 NOR Flash、NAND Flash 等其它半導體盤,其中,NOR Flash(線性 Flash)的使用最為 廣泛。NOR
42、 Flash 可以支持隨機訪問,因此代碼可以在 Flash 上直接執(zhí)行。而且, ;inux 內(nèi)核映像和 RAMDIASK 也能存儲在 Flash 上,通常需要把 Flash 分區(qū)進行使用。 而 Bootloader 一般放在 Flash 的頂端或者底端,其中這要根據(jù)對處理器的復位向量 設(shè)置。 要確保使 Bootloader 的入口位于處理器上電執(zhí)行第一條指令的位置。 Bootloader 一般是直接讀寫對應(yīng)的偏移地址。到了 Linux 內(nèi)核的空間可以配置 成 MTD 設(shè)備來訪問 Flash 區(qū)。除了 NOR Flash 外,還有 NAND Flash、compact Flash、DiskONC
43、HIP 等。這些芯片具有存儲空間大,價格低等特點。但是這些芯片 一般都是通過專用控制器的 I/O 來方式來訪問,不能進行隨機訪問。因此在這些芯 片上,需要配置專用的引導程序,這種引導程序起始一段代碼就把整個引導程序復 制到 RAM 中運行,從而實現(xiàn)啟動,這和從磁盤啟動相類似 .4 BootLoaderBootLoader 程序結(jié)構(gòu)框架程序結(jié)構(gòu)框架 BootLoader 是依賴于硬件而實現(xiàn)的,特別是在嵌入式領(lǐng)域,為嵌入 式系統(tǒng)建 立一個通用的 BootLoader 是很困難的。但是可以歸納一些通用的概念出來,以便簡 化特定 BootLoader 的設(shè)計與實現(xiàn)。 目前大多數(shù) Boo
44、t Loader 都分為第一階段和第二階段兩大部分:stage 1 和 stage 2。 依賴于 CPU 體系結(jié)構(gòu)的代碼,比如設(shè)備初始化代碼等,通常都放在 stage 1 中, 并且通常都用 ARM 匯編語言來實現(xiàn),以達到精簡的目的。而 stage 2 則通常用 C 語 言來實現(xiàn),這樣可以實現(xiàn)一些更加復雜的功能,而且代碼會具有更好的可讀性和可 移植性。 BootLoader 的的 stage 1 和 stage 2 的執(zhí)行通常包括一下幾個步驟。如下表: 執(zhí)行階段 Stage 1Stage 2 步驟一對硬件設(shè)備的初始化對本階段要使用的硬件設(shè)備進行初始化 步驟二為 stage 2 準備 RAM 空
45、間對內(nèi)存映射(memory map)進行檢測 步驟三拷貝 stage 2 到 RAM 空間將內(nèi)核映像和根文件系統(tǒng)映像從 Flash 中 讀到 RAM 空間 步驟四設(shè)置堆??臻g為內(nèi)核設(shè)置啟動的參數(shù) 步驟五跳轉(zhuǎn)到 stage 2 的入口點調(diào)用內(nèi)核 BootLoaderBootLoader StageStage 1 1 1、對硬件設(shè)備的初始化 這是 Bootloader 剛開始就要執(zhí)行的操作,主要是為 stage 2 的執(zhí)行,以及對以 后的內(nèi)核的執(zhí)行準備好硬件環(huán)境。它通常包括以下幾個步驟: 屏蔽所有的中斷,為中斷提供服務(wù)是操作系統(tǒng)設(shè)備驅(qū)動所負責,所以在 Bootloader 的執(zhí)行全過程可以不必響應(yīng)
46、任何中斷。對屏蔽的中斷可以通過寫 CPU 的 中斷屏蔽寄存器來完成。 對 CPU 的速度和時鐘頻率進行設(shè)置 SDRAM 初始化;包括正確的設(shè)置系統(tǒng)內(nèi)存控制器的功能寄存器及各內(nèi)存控制器的 寄存器等 初始化 LED;通常,通過 GPIO 來驅(qū)動 LED,其目的是表明系統(tǒng)的狀態(tài)還是正確還 是錯誤。如果目標板是沒有 LED,那么也就可以通過初始化 UART 向串口打印 Bootloader 的 LoGO 字符信息來完成這一點。 關(guān)閉 CPU 內(nèi)部指令和數(shù)據(jù) Cache 2.為為 stage 2 準備 RAM 空間 為了取得更快的執(zhí)行速度,通常需要把 stage 2 加載到 RAM 空間中來執(zhí)行,因此必
47、 須為加載 Bootloader 的 stage 2 準備一段 RAM 空間。 3.拷貝 stage 2 到 RAM 中 4.設(shè)置堆棧指針 SP 堆棧指針的設(shè)置是為了執(zhí)行 C 語言代碼所在準備。 通過這幾個步驟的執(zhí)行后系統(tǒng)的物理內(nèi)存布局如下圖所示: S St ta ag ge e 1 1為為s st ta ag ge e 2 2可可以以運運行行 的的映映像像準準備備的的S SD DR RA AM M空空間間 B Bo oo ot t F Fi il le e S Sy ys st te em m L Li in nu ux x內(nèi)內(nèi)核核 B Bo oo ot tl lo oa ad de er
48、r s st ta ag ge e2 2 B Bo oo ot tl lo oa ad de er r s st ta ag ge e1 1 S SD DR RA AM M 地地址址空空 間間 F Fl la as sh h 地地址址空空 間間 圖 4.3 可執(zhí)行映像被拷貝到 RAM 空間的系統(tǒng)內(nèi)存布局 5.跳轉(zhuǎn)到 stage 2 的 C 入口節(jié)點 在一切準備就緒后,就可以跳轉(zhuǎn)到 stage 2 的執(zhí)行了。 下圖為 U-Boot 的第一階段的初始化過程: 入入口口 R Re eB Bo oo ot t 復復位位 把把U U- -B BO OO OT T復復制制到到S SD DR RA AM M
49、 復復制制中中斷斷向向量量表表到到S SD DR RA AM M 設(shè)設(shè)置置堆堆棧棧 跳跳轉(zhuǎn)轉(zhuǎn)到到s st ta ag ge e2 2入入口口 初初始始化化C CP PU U關(guān)關(guān)鍵鍵 寄寄存存器器 初初始始化化內(nèi)內(nèi)存存控控 制制 N N Y Y 圖 4.4 U-Boot 的初始化過程 BootloaderBootloader stage2stage2 1.對本階段要要使用的硬件設(shè)備進行初始化 這些被初始化的硬件設(shè)備通常包括 至少初始化一個串口,方便與最終端 I/O 輸出信息 初始化計時器等 2. 對內(nèi)存映射(memory map)進行檢測 內(nèi)存映射是指整個物理內(nèi)存地址空間中那些被分配用來尋址系統(tǒng)
50、的 SDRAM 單元。 3.加載內(nèi)核映像和根文件系統(tǒng)映像 通常包括以下兩個方面: 內(nèi)核映像所占用的內(nèi)存范圍 根文件系統(tǒng)所占用的內(nèi)存范圍。在規(guī)劃內(nèi)存占用的布局時,主要是對基地址和 映像大小兩個方面 4.設(shè)置內(nèi)核的啟動參數(shù) 5.調(diào)用內(nèi)核 4.24.2 U-BootU-Boot 的移植的移植 每一種 CPU 體系結(jié)構(gòu)都有自己的 Bootloader,部分 Bootloader 也支持多種體 系結(jié)構(gòu)的 CPU。U-Boot 支持多種體系結(jié)構(gòu)的處理器。U-Boot 能夠支持 PowerPC、ARM、X86、MIPS 等體系結(jié)構(gòu)的上百種開發(fā)板, 已經(jīng)成為功能最多、靈活 性最強并且開發(fā)最積極的開放源碼 Bo
51、otloader。因為 Bootloader 是依賴硬件平臺 的,所以在新的開發(fā)板上需要移植 U-Boot 程序。 5.5.嵌入式嵌入式 LinuxLinux 內(nèi)核分析與移植內(nèi)核分析與移植 5.15.1 LinuxLinux 內(nèi)核介紹內(nèi)核介紹 .1 嵌入式嵌入式 LinuxLinux 內(nèi)核體系結(jié)構(gòu)內(nèi)核體系結(jié)構(gòu) Linux 內(nèi)核是 Linux 系統(tǒng)的心臟。它實現(xiàn)了操作系統(tǒng)五大主要功能模塊:進程管 理、內(nèi)存管理、文件系統(tǒng)、設(shè)備控制和網(wǎng)絡(luò)。其功能模塊圖如下: 進進程程管管理理文文件件系系統(tǒng)統(tǒng)網(wǎng)網(wǎng)絡(luò)絡(luò)設(shè)設(shè)備備控控制制內(nèi)內(nèi)存存管管理理 系系統(tǒng)統(tǒng)調(diào)調(diào)用用接接口口 多多任任務(wù)務(wù)、并并發(fā)發(fā)虛虛
52、擬擬內(nèi)內(nèi)存存 文文件件和和目目 錄錄 設(shè)設(shè)備備訪訪 問問 互互聯(lián)聯(lián)性性 體體系系架架 構(gòu)構(gòu)和和相相 關(guān)關(guān)代代碼碼 網(wǎng)網(wǎng)絡(luò)絡(luò)子子 系系統(tǒng)統(tǒng) 字字符符攝攝 設(shè)設(shè)備備 文文件件系系 統(tǒng)統(tǒng)類類型型 內(nèi)內(nèi)存存管管 理理 塊塊設(shè)設(shè)備備 C CP PU U 內(nèi)內(nèi)存存磁磁盤盤等等設(shè)設(shè)備備控控制制臺臺等等網(wǎng)網(wǎng)絡(luò)絡(luò)接接口口 內(nèi)內(nèi)核核子子系系統(tǒng)統(tǒng) 實實現(xiàn)現(xiàn)的的功功能能 軟軟件件支支持持 硬硬件件 圖 5.1 Linux 內(nèi)核功能模塊圖 進程管理模塊負責對進程的創(chuàng)建和終止,并且處理它們和外部設(shè)備的聯(lián)系。對整 個 Linux 系統(tǒng)功能來說,不同進程間的通訊是基本的也是有內(nèi)核來處理的。另外, 調(diào)度器是整個操作系統(tǒng)中關(guān)鍵的
53、例程,是進程管理的一部分。 內(nèi)存管理模塊的作用是確保所有的進程能夠安全的共享計算機主內(nèi)存區(qū),此外, 內(nèi)存管理模塊還支持虛擬內(nèi)存管理方式,使得 Linux 支持進程使用比較實際內(nèi)存空 間更多的內(nèi)存容,并可以利用文件系統(tǒng)把暫時不用的內(nèi)存數(shù)據(jù)塊交換到外部存儲設(shè) 備中去,等到用到時在交換回來。文件系統(tǒng)模塊用于支持對外部設(shè)備驅(qū)動和存儲。 網(wǎng)絡(luò)模塊提供對多種網(wǎng)絡(luò)通信標準的訪問。 Linux 操作系統(tǒng)內(nèi)核非常龐大,其整個代碼分布如圖所示: n ne et ta ar rc ch hf fs sd dr ri iv ve er rs s i in nc cl lu ud de e e ex xt t2 2 v
54、 vi id de e c ch ha ar r i ip pc cm mm mk ke er rn ne el li in ni it t a ar rm m i i3 38 86 6 v vf fa at t8 80 02 2 I Ip pv v 4 4 圖 5.2 Linux 的內(nèi)核分布 1.arch 目錄 Linux 系統(tǒng)能夠支持眾多的平臺式因為其內(nèi)核把源程序代碼清晰地劃分為體系 結(jié)構(gòu)相關(guān)部分和體系結(jié)構(gòu)無關(guān)部分。Arch 目錄包含了體現(xiàn)結(jié)構(gòu)相關(guān)部分的內(nèi)核代碼。 其中的每個目錄都代表一種硬件平臺,而且對于每個平臺都必須包含以下幾個目錄。 boot:包括啟動內(nèi)核所用的部分或全部平臺特有代碼
55、 kernel:存放支持體系結(jié)構(gòu)特有的特征實現(xiàn)(比如信號處理和 SMP) lib:存放高速的特有的體系結(jié)構(gòu)通用函數(shù)實現(xiàn) mm:存放體系結(jié)構(gòu)特有的內(nèi)存管理程序的實現(xiàn) math-emu:模擬 FPU 的代碼。對于 ARM 處理器來說,此目錄用 mach-xxx 代替。 所以說,移植 Linux 內(nèi)核的重點就是移植 arch 下的文件。 2.drivers 目錄。 該目錄下保存了設(shè)備的驅(qū)動程序。它占用了內(nèi)核的大部分代碼。而有些驅(qū)動程 序是和硬件平臺無關(guān),有些是相關(guān)的。 3.fs 目錄。 該目錄下列出了 Linux 系統(tǒng)所支持的文件系統(tǒng)。目前 Linux 已經(jīng)支持包括 ntfs 在內(nèi)的多種文件系統(tǒng)。一
56、般說,文件系統(tǒng)是與硬件平臺無關(guān)的。 4.include 目錄。 在該目錄下包括了編譯核心所需要的大部分頭文件。但是不同的平臺需要的頭 文件也不相同,所以該目錄也和 arch 一樣,按平臺劃分了多個子目錄 5.init 目錄。 Init 目錄下包含了 Linux 核心的初始代碼,有 main.c 和 version.c 兩個文件。 6.ipc 目錄。 Ipc 目錄包含了核心進程間的通訊代碼。 7.kernel 目錄。 內(nèi)核管理的核心代碼存放在這里,與處理器結(jié)構(gòu)相關(guān)的代碼都放在 arch/*/kernel 目錄下。 8.lib 目錄。 該目錄包括與平臺無關(guān)的通用函數(shù)。 9.mm 目錄。 該目錄包含
57、了所有的內(nèi)存管理代碼。與具體硬件體系結(jié)構(gòu)相關(guān)的內(nèi)存管理代碼 位于 arch/*/目錄下。 目錄。 該目錄里是核心的網(wǎng)絡(luò)部分代碼,其每個子目錄對應(yīng)于網(wǎng)絡(luò)方面。 11.其它目錄。 還有另外兩個目錄是 Documentation 和 scripts 目錄。Documentation 目錄存 放許多的文檔。Scripts 目錄主要配置內(nèi)核時用到,存放了配置目錄的一些腳本文 件。 5.25.2 嵌入式嵌入式 LinuxLinux 內(nèi)核移植內(nèi)核移植 .1 ARMARM LinuxLinux 內(nèi)核的剪裁內(nèi)核的剪裁 嵌入式系統(tǒng)是以應(yīng)用為中心,以計算機技術(shù)為基礎(chǔ),并且軟硬件可裁剪,適用 于應(yīng)用系
58、統(tǒng)對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統(tǒng)。嵌 入式 UNUX 系統(tǒng)資源有限、專用性強,在部署到嵌入式平臺之前必須對其進行裁剪、 定制,減小嵌入式 LINUX 系統(tǒng)體積,提高運行效率。 Linux 內(nèi)核是 Linux 系統(tǒng)中最關(guān)鍵的部分,針對各種不同的 ARM CPU 體系結(jié)構(gòu), Linux 在源代碼上針對其體系結(jié)構(gòu)作了底層的實現(xiàn)。 目前發(fā)布的標準的 Linux 內(nèi)核對于嵌入式系統(tǒng)來說過于龐大,因此要把內(nèi)核移 植到嵌入式系統(tǒng)上,就需要將 Linux 內(nèi)核根據(jù)目標平臺的情況下進行剪裁、配置。 在裁剪和配置后,對內(nèi)核重新編譯,生成內(nèi)核映像文件。 在對 Linux 內(nèi)核裁剪過程中,
59、根據(jù)嵌入式系統(tǒng)明確的功能定義,在內(nèi)核的設(shè)定 中可以只留下必要的選項和模塊,其它不必要的可以舍棄。而且,還可以利用取代 的方式,來節(jié)省內(nèi)核空間。除此之外,其中的即插即用設(shè)備、光驅(qū)、鼠標等驅(qū)動程 序也都可以剪裁掉。 目前使用最多的對嵌入式 Linux 內(nèi)核裁剪主要有三種方法: (1)使用 Linux 自身的配置工具,編譯定制內(nèi)核。 Linux 內(nèi)核能夠很好的支持模塊化,內(nèi)核有許多可以獨立增加、刪除的功能模 塊可以設(shè)置為內(nèi)核配置選項。嵌入式 LNIUX 內(nèi)核支持很多的硬件,如果在編譯的時 候把這些選上,編譯出來的內(nèi)核會很大,編譯時應(yīng)根據(jù)系統(tǒng)平臺特點和應(yīng)用需求配 置內(nèi)核,添加需要的功能、刪除不必要的功
60、能,這樣可以顯著減小內(nèi)核的大小。但 這種裁剪方法的缺點是內(nèi)核裁剪的粒度較大,精度較小。 (2)修改內(nèi)核源代碼進行系統(tǒng)裁剪。 通過分析系統(tǒng)平臺和應(yīng)用需求,結(jié)合對內(nèi)核代碼的理解,在內(nèi)核源代碼的適當 位置加入一些條件編譯語句,使用菜單定制語言來定制內(nèi)核選項。這種基于內(nèi)核源 碼的方法裁剪粒度更小,裁剪出來的內(nèi)核體積更小,更適合嵌入式系統(tǒng)的需求。 (3)基于系統(tǒng)調(diào)用關(guān)系進行內(nèi)核裁剪 內(nèi)核是操作系統(tǒng)運行的核心,內(nèi)核函數(shù)在系統(tǒng)調(diào)用、異常產(chǎn)生和中斷發(fā)生時被 調(diào)用。 在嵌入式 LINUX 系統(tǒng)中,應(yīng)用程序位于最上層,通過庫調(diào)用向系統(tǒng)發(fā)出服務(wù)請 求,在通過系統(tǒng)調(diào)用調(diào)用內(nèi)核函數(shù)。不同的系統(tǒng)中由于具體的應(yīng)用不同,應(yīng)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年上海市閔行區(qū)紀王學校教師招聘考試筆試試題(含答案)
- 2025年湖南教師崗位招聘考試筆試試題(含答案)
- 彩票銷售風險管理與控制協(xié)議
- Oracle教程 (第6版)(Oracle 11g版) 課件 第5-7章 索引與數(shù)據(jù)完整性;PL-SQL;存儲過程和觸發(fā)器
- 規(guī)范漢字培訓課件通知
- 保管員的安全操作規(guī)程
- 國家實行生產(chǎn)安全事故追究
- 電力安全巡查記錄表
- 安全生產(chǎn)責任險保險條款
- 個人作風情況自查及整改報告
- eps泡沫生產(chǎn)工藝圖
- DB63-T 2220-2023 風積沙填筑路基技術(shù)規(guī)范
- 工程股權(quán)轉(zhuǎn)讓協(xié)議
- 車間主任考核表 -
- 高位截癱的護理查房
- 金融昌典當有限責任公司財務(wù)會計制度
- 教師交流工作總結(jié)
- 籃球比賽組織章程范本
- 餐廳服務(wù)員高級理論模擬試題+參考答案
- Pspice電路仿真PPT完整全套教學課件
- 北師大版數(shù)學4年級下冊重要概念和公式匯總
評論
0/150
提交評論