移植操作系統(tǒng)報告_第1頁
移植操作系統(tǒng)報告_第2頁
移植操作系統(tǒng)報告_第3頁
移植操作系統(tǒng)報告_第4頁
移植操作系統(tǒng)報告_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上嵌入式系統(tǒng)及應用基于s3c6410的嵌入式Linux系統(tǒng)移植1. 嵌入式系統(tǒng)介紹嵌入式系統(tǒng)是以應用為中心,以計算機技術為基礎,軟硬件可配置,對功能、可靠性、成本、體積、功耗有嚴格約束的專用系統(tǒng)。嵌入式Linux是在標準Linux的基礎上針對嵌入式系統(tǒng)進行內(nèi)核裁減和優(yōu)化后形成的一種小型操作系統(tǒng),一般只有幾百KB左右,即使加上其它必要的模塊和應用程序,所需的存儲空間也很小,非常適合于移植到嵌入式系統(tǒng)中去。一個完整的嵌入式系統(tǒng)的構建過程大體可以分為四個步驟:交叉編譯環(huán)境的搭建、Boot Loader移植、Linux內(nèi)核的配置編譯及移植、根文件系統(tǒng)的制作及移植。本文將以SUM

2、SANG公司的s3c6410處理器為目標平臺,介紹嵌入式Linux系統(tǒng)的構建過程。1.1. 嵌入式系統(tǒng)的組成一個嵌入式系統(tǒng)裝置一般都由嵌入式計算機系統(tǒng)和執(zhí)行裝置組成,嵌入式計算機系統(tǒng)是整個嵌入式系統(tǒng)的核心,由硬件層、中間層、系統(tǒng)軟件層和應用軟件層組成。執(zhí)行裝置也稱為被控對象,它可以接受嵌入式計算機系統(tǒng)發(fā)出的控制命令,執(zhí)行所規(guī)定的操作或任務。執(zhí)行裝置可以很簡單,如手機上的一個微小型的電機,當手機處于震動接收狀態(tài)時打開;也可以很復雜,如SONY 智能機器狗,上面集成了多個微小型控制電機和多種傳感器,從而可以執(zhí)行各種復雜的動作和感受各種狀態(tài)信息。硬件層:硬件層中包含嵌入式微處理器、存儲器(SDRAM

3、、ROM、Flash等)、通用設備接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式處理器基礎上添加電源電路、時鐘電路和存儲器電路,就構成了一個嵌入式核心控制模塊。其中操作系統(tǒng)和應用程序都可以固化在ROM中。中間層:硬件層與軟件層之間為中間層,也稱為硬件抽象層(Hardware Abstract Layer,HAL)或板級支持包(Board Support Package,BSP),它將系統(tǒng)上層軟件與底層硬件分離開來,使系統(tǒng)的底層驅動程序與硬件無關,上層軟件開發(fā)人員無需關心底層硬件的具體情況,根據(jù)BSP 層提供的接口即可進行開發(fā)。該層一般包含相關底層硬件的初始化、數(shù)據(jù)的輸入/輸出操作和

4、硬件設備的配置功能。系統(tǒng)軟件層:系統(tǒng)軟件層主要指運行于ARM芯片上的操作系統(tǒng),目前常見的ARM操作系統(tǒng)有WinCE、Linux、Symbain、Android等。應用軟件層:主要指運行于帶操作系統(tǒng)的ARM上的軟件,是由程序員編寫的軟件。2. Linux系統(tǒng)移植Linux系統(tǒng)移植實際上是把整套軟件系統(tǒng)平臺運行環(huán)境從一個硬件平臺搬移到另一個硬件平臺并運行的過程,這整個的過程主要包括系統(tǒng)引導代碼的移植、操作系統(tǒng)移植、文件系統(tǒng)移植,通過這整套軟件系統(tǒng)平臺的移植,可以達到使同樣的軟件系統(tǒng)平臺在不同的硬件環(huán)境下運行的目的。進行Linux系統(tǒng)移植的先決條件是要對軟件、硬件以及整個系統(tǒng)都有一個比較深入的了解,

5、例如在Linux系統(tǒng)移植的過程中首先需要對各種硬件原理比較熟悉,其次對硬件原理圖也要非常了解,再次對Linux系統(tǒng)與引導代碼和文件系統(tǒng)的關系也要了解,最后更要對Linux系統(tǒng)本身要有一個深入的理解,只有通過這些準備工作才能具備進行Linux系統(tǒng)移植的條件。由于系統(tǒng)移植是軟硬件結合的工作,在移植的過程中還會遇到各種問題,更需要事先準備好各種軟硬件知識,協(xié)同來解決這樣的問題。這部分將對整個Linux系統(tǒng)移植有一個全面的介紹,并且對后文中一些基本概念和所用的技術進行基本的介紹。2.1. Linux系統(tǒng)移植主要步驟Linux系統(tǒng)向ARM開發(fā)平臺上移植,其主要步驟主要有四步:搭建交叉編譯環(huán)境;Bootl

6、oader移植;Linux內(nèi)核移植;文件系統(tǒng)移植;系統(tǒng)移植主要步驟流程圖如下:2.2. 交叉編譯環(huán)境搭建將arm-linux-gcc-4.3.2.tgz 文件拷貝到Ubuntu 的/forlinx 目錄下,該文件位于用戶基礎資料光盤的“實用工具”文件夾中。在Ubuntu 中新建一個終端,輸入下面的命令安裝交叉編譯器:#cd /forlinx (進入/forlinx 目錄)#mkdir /usr/local/arm (創(chuàng)建目錄,若目錄已存在會提示錯誤,跳過即可)#tar zxvf arm-linux-gcc-4.3.2.tgz -C /編譯器解壓到/usr/local/arm把交叉編譯器路徑添加

7、到系統(tǒng)環(huán)境變量中,以后可以直接在終端窗口中輸入arm-linx-gcc 命令來編譯程序。在終端中執(zhí)行:gedit /etc/profile添加以下四行到該文件中:export PATH=/usr/local/arm/4.3.2/bin:$PATHexport TOOLCHAIN=/usr/local/arm/4.3.2export TB_CC_PREFIX=arm-linuxexportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi保存,退出。重新啟動系統(tǒng),在終端里面執(zhí)行arm-linux-gcc 回車:如下圖所示就說明交叉編譯器已經(jīng)成功

8、安裝到了系統(tǒng)里面,可以使用該編譯器來編譯Uboot 代碼和內(nèi)核代碼了。2.3. Boot Loader引導程序及移植引導加載程序是系統(tǒng)加電后運行的第一段軟件代碼。它包括固化在固件(firmware)中的boot代碼(可選)和Boot Loader兩大部分。PC機中Boot Loader的主要運行任務就是將內(nèi)核映象從硬盤上讀到RAM中,然后跳轉到內(nèi)核的入口點去運行,也即開始啟動操作系統(tǒng)。在嵌入式系統(tǒng)中,整個系統(tǒng)的加載啟動任務就完全由Boot Loader來完成。由于Boot Loader的實現(xiàn)依賴于CPU的體系結構,因此,嵌入式領域里建立一個通用的Boot Loader幾乎是不可能的。大多數(shù)Bo

9、ot Loader都分為stagel和stage2兩大部分。依賴于CPU體系結構的代碼,比如設備初始化代碼等,通常都放在stagel中,而且通常都用匯編語言來實現(xiàn),以達到短小精悍的目的。而stage2則通常用c語言來實現(xiàn),這樣可以實現(xiàn)更復雜的功能,而且代碼會具有更好的可讀性和可移植性。Boot Loader的stagel上電啟動后通常按以下步驟執(zhí)行:首先對硬件設備初始化。包括屏蔽所有中斷,設置CPU的速度和頻率,RAM初始化,初始化LED,關閉CPU的內(nèi)部指令數(shù)據(jù)Cache等。接下來的工作是為加載Boot Loader的stage2準備RAM空間,然后拷貝Boot Loader的stage2到

10、RAM空間中。接著設置好堆棧。最后跳轉到stage2的人口點。Boot Loader的stage2通常按以下步驟執(zhí)行:初始化本階段要使用到的硬件設備,然后檢測系統(tǒng)內(nèi)存映射(memory map),將Kernel映像和根文件系統(tǒng)映像從Flash上讀到RAM空間中,接著為內(nèi)核設置啟動參數(shù),最后調(diào)用內(nèi)核。至此整個Boot Loader的啟動引導過程結束。U-Boot作為嵌入式系統(tǒng)中通用的BootLoader,可以很方便的移植到其他硬件平臺,因此對嵌入式系統(tǒng)BootLoader,研究U-Boot的移植就顯得非常重要。移植U-Boot到新的嵌入式系統(tǒng)板上包括兩個層面的移植,第一層面是針對CPU的移植,第

11、二層面是針對BOARD的移植,同時需要移植相關的頭。然后根據(jù)開發(fā)板的不同內(nèi)存需要使用不同的U-boot 配置項。編譯128M內(nèi)存開發(fā)板 Uboot方法:進入uboot1.1.6 目錄、配置config、編譯:#cd uboot1.1.6 (進入uboot 源碼的目錄)# make forlinx_nand_ram128_config (配置適用于128M 內(nèi)存開發(fā)板的config)#make clean (刪除以前編譯的文件)#make (編譯)2.4. Linux內(nèi)核移植1、編譯Linux-3.0.1將壓縮包FORLINX_linux-3.0.1.tar.gz 拷貝到作目錄下,解壓縮:#ta

12、r zxf FORLINX_linux-3.0.1.tar.gz2、配置內(nèi)核1) 進入Linux-3.0.1內(nèi)核主目錄,通過以下命令將6410的默認配置文件寫到當前目錄下的.config。makes3c6410_defconfig2) 配置內(nèi)核模塊的功能,有幾種方式可以進行界面選擇:makemenuconfig(文本選單的配置方式,在有字符終端下才能使用)makexconfig(圖形窗口模式的配置方式,圖形窗口的配置比較直觀,必須支持Xwindow下才能使用)makeoldconfig(文本配置方式,在原內(nèi)核配置的基礎修改時使用)這里使用makemenuconfig命令。3 編譯內(nèi)核命令如下:

13、#make zImage編譯結束后將在內(nèi)核源碼目錄的arch/arm/boot 中得到Linux 內(nèi)核映像文件:zImage2.5. 文件系統(tǒng)映像制作1、準備好文件系統(tǒng)FileSystem-Yaffs2.tar.gz 是文件系統(tǒng)目錄,可以使用此目錄制作Yaffs2文件系統(tǒng),且FileSystem-Yaffs2.tar.gz 目錄也用于NFS 網(wǎng)絡根文件系統(tǒng)掛載。2、制作映像在基礎光盤Linux-3.0.1filesystemYaffs2 文件系統(tǒng)制作工具中有兩個制作工具:mkyaffs2image-nand2g 和mkyaffs2image-nand256m1)mkyaffs2image-na

14、nd256m制作出的映像,適用于 256M 和 1G字節(jié) nandflash的開發(fā)板。制作命令:#./mkyaffs2image-nand256m FileSystem-Yaffs2 rootfs.yaffs22)mkyaffs2image-nand2g制作出的映像,適用于 2G或者 4G字節(jié) nandflash的開發(fā)板。制作命令:#./mkyaffs2image-nand2g FileSystem-Yaffs2 rootfs.yaffs2最后生成rootfs.yaffs2 是可以下載到開發(fā)板nandflash 中的yaffs2 文件系統(tǒng)映像。移植成功后Linux啟動的界面:3. 基于移植的系

15、統(tǒng)上的小程序功能:每次可以選擇上下左右其中一個方向去撥動,每撥動一次,所有的數(shù)字方塊都會往撥動的方向靠攏外,系統(tǒng)也會在空白的地方隨機出現(xiàn)一個數(shù)字方塊,相同數(shù)字的方塊在靠攏、相撞時會相加。系統(tǒng)給予的數(shù)字方塊不是2就是4,玩家要想辦法在這小小的16格范圍中湊出“2048”這個數(shù)字方塊。程序源碼:2048.c/*2048*/#include#include#include#includemy_getch.hint code44=0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0;int temp5;int mov=0;int score=0void print(void) int

16、i,j; printf(2048n); printf(W-UP A-LEFT S-DOWN D-RIGHT 0-EXITn); printf(Score:%d mov:%dn,score,mov); printf(|*|n); for(i=0;i=3;i+) for(j=0;j=3;j+) if(codeij=0) printf(| ); else printf(|%4d,codeij); printf(|n|*|n); int add(void) int i; int t=0; int change=0; do for(i=0;i=3;i+) if(tempi=0) if(tempi!=te

17、mpi+1) change=1; tempi=tempi+1; tempi+1=0; t+; while(t=3); for(i=1;i=3;i+) if(tempi=tempi-1) if(tempi!=0) change=1; score=score+tempi; tempi-1=tempi-1*2; tempi=0; do for(i=0;i=3;i+) if(tempi=0) tempi=tempi+1; tempi+1=0; t+; while(t=1) do i=(unsigned)rand()%4; j=(unsigned)rand()%4; while(codeij!=0);

18、if(unsigned)rand()%4=0) codeij=4; else codeij=2; mov+; print();input=my_getch(); change=0; switch(input) case 0: printf(Are you sure to exit?(y/n); input=getchar(); if(input=y|input=Y) exit(0); break; case W: case w: for(j=0;j=3;j+) for(i=0;i=3;i+) tempi=codeij; temp4=0; change=change+add(); for(i=0

19、;i=3;i+) codeij=tempi; break; case A: case a: for(i=0;i=3;i+) for(j=0;j=3;j+) tempj=codeij; temp4=0; change=change+add(); for(j=0;j=3;j+) codeij=tempj; break; case S: case s: for(j=0;j=3;j+) for(i=0;i=3;i+) tempi=code3-ij; temp4=0; change=change+add(); for(i=0;i=3;i+) code3-ij=tempi; break; case D: case d: for(i=0;i=3;i+) for(j=0;j=3;j+) tempj=codei3-j; temp4=0; change=change+add(); for(j=0;j=3;j+) codei3-j=tempj; break; gameover=

溫馨提示

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

評論

0/150

提交評論