版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于ARM的嵌入式Linux內核的研究與移植</p><p> 【摘要】:本文首先介紹了當前嵌入式發(fā)展狀況,以及一些常用的嵌入式系統(tǒng)。接下來講述了一些linux系統(tǒng)的知識。在移植前還介紹了我們所使用的開發(fā)平臺以及與移植相關的一些硬件參數(shù)。就如PC機一樣,系統(tǒng)的啟動需要啟動程序的引導,嵌入式系統(tǒng)也是一樣。在本文我們使用的引導程序是u-boot,所以我們對u-boot的啟動過程進行了講解,并根
2、據(jù)我們的開發(fā)板進行修改編譯,最后可成功引導我們的開發(fā)板。接下來再對我們的內核進行相應的修改,主要參考的還是我們的硬件平臺,修改的地方有時鐘、flash驅動等,編譯好后產(chǎn)生bzImage內核文件。要想一個linux系統(tǒng)能正確運行我們還需要文件系統(tǒng)的支持,本文使用的文件系統(tǒng)是yaffs,在制作文件系統(tǒng)時我們還要編譯busybox產(chǎn)生linux的常用命令集。我們移植的u-boot、內核文件、文件系統(tǒng)構成了嵌入式linux操作系統(tǒng),現(xiàn)在我們就可
3、以在系統(tǒng)上面進行驅動的開發(fā)和應用程序的開發(fā)。</p><p> 【關鍵詞】:嵌入式、U-boot、S3C2440、Linux內核移植。</p><p> [Abstract]: The text firstly introduces the current embedded development situation, and some common embedded system.
4、 The next I will say something about the Linux system. Before pretransplant ,the text also introduces what we use development platform and some hardware with transplant related parameters. Just like the personal compute
5、r,if you want to startup System ,start programs is needed to guidance,so as the embedded system.In this text we use the guidance is u-boot.So we have a detailed i</p><p> [Key words]: Embedded、U-Boot、S3C24
6、40、Linux kernel porting.</p><p><b> 引言</b></p><p> 嵌入式系統(tǒng)已經(jīng)融合到各行各業(yè)、各個領域,在電子產(chǎn)品中無處不在。小到手機、PDA、游戲機、冰箱、電視機常用家用電器,大到汽車、輪船、火車、飛機等,處處都有它的聲影,所以嵌入式系統(tǒng)的應用領域相當廣泛,前景無比美好。同傳統(tǒng)的通用計算機不同,嵌入式系統(tǒng)面向特定應用領
7、域,根據(jù)應用需求定制開發(fā)。</p><p> 一般來講,可以把由微處理器加上必要的外圍電路,再根據(jù)需求對微處理器進行編程,這樣組成的一個能夠實現(xiàn)一定功能的完整系統(tǒng)叫做嵌入式系統(tǒng)。嵌入式系統(tǒng)式硬件與軟件的統(tǒng)一,嵌入式系統(tǒng)中使用的微處理器叫嵌入式處理器。嵌入式處理器種類繁多,本文中使用的三星公司基于ARM的處理器S3C2440。</p><p> 操作系統(tǒng)(Operating System
8、,OS)是一種特殊的系統(tǒng)軟件,它把底層的硬件細節(jié)封裝起來,為運行在它上面的軟件提供一個抽象的編程接口,同時它又是系統(tǒng)資源的管理者,管理著系統(tǒng)當中的各種軟硬件資源,保證了系統(tǒng)能夠可靠地高速運行。而嵌入式操作系統(tǒng)(Embedded Operating System,EOS)指的是在嵌入式系統(tǒng)中使用的操作系統(tǒng)。</p><p> 常見的嵌入式操作系統(tǒng)有:VxWorks、Palm OS、Windows CE、uC/OS
9、-II、嵌入式Linux等。本文中將使用嵌入式Linux,它最大的亮點在于源代碼公開并且遵循GPL協(xié)議。</p><p> 此文研究Linux2.6內核的移植,并在此基礎上加上啟動代碼uboot和yaffs文件系統(tǒng),實現(xiàn)一個完整的嵌入式Linux操作系統(tǒng),并運行在SamsungS3C2440開發(fā)板上。</p><p> 第1章 Linux概述</p><p>
10、 第1.1節(jié) Linux的誕生和發(fā)展</p><p> 1.1.1. Linux操作系統(tǒng)的誕生</p><p> Linux操作系統(tǒng)誕生于1991年的10月5日(這是Linus第一次正式向外公布的時間),它是UNIX操作系統(tǒng)的一種克隆系統(tǒng)。以后借助于Internet網(wǎng)絡,經(jīng)過世界各地地計算機愛好者的共同努力,現(xiàn)已經(jīng)成為當今世界上使用的最多的一種UNIX類操作系統(tǒng),并且使用的人數(shù)還在迅猛
11、增長。</p><p> 1.1.2. Linux操作系統(tǒng)的發(fā)展</p><p><b> UNIX操作系統(tǒng)</b></p><p><b> MINIX操作系統(tǒng)</b></p><p><b> GNU計劃</b></p><p><b&
12、gt; POSIX標準</b></p><p> Internet網(wǎng)絡</p><p> 上面這5點是Linux誕生、發(fā)展和成長過程的五大支柱。UNIX最初的開放源代碼版本為linux提供了實現(xiàn)的基本原理和算法、GNU計劃為linux系統(tǒng)提供了豐富且免費的各種使用工具、POSIX標準的出現(xiàn)為linux提供了實現(xiàn)與標準兼容系統(tǒng)的參考指南、MINIX操作系統(tǒng)為linux的誕生
13、起到了不可忽缺的參考、Internet是linux成長和壯大的必要環(huán)境</p><p> 第1.2節(jié) Linux的使用</p><p><b> 1.2.1. 文件</b></p><p> 在Linux系統(tǒng)中“一切都是文件”,普通文件、設備文件、管道等都是以目錄的形式存在的。一切的操作都是以文件為基礎的。這是Linux得一大特色,也是L
14、inux設計上的精巧之處。在Linux系統(tǒng)中,以“.“開始的文件是隱藏文件。</p><p><b> 1.2.2. 目錄</b></p><p> 目錄是一種具有目錄屬性的文件。Linux的目錄為樹形結構,且存在唯一的根目錄“/“。根目錄結構和意義入下表:</p><p> 表1- 1 跟目錄結構及意義</p><p
15、> 1.2.3. shell</p><p> shell作為Linux系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的接口。用戶在提示符下輸入的命令都由shell先解釋讓后傳給Linux核心。對用戶而言,不必關心一個命令式建立在shell內部還是一個單獨的程序。同時shell本身就是一個解釋性的程序設計語言。</p><p> Linux中有多種shell,其中默認使用的是bash,而在
16、嵌入式Linux中則常使用busybox。在命令行執(zhí)行一個程序時,實際上是通過shell來找到這個命令,并執(zhí)行的。除了shell自帶的一些命令,其他的命令就是普通的程序。</p><p><b> 第2章 開發(fā)環(huán)境</b></p><p> 第2.1節(jié) 硬件平臺(開發(fā)板)</p><p> 2.1.1. 開發(fā)板總體結構</p>
17、<p> 本文研究的課題使用的是天嵌科技TQ2440開發(fā)板。開發(fā)板采用Samsung公司ARM9芯片S3C2440作為CPU,采用64MB的SDRAM和256MB Nand Flash+2MB Nor Flash的雙Flash啟動。目標板的總體結構如下圖所示:</p><p> 圖2- 1 目標板的總體結構</p><p> 2.1.2. 核心板介紹</p>
18、<p> 插針式核心板:采用六層軍工布線設計,較強的抗震性能,運行程序穩(wěn)定高效;</p><p> CPU: 采用三星公司的ARM9芯片的S3C2440AL作為CPU,穩(wěn)定運行在400Mhz;</p><p> SDRAM: 64MB的SDRAM芯片;</p><p> FLASH: 256MB Nand Flash+ 2MB Nor Flas
19、h 雙Flash啟動;</p><p> 電源:專業(yè)電源芯片提供1.25V給CPU供電,3.3V給核心板供電;</p><p> Bootloader:采用功能強大的U-BOOT, 支持一鍵USB下載、TFTP網(wǎng)線下載;</p><p> 擴展性:提供多達192腳的擴展接 口,幾乎引出了S3C2440的全部資源,接口均采用2.0間距, 方便客戶二次開發(fā)時購買底
20、板用接口;</p><p> 核心板尺寸: 37mm×78mm。</p><p> 2.1.3. 底板介紹</p><p> 串口: 板載一個五線異步串行口, 波特率最高115200bps,另外擴展出兩個串口, Wince和linux下均提供三串口源碼;</p><p> 網(wǎng)絡接口:板載100M 網(wǎng)絡接口, DM9000網(wǎng)卡
21、, 帶聯(lián)接和傳輸指示燈;</p><p> USB接口:板載USB1. 1 HOST接口,板載USB1. 1 Device接口;</p><p> SD/MMC接口:板載一個SD卡接口, 可接32GB SD卡;</p><p> 外擴IDE接口:集成在底板的總線接口里面,提供linux驅動;</p><p> 音頻接口:板載IIS接口
22、芯片UDA1341, 一路立體聲音頻輸出接口可接耳機或音箱,可錄音;</p><p> LCD和觸摸屏接口: 板上集成了4線電阻式觸摸屏接口的相關電路;分別有40pin 和50pin LCD接口引出了LCD控制器的全部信號;支持黑白、4級灰度、16級灰度、256色、4096色STN液晶屏, 屏幕分辨率可達到1024*768像素;可接7寸10寸液晶屏;接配套的VGA轉接板,實現(xiàn)VGA輸出;</p>
23、<p> 時鐘源: 板載RTC內部實時時鐘(帶有后備鋰電池);</p><p> 調試及下載接口: 板載一個10pinJTAG接口,支持ADS1.2等單步調試,有配套ADS調試手冊;</p><p> 復位電路: 板載一個復位按鍵, 采用專用復位芯片進行復位,穩(wěn)定可靠;</p><p> 電源接口: 5V電源供電, 帶電源開關指示燈;</p&
24、gt;<p> AD功能: 板載可調電阻接到ADC引腳上用來驗證模數(shù)轉換;</p><p> IIC功能: 板載Atmel24C02芯片驗證IIC功能;</p><p> PWM功能 : 板載測試PWM功能的蜂鳴器;</p><p> Camera接口:板載攝像頭接口,可接OV9650,實現(xiàn)網(wǎng)絡監(jiān)控,linux,Wince下均有驅動支 持;&l
25、t;/p><p> 用戶按鍵: 板載四個用戶按鍵;有驅動支持,使用外部中斷;</p><p> 板載外擴接口:多達30多位GPIO, 多達10多路中斷,16路數(shù)據(jù)線, 25路地址線,片選信號等;</p><p> 底板尺寸:105mm×128mm。</p><p> 2.1.4. LCD觸摸屏的介紹</p><
26、;p><b> 尺寸:3.5寸</b></p><p> 顯示面積:70.08(H)mm×52.56(V)mm</p><p> 顯示顏色:16.7兆色 (24位)</p><p> 分辨率:320RGB×240(橫屏)</p><p><b> LED 背光</b&g
27、t;</p><p><b> 對比度:300:1</b></p><p> 亮度:320cd/m2(流明)</p><p> 使用溫度:-20℃到60℃</p><p> 觸摸屏使用次數(shù):超過100,000次</p><p> 響應時 間:≤10ms</p><p&
28、gt; 驅動板自帶兩個接口:40pin的0.5間距的FPC接口和50pin的2.0間距的插針接口;</p><p> 提供5V和3.3V兩種電壓供電,缺省狀態(tài)是3.3V供電.</p><p> 提供接口部分的原理圖,方便您的使用.</p><p> LCD驅動板的尺 寸:103mm×83mm</p><p> 第2.2節(jié)
29、交叉開發(fā)環(huán)境</p><p> 2.2.1. 交叉開發(fā)環(huán)境的介紹</p><p> 嵌入式系統(tǒng)是專用的計算機系統(tǒng),由于其處理能力和存儲能力較弱及特殊的處理器結構,使嵌入式系統(tǒng)中不能安裝開發(fā)軟件。所以,在進行嵌入式開發(fā)時,往往采用交叉編譯的方式。</p><p> 所謂交叉編譯是指在宿主機(host)中編輯和編譯程序,并在目標機(target)中運行由主機編譯得
30、到的可執(zhí)行代碼。</p><p> 2.2.2. 交叉開發(fā)環(huán)境的建立</p><p> 在Windows中安裝虛擬機,并在虛擬機中安裝Ubuntu10.04操作系統(tǒng)</p><p> 在Ubuntu中安裝安裝交叉編譯器arm-linux-xxx</p><p> Windows中安裝一些工具軟件,如串口通信,F(xiàn)lash下載的軟件等&l
31、t;/p><p> 第3章 U-Boot的研究與移植</p><p> 第3.1節(jié) U-Boot概述</p><p> U—Boot,全稱Universal Boot Loader,是遵循GPL條款的開放源碼項目,從FADSROM、8xxROM 、PPCBOOT逐步發(fā)展演化而來,其源碼目錄、編譯形式與Linux內核很相似。事實上,不少U—Boot源碼就是相應Lin
32、ux內核源程序的簡化, 尤其是一些設備的驅動程序, 從U-Boot源碼的注釋中能體現(xiàn)這一點。但是U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導, 當前,它還支持NetBSD。VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系統(tǒng)。其目前要支持的目標操作系統(tǒng)包括0P enB S D 、NetBSD、FreeBSD、4 4BSD 、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、Vx
33、Works、LynxOS、pSOS、QNX、RTEMS 和ARTOS。這是u-Boot中Universal的一層含義。另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持 MIPS、x86、ARM 、Nios、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發(fā)目標,即支</p><p> 選擇U-Boot的理由:</p><p><b&g
34、t; 開放源碼</b></p><p> 支持多種嵌入式操作系統(tǒng)內核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS</p><p> 支持多個處理器系列,如PowerPC、ARM、x86、MIPS、XScale</p><p> 較高的可靠性和穩(wěn)定性</p><p> 高度靈活
35、的功能設置,適合U-Boot調試、操作系統(tǒng)不同引導要求、產(chǎn)品發(fā)布等</p><p> 豐富的設備驅動源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤等</p><p> 較為豐富的開發(fā)調試文檔與強大的網(wǎng)絡技術支持</p><p> 3.1.1. U-Boot的目錄結構</p><p> U-
36、Boot的源代碼目錄結構十分清晰,主要的目錄及結構如表3-1所示。</p><p> 表3- 1 U-Boot的代碼結構</p><p> 3.1.2. U-Boot的啟動過程</p><p> U-Boot的啟動過程可以分為三個階段。首先在Flash中運行匯編程序,將Flash中的啟動代碼部分復制到SDRAM中,同時創(chuàng)造環(huán)境準備運行C程序;然后在SDRAM中
37、執(zhí)行,對硬件進行初始化;最后設置內核參數(shù)的標記列表,復制鏡像文件,進入內核的入口函數(shù)。以本開發(fā)板為例來做詳細的說明。</p><p> 在Flash中運行CPU入口函數(shù)/cpu/arm920t/stsrt.s</p><p><b> 具體工作包括:</b></p><p> 設置異常的入口地址和異常處理函數(shù)</p><
38、;p> 配置PLLCON寄存器,確定系統(tǒng)的主頻</p><p><b> 屏蔽看門狗和中斷</b></p><p><b> 初始化I/O寄存器</b></p><p><b> 關閉MMU功能</b></p><p> 初始化寄存器空間,設置刷新頻率</
39、p><p> 將U-Boot的內容復制到SDRAM中</p><p><b> 設置堆棧的大小</b></p><p> 跳轉到SDRAM中執(zhí)行/lib_arm/board.c中的start_armboot()函數(shù)</p><p> 該函數(shù)將完成如下工作:</p><p><b>
40、 設置通用端口</b></p><p><b> 設置處理器類型</b></p><p><b> 設置啟動參數(shù)地址</b></p><p> 設置環(huán)境變量,初始化環(huán)境</p><p><b> 設置串口的波特率</b></p><p&g
41、t;<b> 設置串口的工作方式</b></p><p> 設置ID號、每個分頁的起始地址等信息,并將信息送入到相應的結構體中</p><p> 設置SDRAM的起始地址和大小</p><p> 將環(huán)境變量的地址送到全局變量的結構體中</p><p><b> 開啟中斷</b></p
42、><p> 設置延時等待,從而確定目標板是進入下載模式還是裝載鏡像文件啟動內核</p><p> 裝載模式下系統(tǒng)將內核從Flash和Ramdisk復制到SDRAM中</p><p> 第3.2節(jié) U-Boot的移植</p><p> 基于此開發(fā)板的U-Boot天嵌已有提供,但從移植的角度考慮,主要修改一下文件(以下目錄是基于天嵌的U-Bo
43、ot):</p><p> 目標板的頭文件,位于目錄/include/configs/EmbedSky.h</p><p> 目標板的.c源文件,位于目錄/board/EmbedSky/EmbedSky。這是SDRAM的驅動程序</p><p> Flash的驅動程序,位于目錄/board/EmbedSky/flash.c</p><p&g
44、t; 串口驅動,位于目錄/cpu/arm920t/s3c24x0/serial.c</p><p> 在移植的過程中,有下列一些需要注意的問題:</p><p> U-Boot移植參考板</p><p> 這是進行U-Boot移植首先要明確的。可以根據(jù)目標板上CPU、FLASH、SDRAM的情況,以盡可能相一致為原則,先找出一個與所移植目標板為同一個或同一系
45、列處理器的U-Boot支持板為移植參考板。對U-Boot移植新手,建議依照循序漸進的原則,目標板文件名暫時先用移植參考板的名稱,在逐步熟悉U-Boot移植基礎上,再考慮給目標板重新命名。在實際移植過程中,可用Linux命令查找移植參考板的特定代碼,如grep –r EmbedSky ./ 可確定出在U-Boot中與EmbedSky板有關的代碼,依此對照目標板實際進行屏蔽或修改。同時應不局限于移植參考板中的代碼,要廣泛借鑒U-Boot中已
46、有的代碼更好地實現(xiàn)一些具體的功能。</p><p> U-Boot燒寫地址</p><p> 不同目標板,對U-Boot在FLASH中存放地址要求不盡相同。事實上,這是由處理器中斷復位向量來決定的。也就是說,U-Boot燒寫具體位置是由硬件決定的,而不是程序設計來選擇的。程序中相應U-Boot起始地址必須與硬件所確定的硬件復位向量相吻合。</p><p> C
47、PU寄存器參數(shù)設置</p><p> 根據(jù)處理器系列、類型不同,寄存器名稱與作用有一定差別。必須根據(jù)目標板的實際,進行合理配置。一個較為可行和有效的方法,就是借鑒參考移植板的配置,再根據(jù)目標板實際,進行合理修改。這是一個較費功夫和考驗耐力的過程,需要仔細對照處理器各寄存器定義、參考設置、目標板實際作出選擇并不斷測試。。</p><p><b> 串口調試</b>&
48、lt;/p><p> 能從串口輸出信息,即使是亂碼,也可以說U-Boot移植取得了實質性突破。串口是否有輸出,除了與串口驅動相關外,還與FLASH相關的寄存器設置有關。因為U-Boot是從FLASH中被引導啟動的,如果FLASH設置不正確,U-Boot代碼讀取和執(zhí)行就會出現(xiàn)一些問題。因此,還需要就FLASH的相關寄存器設置進行一些參數(shù)調試。同時,要注意串口收發(fā)芯片相關引腳工作波形。依據(jù)筆者調試情況,如果串口無輸出或
49、出現(xiàn)亂碼,一種可能就是該芯片損壞或工作不正常。</p><p> 與啟動 FLASH相關的寄存器BR0、OR0的參數(shù)設置</p><p> 應根據(jù)目標板FLASH的數(shù)據(jù)手冊與BR0和OR0的相關位含義進行合理設置。這不僅關系到FLASH能否正常工作,而且與串口調試有直接的關聯(lián)。</p><p><b> 關于CPLD電路</b></
50、p><p> 目標板上是否有CPLD電路絲毫不會影響U-Boot的移植與嵌入式操作系統(tǒng)的正常運行。事實上,CPLD電路是一個集中將板上電路的一些邏輯關系可編程設置的一種實現(xiàn)方法。其本身所起的作用就是實現(xiàn)一些目標板所需的脈沖信號和電路邏輯,其功能完全可以用一些邏輯電路與CPU口線來實現(xiàn)。</p><p><b> SDRAM的驅動</b></p><
51、p> 串口能輸出以后,U-Boot移植是否順利基本取決于SDRAM的驅動是否正確。與串口調試相比,這部分工作更為核心,難度更大。MPC8xx目標板SDRAM驅動涉及三部分。一是相關寄存器的設置;二是UPM表;三是SDRAM上電初始化過程。任何一部分有問題,都會影響U-Boot、嵌入式操作系統(tǒng)甚至應用程序的穩(wěn)定、可靠運行。所以說,SDRAM的驅動不僅關系到U-Boot本身能否正常運行,而且還與后續(xù)部分相關,是相當關鍵的部分。<
52、;/p><p><b> 補充功能的添加</b></p><p> 在獲得一個能工作的U-Boot后,就可以根據(jù)目標板和實際開發(fā)需要,添加一些其它功能支持。如以太網(wǎng)、LCD、NVRAM等。與串口和SDRAM調試相比,在已有基礎之上,這些功能添加還是較為容易的。大多只是在參考現(xiàn)有源碼的基礎上,進行一些修改和配置。</p><p> 另外,如果在
53、自主設計的主板上移植U-Boot,那么除了考慮上述軟件因素以外,還需要排查目標板硬件可能存在的問題。如原理設計、PCB布線、元件好壞。在移植過程中,敏銳判斷出故障態(tài)是硬件還是軟件問題,往往是關系到項目進度甚至移植成敗的關鍵,相應難度會增加許多。</p><p> 第4章 Linux內核的研究與移植</p><p> Linux內核移植是開發(fā)適合于自己特定硬件平臺系統(tǒng)的重要部分,只有在b
54、ootloader引導內核啟動之后,才能運行自己的應用程序,所以掌握內核移植技術是系統(tǒng)開發(fā)的重要基礎。</p><p> 第4.1節(jié) Linux內核結構</p><p> Linux內核主要由5個子系統(tǒng)組成:進程調度、內存管理、虛擬文件系統(tǒng)、網(wǎng)絡接口、進程間通信。</p><p> 進程調度模塊(SCHED)用來負責控制進程對CPU資源的使用。所采取的調度策略
55、是各進程能公平合理地訪問CPU,同時保證內核能及時地執(zhí)行硬件操作。Linux使用了簡單的基于優(yōu)先級的進程調度算法選擇新的進程。 </p><p> 內存管理模塊(MM)用于確保所有進程能夠安全地共享機器主內存,同時,內存管理模塊還支持虛擬內存管理方式,使得Linux支持進程使用比實際內存空間更多的內存容量。并可以利用文件系統(tǒng)把暫時不用的內存數(shù)據(jù)塊交換到外部存儲設備上去,當需要時再交換回來。 內存管理從邏輯上分為
56、硬件無關部分和硬件有關部分。硬件無關部分提供了進程的映射和邏輯內存的對換;硬件有關部分為內存管理硬件提供了虛擬接口。</p><p> 文件系統(tǒng)模塊(VFS)用于支持對外部設備的驅動和存儲。虛擬文件系統(tǒng)模塊通過向所有的外部存儲設備提供一個通用的文件接口,隱藏了各種硬件設備的不同細節(jié)。從而提供并支持與其他操作系統(tǒng)兼容的多種文件系統(tǒng)格式。 </p><p> 進程間通信模塊子系統(tǒng)(IPC)
57、用于支持多種進程間的信息交換方式。 </p><p> 網(wǎng)絡接口模塊(NET)提供對多種網(wǎng)絡通信標準的訪問并支持許多網(wǎng)絡硬件。 網(wǎng)絡接口可分為網(wǎng)絡協(xié)議和網(wǎng)絡驅動程序。網(wǎng)絡協(xié)議部分負責實現(xiàn)每一種可能的網(wǎng)絡傳輸協(xié)議;網(wǎng)絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。</p><p> 圖4- 1 Linux內核系統(tǒng)模塊結構及相互依賴關系</p>
58、<p> 由上圖可以看出,所有的模塊都與進程調度模塊存在依賴關系。因為它們都需要依靠進程調度程序來掛起(暫停)或重新運行它們的進程。通常,一個模塊會在等待硬件操作期間被掛起,而在操作完成后才可繼續(xù)運行。例如,當一個進程試圖將一數(shù)據(jù)塊寫到軟盤上去時,軟盤驅動程序就可能在啟動軟盤旋轉期間將該進程置為掛起等待狀態(tài),而在軟盤進入到正常轉速后再使得該進程能繼續(xù)運行。另外3個模塊也是由于類似的原因而與進程調度模塊存在依賴關系。</
59、p><p> 其他幾個模塊的依賴關系有些不太明顯,太同樣也很重要。進程調度子系統(tǒng)需要使用內存管理來調整一特定進程所使用的物理內存空間。進程通信子系統(tǒng)則需要依靠內存管理器來支持共享內存通信機制。這種通信機制允許兩個進程訪問內存的同一區(qū)域以進行進程間信息的交換。虛擬文件系統(tǒng)也會使用網(wǎng)絡接口來支持網(wǎng)絡文件系統(tǒng)(NFS),同樣也能使用內存管理子系統(tǒng)提供內存虛擬盤(ramdisk)設備。而內存管理子系統(tǒng)也會使用文件系統(tǒng)來支持
60、內存數(shù)據(jù)塊的交換操作。</p><p> 除了這些依賴關系外,內核中的所有子系統(tǒng)還要依賴于一些共同的資源。這些資源包括所有子系統(tǒng)都會調用的內存分配和回收函數(shù)、打印警告或出錯信息函數(shù)以及一些系統(tǒng)調試函數(shù)。從單內核的角度可以把內核結構描述成如圖4-2所示的結構框圖。</p><p> 圖4- 2 Linux內核結構框圖</p><p> 第4.2節(jié) Linux內核
61、的編譯</p><p> Linux源代碼只有經(jīng)過編譯之后,才能在開發(fā)板上運行,下面詳述具體內容。</p><p> 4.2.1. 編譯準備</p><p> 從http://www.kernel.org/pub/linux/kernel/v2.6/網(wǎng)址中下載linux-2.6.30.4.tar.bz2內核到到工作目錄中進行解壓,進入解壓后的工作目錄。<
62、/p><p> 用vi打開目錄下的Makefile,指明交叉編譯器</p><p> #vi Makefile</p><p> 在193行“ARCH ?= (SUBARCH)”和194行“CROSS_COMPILE ?=”將其改為:</p><p> ARCH=arm</p><p> CROSS_COMP
63、ILE=arm-linux-</p><p> 設置PATH環(huán)境變量,使其可以找到交叉編譯工具鏈(我的交叉編譯工具在~/kernel/embedsky/opt/EmbedSky/4.3.3/bin下)</p><p> export PATH=$PATH:~/kernel/embedsky/opt/EmbedSky/4.3.3/bin</p><p> 修
64、改平臺的時鐘頻率,以滿足開發(fā)板的工作頻率。修改文件arch/arm/mach-s3c2440/math-smdk2440.c的163行,把16934400改為12000000,因為開發(fā)板使用的就是12MHz的外部時鐘源輸入。</p><p> TQ2440開發(fā)板使用的uboot中設定了機器碼為168,所以內核中需要修改機器碼,否側會出現(xiàn)不能啟動的情況。機器碼保存在內核源代碼的“arch/arm/tools/ma
65、ch-types”文件中,在379行,把原來的362改為168保存即可。</p><p> 4.2.2. Nand Flash驅動移植</p><p> 進行Nand Flash的移植,其實Linux里面已經(jīng)做好了Nand Flash的驅動,我們只需要就行修改就可以進行使用了。</p><p> 修改內核源碼“arch/arm/plat-s3c24xx/com
66、mon-smdk.c”文件,在文件的109行有一個結構體名為:smdk_default_nand_part[],記載了Nand Flash的分區(qū)信息,將其修改為如下所表示:</p><p> static struct mtd_partition smdk_default_nand_part[]={</p><p><b> [0] = {</b></p&g
67、t;<p> .name=“uboot”,</p><p> .offset=0x00000000,</p><p> .size=0x00040000,</p><p><b> },</b></p><p><b> [1] = {</b></p>
68、<p> .name=“kernel”,</p><p> .offset=0x00200000,</p><p> .size=0x00200000,</p><p><b> },</b></p><p><b> [2] = {</b></p>
69、<p> .name=“yaffs2”,</p><p> .offset=0x00400000,</p><p> .size=0x0FB80000,</p><p><b> }</b></p><p><b> };</b></p><p&
70、gt; 修改Nand Flash的讀寫匹配時間,修改common-smdk.c文件修改前165行的smdk_nand_info結構體,修改內容如下:(這部分不做也可)</p><p> static struct s3c2410_platform_nand smdk_nand_info = {</p><p> .tacls= 10,</p><p>
71、 .twrph0= 25,</p><p> .twrph1= 10,</p><p> .nr_sets= ARRAY_SIZE(smdk_nand_sets),</p><p> .sets= smdk_nand_sets,</p><p><b> };</b></p>
72、<p> 修改內核源代碼“drivers/mtd/nand/Kconfig”文件,添加對各種容量Nand Flash的支持,在165行處添加如下內容:</p><p><b> choice</b></p><p> prompt“Nand Flash Capacity select”</p><p> depends o
73、n MTD</p><p><b> help</b></p><p> EmbedSky Board Nand Flash Capacity select</p><p> config EmbedSky_more_than_256MB_NAND</p><p> boolean“256MB~1G Nand
74、for Board”</p><p> depends on MTD</p><p><b> help</b></p><p> Set 256MB~1GB Nand parts</p><p><b> endchoice</b></p><p> 4.2.3.
75、 配置內核</p><p> Linux內核是一個社區(qū)共同開發(fā)的作品,具備一個現(xiàn)代操作系統(tǒng)的所有功能,并能對絕大多數(shù)硬件提供支持。然而對于具體的開發(fā)板來說,大多數(shù)功能并不需要,為了盡可能減少編譯出來的內核體積,在配置內核時,對需要的功能進行配置和去除不需要的模塊是主要內容。</p><p> 運行 make menuconfig,進入配置菜單界面,如下圖所示:</p>&
76、lt;p> 圖4- 3 配置菜單</p><p> 利用默認配置單做自己的配置單</p><p> 這里推薦的一種做法,就是先調用自帶的一個默認配置單,該配置單在內核源代碼的“arch/arm/configs/”目錄下面,名為:“s3c2410_defconfig”,改配置文件里面選擇了幾乎所有的和s3c24xx系列CPU相關的配置選項,我們完全可以在該配置單的基礎上進行配置。
77、</p><p> 在配置菜單中選擇選項:“Load an Alternate Configuration File”,然后調用剛剛說到的那個配置文件,如圖4-4::</p><p><b> 圖4- 4</b></p><p> 然后進入到如圖4-5所示的界面,輸入剛剛提到的路徑和配置文件名稱回車即可:</p><p
78、> 圖4- 5 加載配置文件</p><p> 然后返回到配置界面,進入到“System Type”選項下的配置單,如圖4-6:</p><p> 圖4- 6 system type選項卡</p><p> 然后對平臺進行配置,如下所示:</p><p> System type ---></p><
79、p> S3C2410 Machines ---></p><p> [*] SMDK 2410/A9M410</p><p> [ ] IPAQ H1940</p><p> [ ] Acer N30 family</p><p> [ ] Simtec Electronics BAST (EB2410ITX)</
80、p><p> [ ] NexVision OTOM Board</p><p> [ ] AML M5900 Series</p><p> [ ] BAST PC104 IRQ support</p><p> [ ] TCT Hammer Board</p><p> [ ] Thorcom VR1000&l
81、t;/p><p> [ ] QT2410</p><p> S3C2412 Machines ---></p><p> [ ] SMDK2413</p><p> [ ] SMDK2412</p><p> [ ] VMSTMS</p><p> S3C2440 Machines
82、 ---></p><p> [ ] Simtec Electronics ANUBIS</p><p> [ ] Simtec IM2440D20 (OSIRIS) module</p><p> [ ] HP iPAQ rx3715</p><p> [*] SMDK2440</p><p> [
83、] NexVision NEXCODER 2440 Light Board</p><p> [*] SMDK2440 with S3C2440 CPU module</p><p> S3C2442 Machines ---></p><p> [ ] SMDK2440 with S3C2442 CPU module</p><p&
84、gt; S3C2443 Machines ---></p><p> [ ] SMDK2443</p><p> 配置完畢這個地方后,退回到最初的配置單。再在配置單中添加上對Nand Flash支持的配置選項,配置如下:</p><p> Device Drivers ---></p><p> <*> Me
85、mory Technology Device (MTD) support ---></p><p> [*] MTD partitioning support</p><p> <*> RedBoot partition table parsing</p><p> [ ] Command line partitiontable parsin
86、g</p><p> <*> Direct char device access to MTD devices</p><p> -*- Common interface to block layer for MTD devices</p><p> <*> Caching block device access to MTD devi
87、ces</p><p> <*> NAND Device Support ---></p><p> [*] NAND Flash support for S3C2410/S3C2440 SoC</p><p> [*] S3C2410 NAND Hardware ECC</p><p> Nand Flash Ca
88、pacity select (256MB~1GB Nand for Board) ---></p><p> (X) 256MB~1GB Nand for EmbedSky Board</p><p> 配置好后,選擇選項“Save an Alternate Configuration File”將其保存為:“.config”文件,因為編譯系統(tǒng)時會調用該文件,如圖4-7、4-8所
89、示:</p><p><b> 圖4- 7</b></p><p><b> 圖4- 8</b></p><p> 保存為“.config”文件后,退出配置單。</p><p> 4.2.4. 編譯鏡像</p><p> 然后輸入:#make zImage,就可以進
90、行編譯了,編譯完畢后,會在內核源碼的“arch/arm/boot/”目錄下面生成名為“zImage”的 ,不過在此之前還需要對相關文件系統(tǒng)的支持,請見下章。</p><p> 第5章 文件系統(tǒng)的移植與制作</p><p> 第5.1 節(jié) yaffs文件系統(tǒng)的研究與移植</p><p> YAFFS(Yet Another Filing System)是第一個專
91、門為NAND Flash存儲器設計的嵌入式文件系統(tǒng),適用于大容量的存儲設備;并且是在GPL(General Public License)協(xié)議下發(fā)布的,可在其網(wǎng)站http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/免費獲得源代碼。</p><p> 在內核中添加對yaffs的支持</p><p> 得到補丁包后,解壓補丁,然后打上yaffs2的補丁,
92、在解壓縮后進入源碼目錄執(zhí)行:</p><p> #./patch-ker.shc~/opt/EmbedSky/linux-2.6.30.4/</p><p> 注:c后面為你內核的目錄。</p><p> 此時到內核源代碼的“fs/”目錄下面添加了一個名為“yaffs2”的目錄,同時fs目錄下面的“Makefile”文件和“Kconfig”文件也添加了ya
93、ffs2的配置和編譯條件。</p><p> 在配置單中添加對yaffs的支持</p><p> 執(zhí)行#make menuconfig,進入配置單,對File system選項進行如下配置:</p><p> File system ---></p><p> < > Second extended fs suppo
94、rt</p><p> < > Ext3 journalling file system support</p><p> < > Kernel automounter support</p><p> < > Kernel automounter version 4 support (also support v3)<
95、;/p><p> < > Filesystem in Userpace support</p><p> CD-ROM/DVD Filesystems ---></p><p> <*> ISO 9660 CDROM file system support</p><p> [ ] Microsoft Jol
96、iet CDROM extensions</p><p> [ ] Transparent decompression extension</p><p> < > UDF file system support</p><p> DOS/FAT/NT Filesystems ---></p><p> <*&
97、gt; MSDOS fs support</p><p> <*> VFAT(Windows-95) fs support</p><p> (437) Default codepage for FAT</p><p> (iso8859-1) Default iocharset for FAT</p><p> <
98、 > NTFS file system support</p><p> Pseudo filesystem</p><p> [*] Virtual memory file system support(former shm fs)</p><p> [ ] Tmpfs POSIX Access Control Lists</p><
99、;p> <*> Userspace-driven configuration filesystem</p><p> Miscellaneous filesystems ---></p><p> <*> YAFFS2 file system support</p><p> -*- 512 byte/page devic
100、es</p><p> [ ] Use older-style on-NAND data format with pageStatus byte</p><p> [ ] Lets Yaffs do its own ECC</p><p> -*- 2048 byte(or larger)/page devices</p><p>
101、[*] Autoselect yaffs2 format</p><p> [ ] Disable lazy loading</p><p> [ ] Turn off wide tnodes</p><p> [ ] Force chunk erase check</p><p> [ ] Cache short names in
102、RAM</p><p> -*- Native language support ---></p><p> --- Native language support</p><p> (iso8859-1) Default NLS Option</p><p> <*> Codepage 437 (United St
103、ates, Canada)</p><p> <*> Simplified Chinese charset(CP936, GB2312)</p><p> <*> NLS ISO 8859-1 (Latin 1;Western European Languages)</p><p> <*> NLS UTF-8</p&
104、gt;<p> 配置好之后,保存配置單位“.config”文件后,編譯出鏡像。</p><p> 第5.2 節(jié) 文件系統(tǒng)的制作</p><p> 5.2.1. 編譯Busybox</p><p> 制作文件系統(tǒng),首先需要用busybox編譯出文件系統(tǒng)所需要的應用程序,然后我們再做文件系統(tǒng)。</p><p> 獲取Bus
105、ybox源碼</p><p> Busybox的源代碼可在網(wǎng)址http://www.busybox.net/downloads/獲得,本人使用的是最新版busybox-1.18.3.tar.bz2,解壓縮到自己的目錄,并進入busybox的主目錄。</p><p> 修改并配置Busybox</p><p> 修改Makefile文件,將編譯器和平臺改成我們所
106、使用的,如下:</p><p> CROSS_COMPILE = arm-linux-</p><p> ARCH = arm</p><p> 然后輸入:#make menuconfig,進入配置菜單:</p><p> 圖5- 1 busybox配置菜單</p><p> Busybox Settings
107、 ---></p><p> Build Option ---></p><p> [*]Build Busybox as a static binary (no shared libs)</p><p> 這個選項是一定要選擇的,這樣才能把busybox編譯成靜態(tài)的可執(zhí)行文件,運行時才獨立于其他函數(shù)庫。否則必須要其他庫文件才能運行,在單一個lin
108、ux內核不能使他正常工作。</p><p> Busybox Settings ---></p><p> Installation Options (“make install” behavior) ---></p><p> (./_install) Busybox installation prefix</p><p>
109、; 這個選項是設置make install后,busybox的安裝目錄,這里默認是放在_install目錄下。</p><p> 其余的選項使用默認的配置即可,選擇“Save Configuration to an Alternate”保存并退出。</p><p> 編譯并安裝Busybox</p><p> 執(zhí)行指令:#make;makeinstall進行
110、Busybox的編譯,編譯完成后會在busybox-1.18.3目錄中生成一個名為“_install”的目錄,里面存放著一些可執(zhí)行的文件,目錄圖5-2:</p><p> 圖5- 2 _install目錄</p><p> 完成busybox的編譯之后,我們就可以進行文件系統(tǒng)的構建了。</p><p> 5.2.2. 文件系統(tǒng)的構建</p>&l
111、t;p><b> 構建框架</b></p><p> 建立一個名為“root_2.6.30.4”的目錄,將busybox編譯出來的“_install”目錄下的所有文件拷貝到該目錄下,然后新建“dev”、“mnt”、“opt”、“proc”、“root”、“sys”、“temp”、“var”和“web”目錄,同時在原有的“usr”目錄下面新建一個“l(fā)ib”和“share”目錄。<
112、;/p><p><b> 添加內容</b></p><p><b> “dev”目錄:</b></p><p> 下面的內容在內核掛載完畢文件系統(tǒng)后,系統(tǒng)會使用mdev自動建立。不過mdev是調用init進程來啟動的,在使用mdev構建“dev”目錄前,init進程需要用到“/dev/console/”和“/dev/nu
113、ll”這兩個設備文件,所以,我們需要在制作文件系統(tǒng)時靜態(tài)創(chuàng)建這兩個設備文件,在“dev”目錄下執(zhí)行:</p><p> #mknod console c 5 1</p><p> #mknod null c 1 3</p><p><b> “etc”目錄:</b></p><p> 用來存放系統(tǒng)的配置文件。在“
114、etc/”目錄下面需要建立的文件:</p><p> fstab:指明需要掛載的文件系統(tǒng);</p><p> profile:用戶環(huán)境配置文件;</p><p> inittab:init進程的配置文件;</p><p> init.d目錄:啟動文件目錄,該目錄下面有個“rc”,里面存放了系統(tǒng)啟動時配置以及自啟動加載的進程等;<
115、/p><p> resolv.conf:存放DNS信息的文件,訪問外網(wǎng)時需要DNS的信息。</p><p> 配置文件可以從建立好的文件系統(tǒng)中直接拷貝。其它的目錄大都為空目錄,或是從已經(jīng)存在的文件系統(tǒng)中直接拷貝。</p><p> 到這里,文件系統(tǒng)的框架就基本搞好了,然后使用制作yaffs文件系統(tǒng)的軟件,把它做出yaffs文件系統(tǒng)的鏡像就可以使用了。使用如下命令制
116、作:</p><p> #mkyaffs2image root_2.6.30.4 root_2.6.30.4.bin</p><p> 到此文件系統(tǒng)已經(jīng)制作完畢,把制作好的鏡像文件root_2.6.30.4.bin復制出來,燒寫到開發(fā)板中,就可以運行了。</p><p><b> 結論</b></p><p>
117、嵌入式linux的移植涉及到啟動程序u-boot的移植、linux內核的移植、以及文件系統(tǒng)的制作。編譯完成各部分之后還需對目標板進行燒寫,按照順序燒寫u-boot、linux內核、文件系統(tǒng)到flash中。本文作者經(jīng)過多次試驗失敗之后,終于成功的在S3C2440開發(fā)板上移植了Linux系統(tǒng)。完成了時下熱門的ARM+Linux的嵌入式系統(tǒng)的移植。系統(tǒng)建立好后我們就可以根據(jù)需要在系統(tǒng)上面進行驅動的開發(fā)和上層應用程序的開發(fā)。我們現(xiàn)在所移植的系統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于ARM Cortex-A9的嵌入式Linux內核移植研究與實現(xiàn).pdf
- 基于ARM的嵌入式Linux移植與裁剪研究.pdf
- 基于ARM的嵌入式LINUX移植研究與實現(xiàn).pdf
- 基于ARM的嵌入式linux系統(tǒng)移植研究.pdf
- 基于ARM的嵌入式Linux可搶占內核的設計與實現(xiàn).pdf
- 基于2.6內核的嵌入式linux研究
- linux2.6內核到arm嵌入式平臺的移植及實時性測試
- 基于ARM的嵌入式Linux系統(tǒng)移植的研究與實現(xiàn).pdf
- 基于ARM的Linux嵌入式系統(tǒng)移植的研究與應用.pdf
- 嵌入式Linux實時內核RTAI移植與測試.pdf
- ARM11的嵌入式免疫Linux內核研究.pdf
- 嵌入式Linux內核裁剪及移植的研究與實現(xiàn).pdf
- 畢業(yè)論文基于arm和linux的嵌入式數(shù)碼相框系統(tǒng)設計
- 基于ARM11的嵌入式linux系統(tǒng)移植與實現(xiàn).pdf
- 基于ARM9的嵌入式Linux應用與移植性研究.pdf
- 嵌入式Linux內核研究.pdf
- 基于ARM的嵌入式Linux操作系統(tǒng)移植.pdf
- 基于ARM的嵌入式Linux研究與實現(xiàn).pdf
- 基于ARM的嵌入式系統(tǒng)內核移植及實時性研究.pdf
- 基于ARM的嵌入式Linux操作系統(tǒng)的移植.pdf
評論
0/150
提交評論