Linux系統(tǒng)在ARM上的內核移植_第1頁
Linux系統(tǒng)在ARM上的內核移植_第2頁
Linux系統(tǒng)在ARM上的內核移植_第3頁
Linux系統(tǒng)在ARM上的內核移植_第4頁
Linux系統(tǒng)在ARM上的內核移植_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、物理與電子工程學院設計實驗報告 物理與電子工程學院 嵌入式系統(tǒng)設計課程小論文課題題目 Linux系統(tǒng)在ARM上的內核移植 系 別 物理與電子工程學院 年 級 專 業(yè) 電子科學與技術 學 號 學生姓名 日 期 2012.6.1 目 錄摘要11.課題要求21.1 課題目的21.2 課題背景32. Linux系統(tǒng)及Linux內核以及移植簡介32.1 Linux系統(tǒng)簡介32.2 Linux內核簡介42.3 內核移植簡介52.3.1 移植的基本概念52.3.2 內核移植的準備63.內核移植73.1 內核移植基本流程73.2 內核配置73.2.1 修改Makefile73.2.2 設置NAND Flash

2、分區(qū)73.2.3 配置內核選項93.3 內核編譯103.3.1 交叉編譯環(huán)境的建立103.3.2 交叉編譯113.4 內核下載114技術實現問題135. 結束語14參考文獻15設計性實驗報告成績: 指導教師簽名:16摘要隨著計算機技術、通信技術以及Internet的飛速發(fā)展。嵌入式系統(tǒng)已得到越來越廣泛的應用。與此同時,嵌入式系統(tǒng)的復雜性也在不斷增加,嵌入式操作系統(tǒng)已經成為其中最重要的組成部分。本文是基于ARM 的平臺上進行嵌入式操作系統(tǒng)LINUX 的移植,其中ARM 選用S3C2410。文中首先對內核移植的背景以及Linux 操作系統(tǒng)內核進行了介紹, 然后對移植的步驟及要點做了詳細的介紹, 最

3、后實現編譯的過程。操作系統(tǒng)移植是嵌人式系統(tǒng)開發(fā)的前提和基礎,對嵌入式系統(tǒng)的開發(fā)具有重要意義1.課題要求1.1 課題目的1. 了解移植的基本概念;2. 熟悉Linux內核的配置過程;3. 熟悉Linux內核的編譯過程;4. 了解根文件系統(tǒng)的作用;5. 學會BusyBox工具的使用;6. 學會構建Cramfs文件系統(tǒng)。1.2 課題背景Linux內核發(fā)展速度迅猛,是目前市場上唯一可以挑戰(zhàn)Windows 的操作系統(tǒng)。在其發(fā)展過程中得到分布于全世界的廣大OpenSource 項目追隨者的大力支持。尤其是一些曾經參與Unix 開發(fā)的人員,他們把應用于Unix 上的許多應用程序移植到Linux 上來,使得L

4、inux 的功能得到巨大的擴展。隨著其功能不斷加強,靈活多樣的實現加上其可定制的特性以及開放源碼的優(yōu)勢, Linux 在各個領域的應用正變得越來越廣泛。其中uClinux 的設計就是通過對標準Linux 內核裁減,去除虛擬內存管理部分的代碼,并對內存分配進行優(yōu)化,從而達到提高系統(tǒng)運行效率的目的。它雖然體積小但依然保存了Linux 內核的大多數優(yōu)點。例如:支持通用Linux API、內核體積可以小于512K、具有完整的TCP/IP 協(xié)議棧等等。2. Linux系統(tǒng)及Linux內核以及移植簡介2.1 Linux系統(tǒng)簡介一個完整的系統(tǒng)主要5部分組成:硬件、Bootloader、操作系統(tǒng)內核、操作系統(tǒng)

5、服務和用戶應用程序,如圖1所示:圖1 一個系統(tǒng)的組成各模塊作用:(1) 用戶應用程序是指那些字處理程序、互聯網應用程序或其它用戶自行編制的各種應用程序;(2) 操作系統(tǒng)服務程序是指向用戶提供的系統(tǒng)調用等接口程序;(3) Bootloader主要完成硬件檢測和系統(tǒng)引導;(4) 操作系統(tǒng)內核是操作系統(tǒng)的主要核心部分,是整個系統(tǒng)的靈魂。其中,操作系統(tǒng)服務程序、操作系統(tǒng)內核及Bootloader被看作是操作系統(tǒng)部分 。2.2 Linux內核簡介Linux內核主要由進程調度模塊、內存管理模塊、文件系統(tǒng)模塊、進程間通信模塊和網絡接口模塊5個模塊構成,如圖2所示。圖2 Linux內核系統(tǒng)模塊結構及相互依賴關

6、系各模塊作用:(1)進程調度模塊負責控制進程對CPU資源的使用,所采用的調度策略使各進程能公平合理地訪問CPU,同時保證內核能及時執(zhí)行硬件操作;(2)內存管理模塊用于確保所有進程安全共享機器主內存區(qū),它還支持虛擬內存管理方式,使Linux的進程可以使用比實際內存更多的內存容量,并可以利用文件系統(tǒng)把暫時不用的內存數據塊交換到外部存儲設備上去,當需要的時候再交換回來;(3)文件系統(tǒng)模塊用于支持對外部設備的驅動和存儲;(4)進程間通信模塊用于支持多種進程間的信息交換方式;(5)網絡接口模塊提供對多種網絡通信標準的訪問并支持許多網絡硬件。Linux是開放源代碼的,Linux操作系統(tǒng)設計本身具有的不同平

7、臺之間的可移植性,而且所需的存儲空間也很小。Linux內核是Linux最底層、最核心的部分,Linux操作系統(tǒng)就是在Linux內核上發(fā)展壯大起來的,而內核的移植則是任何嵌入式Linux開發(fā)中最關鍵部分。所有的內核源程序都可以在usrsrclinux下找到,大部分應用軟件也都是遵循GPL而設計,遍布全球的眾多Linux愛好者又是Linux開發(fā)者的強大技術支持。例如:在Linux26的內核里主要包含有以下目錄:arch 主要是和體系結構相關的代碼,里面幾乎包含了目前流行的多數處理器體系結構,如ARM、Alpha、1386、MIpS、M68K、powerpC等。block 主要是塊設備的驅動程序。d

8、rivers 字符設備以及一些常用計算機外設的驅動程序,主要針對通用計算機,也有針對具體嵌入式處理器的外設驅動。fs 文件系統(tǒng)相關代碼,有些用于虛擬文件系統(tǒng)。include 主要包含各種CPU的頭文件,也有一些通用的h文件。init Linux 內核的初始化代碼,有main函數以及init線程的代碼。incLinux 進程通信機制相關代碼。kemel 通用的內核文件,包含內核基本功能部分的實現,如進程、時間等。mm 內存管理部分。net 網絡設備的驅動程序。2.3 內核移植簡介2.3.1 移植的基本概念移植,從廣義上講,移植包括軟件移植和硬件移植;從狹義上講,移植就是指軟件移植,即將一個軟件從

9、一個平臺遷移到另外一個與眾不同的平臺上工作。移植可分為三種情況:1. 從一個硬件平臺移植到另外一個硬件平臺首先是工具鏈的移植,在PC機上編譯時要建立交叉編譯工具鏈,同時還要考慮binutils、glibe等移植;其次是內核移植,主要包括兩方面,一是arch目錄下的體系結構的移植,二是移植drivers目錄下的許多硬件驅動程序;最后是應用程序的移植,如Qt/embedded庫的移植等。2. 從一個操作系統(tǒng)移植到另外一個操作系統(tǒng)這種移植較常見。如:將Windows系統(tǒng)下運行的程序移植到Linux/UNIX系統(tǒng)中。3. 從一種軟件庫環(huán)境移植到另外一種軟件庫環(huán)境這種類型的移植也較常見,如:將基于gli

10、bc庫環(huán)境的程序移植到基于uclibc庫環(huán)境去。2.3.2 內核移植的準備Linux內核相對于其他操作系統(tǒng)而言有很多優(yōu)點,如:平臺的獨立性、代碼開放性等,所以被大多數硬件平臺所選用,它現在已經成為嵌入式系統(tǒng)中的一個主流操作系統(tǒng)。移植內核首先要確保準備好編譯內核的工具,Linux內核歸根結底也是一個程序,所以它必須通過編譯器編譯后才能在硬件上執(zhí)行;其次,從站點下載要移植的內核代碼;最后檢查要移植的開發(fā)板硬件是否準備就緒,準備完成后就可以正式移植內核了。3.內核移植3.1 內核移植基本流程圖3 內核移植的過程3.2 內核配置3.2.1 修改Makefile(1)修改內核

11、根目錄下的Makefile文件,指明要用的編譯器為arm-linux-交叉編譯器,使用的體系結構為ARM。具體操作如下:#cd linux-2.6.10#vi Makefile3.2.2 設置NAND Flash分區(qū)首先建立一個NAND Flash分區(qū)表,該分區(qū)表用來定義開發(fā)板上64MB的空間劃分,以及定義各分區(qū)存放的起始地址以及大小等。該部分實現在arch/arm/mach-s3c2410/devs.c源文件中,需修改如下:/首先添加相應的頭文件#include<linux/mtd/partitions.h>#include<linux/mtd/nand.h>#inc

12、lude<asm/arch/nana.h>/新建64MB的NAND Flash分區(qū)表*/*1MB*/name:”bootloader”,size:0x00100000,offset:0x0,/定義一個NAND Flash分區(qū)數據結構struct s3c2410_nand_set namdset=nr_partitions:4, /定義分區(qū)數partitions: partitions_info, /定義分區(qū)表;其中,name為分區(qū)的名稱,size為分區(qū)的大小,offset為分區(qū)在Flash中的起始地址,同時還定義了NAND Flash的分區(qū)數據結構。(2)緊接著要建立內核對NAND

13、 Flash芯片的支持,同時加入對NAND Flash芯片的支持代碼到NAND Flash的驅動程序。Arch/arm/mach-s3c2410/devs.c中的具體代碼實現如下:/建立NAND Flash的芯片支持數據結構struct s3c2410_platform_nand superlpplatform=tacls:0, twrph0:1,twrph1:0,sets:&nandset, /定義支持的分區(qū)集nr_sets:1, /定義分區(qū)集數,tacls:0,twrph0:1,twrph1:0含義為:tacls=1個HCLK時鐘,twrph0=2個HCLK時鐘,twrph1=1個

14、HCLK時鐘。(3)在內核啟動時正確添加對NAND Flash分區(qū)表的初始化配置,還需要修改Arch/arm/mach-s3c2410/mach-smdk2410.c源文件,修改如下:/增加對NAND Flash設備的支持static struct platform_device *smdk2410_devices_initdata=&s3c_divece_usb,&s3c_divece_lcd,&s3c_divece_wdt,&s3c_divece_i2c,&s3c_divece_iis,&s3c_divece_nand /添加此行來初始化新增

15、的NAND Flash分區(qū),(4)禁止Flash ECC校驗由于BootLoader通過軟件已經產生了ECC校驗碼,這與內核的ECC校驗碼不一致,所以要禁用禁止內核ECC校驗。3.2.3 配置內核選項操作如下:#cd linux-2.6.10#cp arch/arm/configs/sndk2410_defconfig .config#make menuconfig配置內核的方法:1. make configmake config提供了一個命令行接口方式來配置內核,它會一個接著一個的詢問關于每一個選項。2. make oldconfigmake oldconfig會使用一個已有的config配

16、置文件,提示行會提示那些之前還沒有配置過的選項,完成配置。3. make menuconfigmake menuconfig顯示一個基于文本的圖形化終端配置菜單,目前公認為是使用最廣泛的配置內核方式。4. make xconfigmake xconfig顯示一個基于X窗口的配置菜單,用戶可以通過圖形用戶界面和鼠標來對內核進行配置3.3 內核編譯3.3.1 交叉編譯環(huán)境的建立無論編譯器的功能有多么強大,但它的實質都是一樣的,都是把某種以數字和符號為內容的高級編程語言轉換成機器語言指令的集合。所謂的交叉編譯就是:利用運行在某類機器上的編譯器編譯某個源程序生成在另一類機器上運行的目標代碼的過程,如圖

17、4所示:圖4 交叉編譯開發(fā)模型目前,常用的交叉開發(fā)環(huán)境主要有開放和商業(yè)兩種類型。開放的交叉開發(fā)環(huán)境的典型代表是GNU工具鏈(Toolschain),目前已經能夠支持x86、ARM、MIPS、PowerPC等多種處理器;商業(yè)的交叉開發(fā)環(huán)境主要有MetrowerksCodeWarrior、ARM Software Development Toolkit、SDSCrosscompiler、W indRiver Tornado、M icrosoft Embedded Visual C+等。Linux使用GNU的工具,社區(qū)的開發(fā)者已經編譯出了常用體系結構的交叉編譯工具鏈。交叉編譯環(huán)境工具鏈一般包括arm

18、-gcc,binutils(含AS匯編器,LD鏈接器等),glibc等。arm-linux-gcc是交叉編譯器,arm-linux-ld是交叉鏈接器。Glibc是C語言庫,它們既要運行于當前體系的系統(tǒng)下,又要能生成和處理目標體系的文件。編寫好的嵌人式軟件經過交叉編譯和交叉鏈接后,通常會生成兩種類型的可執(zhí)行文件:用調試的可執(zhí)行文件和用于固化的可執(zhí)行文件。下載交叉編譯工具armlinux-gcc 341,將交叉編譯器解壓到相應的目錄下,相應的命令為:#tar jxf armlinuxgcc341tarbz2,要注意解壓后的路徑。使用GNU編譯程序,需要有Makefile文件。編譯命令將根據Make

19、file文件的規(guī)則來決定如何編譯和連接程序。Makefile文件的作用可想而知。修改內核目錄下的makefile文件,主要是以下幾行:(1) 注釋掉ARCH:=$(shell uname-m|sed-e si86i386-e ssun4usparc64-e sarmarm-e ssall0arm)這一行。(2) 將ARCH:=改為ARCH:=arm(3) 將CROSS_COMPILE:=改為CROSS_COM-PILE:=交叉編譯工具中arm-linux所在目錄arm-linux-(如:CROSS_COMPILE:=usrlocalarm2953binarm-linux-)此后就可以進行編譯。

20、3.3.2 交叉編譯配置完畢后用make命令編譯內核,內核的編譯就是一個非常簡單的過程。執(zhí)行:1) #make clean這條命令是在正式編譯你的內核之前先把環(huán)境給清理干凈,保證沒有不正確的依賴文件存在;2) #make dep由于內核源碼樹中的大多數文件都與一些頭文件有依賴關系,因此要將內核源碼樹中每個子目錄產生的“depend”文件建立起依賴關系;3) #make zImage建立壓縮的linux內核映像。編譯完畢,在archarmboot目錄下將會生成ARM Linux內核映像文件zImage,這就是將要移植到目標機的內核映像文件;4) #make modules這條命令是編譯在配置時選

21、擇為模塊的,即選項前為M的。如果內核配置選項中有選擇編譯為模塊的,就需要此命令;如果將來還要對內核重新進行編譯,則需執(zhí)行命令“makedistclean”,去除依賴關系并清除以前編譯產生的文件,然后重復上述步驟即可;5) #make modules_install將#make modules生成的模塊文件復制到相應的目錄下。3.4 內核下載內核下載就是將內核映像文件燒寫到目標板上,內核下載的前提是已經在目標板上下載了相應的Bootloader程序。以U-Boot為例: 首先在開發(fā)使用的宿主機上建立一個tftp服務,然后使用超級終端或DNW工具板啟動目標板,然后在U-Boot的命令行輸入以下命令:MIKE2410# tftp 0x30008000 zImageTFTP form server ;our IP address is 0Filename zImage.Load address: 0x30008000Loading:# #doneBytes transferred=890752(d9780 hex)其中,0x30008000為指定下載到內存的地址,zImage 就是生成的內核映像文件。下載完可以通過bootm命令來啟動內核,具體如下:MIKE2410# bootm 0x30008

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論