

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 基于ARM的嵌入式Linux內(nèi)核的研究與移植</p><p> 【摘要】:本文首先介紹了當(dāng)前嵌入式發(fā)展?fàn)顩r,以及一些常用的嵌入式系統(tǒng)。接下來(lái)講述了一些linux系統(tǒng)的知識(shí)。在移植前還介紹了我們所使用的開(kāi)發(fā)平臺(tái)以及與移植相關(guān)的一些硬件參數(shù)。就如PC機(jī)一樣,系統(tǒng)的啟動(dòng)需要啟動(dòng)程序的引導(dǎo),嵌入式系統(tǒng)也是一樣。在本文我們使用的引導(dǎo)程序是u-boot,所以我們對(duì)u-boot的啟動(dòng)過(guò)程進(jìn)行了講解,并根
2、據(jù)我們的開(kāi)發(fā)板進(jìn)行修改編譯,最后可成功引導(dǎo)我們的開(kāi)發(fā)板。接下來(lái)再對(duì)我們的內(nèi)核進(jìn)行相應(yīng)的修改,主要參考的還是我們的硬件平臺(tái),修改的地方有時(shí)鐘、flash驅(qū)動(dòng)等,編譯好后產(chǎn)生bzImage內(nèi)核文件。要想一個(gè)linux系統(tǒng)能正確運(yùn)行我們還需要文件系統(tǒng)的支持,本文使用的文件系統(tǒng)是yaffs,在制作文件系統(tǒng)時(shí)我們還要編譯busybox產(chǎn)生linux的常用命令集。我們移植的u-boot、內(nèi)核文件、文件系統(tǒng)構(gòu)成了嵌入式linux操作系統(tǒng),現(xiàn)在我們就可
3、以在系統(tǒng)上面進(jìn)行驅(qū)動(dòng)的開(kāi)發(fā)和應(yīng)用程序的開(kāi)發(fā)。</p><p> 【關(guān)鍵詞】:嵌入式、U-boot、S3C2440、Linux內(nèi)核移植。</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è)、各個(gè)領(lǐng)域,在電子產(chǎn)品中無(wú)處不在。小到手機(jī)、PDA、游戲機(jī)、冰箱、電視機(jī)常用家用電器,大到汽車(chē)、輪船、火車(chē)、飛機(jī)等,處處都有它的聲影,所以嵌入式系統(tǒng)的應(yīng)用領(lǐng)域相當(dāng)廣泛,前景無(wú)比美好。同傳統(tǒng)的通用計(jì)算機(jī)不同,嵌入式系統(tǒng)面向特定應(yīng)用領(lǐng)
7、域,根據(jù)應(yīng)用需求定制開(kāi)發(fā)。</p><p> 一般來(lái)講,可以把由微處理器加上必要的外圍電路,再根據(jù)需求對(duì)微處理器進(jìn)行編程,這樣組成的一個(gè)能夠?qū)崿F(xiàn)一定功能的完整系統(tǒng)叫做嵌入式系統(tǒng)。嵌入式系統(tǒng)式硬件與軟件的統(tǒng)一,嵌入式系統(tǒng)中使用的微處理器叫嵌入式處理器。嵌入式處理器種類(lèi)繁多,本文中使用的三星公司基于ARM的處理器S3C2440。</p><p> 操作系統(tǒng)(Operating System
8、,OS)是一種特殊的系統(tǒng)軟件,它把底層的硬件細(xì)節(jié)封裝起來(lái),為運(yùn)行在它上面的軟件提供一個(gè)抽象的編程接口,同時(shí)它又是系統(tǒng)資源的管理者,管理著系統(tǒng)當(dāng)中的各種軟硬件資源,保證了系統(tǒng)能夠可靠地高速運(yùn)行。而嵌入式操作系統(tǒng)(Embedded Operating System,EOS)指的是在嵌入式系統(tǒng)中使用的操作系統(tǒng)。</p><p> 常見(jiàn)的嵌入式操作系統(tǒng)有:VxWorks、Palm OS、Windows CE、uC/OS
9、-II、嵌入式Linux等。本文中將使用嵌入式Linux,它最大的亮點(diǎn)在于源代碼公開(kāi)并且遵循GPL協(xié)議。</p><p> 此文研究Linux2.6內(nèi)核的移植,并在此基礎(chǔ)上加上啟動(dòng)代碼uboot和yaffs文件系統(tǒng),實(shí)現(xiàn)一個(gè)完整的嵌入式Linux操作系統(tǒng),并運(yùn)行在SamsungS3C2440開(kāi)發(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第一次正式向外公布的時(shí)間),它是UNIX操作系統(tǒng)的一種克隆系統(tǒng)。以后借助于Internet網(wǎng)絡(luò),經(jīng)過(guò)世界各地地計(jì)算機(jī)愛(ài)好者的共同努力,現(xiàn)已經(jīng)成為當(dāng)今世界上使用的最多的一種UNIX類(lèi)操作系統(tǒng),并且使用的人數(shù)還在迅猛
11、增長(zhǎng)。</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計(jì)劃</b></p><p><b&
12、gt; POSIX標(biāo)準(zhǔn)</b></p><p> Internet網(wǎng)絡(luò)</p><p> 上面這5點(diǎn)是Linux誕生、發(fā)展和成長(zhǎng)過(guò)程的五大支柱。UNIX最初的開(kāi)放源代碼版本為linux提供了實(shí)現(xiàn)的基本原理和算法、GNU計(jì)劃為linux系統(tǒng)提供了豐富且免費(fèi)的各種使用工具、POSIX標(biāo)準(zhǔn)的出現(xiàn)為linux提供了實(shí)現(xiàn)與標(biāo)準(zhǔn)兼容系統(tǒng)的參考指南、MINIX操作系統(tǒng)為linux的誕生
13、起到了不可忽缺的參考、Internet是linux成長(zhǎng)和壯大的必要環(huán)境</p><p> 第1.2節(jié) Linux的使用</p><p><b> 1.2.1. 文件</b></p><p> 在Linux系統(tǒng)中“一切都是文件”,普通文件、設(shè)備文件、管道等都是以目錄的形式存在的。一切的操作都是以文件為基礎(chǔ)的。這是Linux得一大特色,也是L
14、inux設(shè)計(jì)上的精巧之處。在Linux系統(tǒng)中,以“.“開(kāi)始的文件是隱藏文件。</p><p><b> 1.2.2. 目錄</b></p><p> 目錄是一種具有目錄屬性的文件。Linux的目錄為樹(shù)形結(jié)構(gòu),且存在唯一的根目錄“/“。根目錄結(jié)構(gòu)和意義入下表:</p><p> 表1- 1 跟目錄結(jié)構(gòu)及意義</p><p
15、> 1.2.3. shell</p><p> shell作為L(zhǎng)inux系統(tǒng)的外殼,為用戶(hù)提供使用操作系統(tǒng)的接口。用戶(hù)在提示符下輸入的命令都由shell先解釋讓后傳給Linux核心。對(duì)用戶(hù)而言,不必關(guān)心一個(gè)命令式建立在shell內(nèi)部還是一個(gè)單獨(dú)的程序。同時(shí)shell本身就是一個(gè)解釋性的程序設(shè)計(jì)語(yǔ)言。</p><p> Linux中有多種shell,其中默認(rèn)使用的是bash,而在
16、嵌入式Linux中則常使用busybox。在命令行執(zhí)行一個(gè)程序時(shí),實(shí)際上是通過(guò)shell來(lái)找到這個(gè)命令,并執(zhí)行的。除了shell自帶的一些命令,其他的命令就是普通的程序。</p><p><b> 第2章 開(kāi)發(fā)環(huán)境</b></p><p> 第2.1節(jié) 硬件平臺(tái)(開(kāi)發(fā)板)</p><p> 2.1.1. 開(kāi)發(fā)板總體結(jié)構(gòu)</p>
17、<p> 本文研究的課題使用的是天嵌科技TQ2440開(kāi)發(fā)板。開(kāi)發(fā)板采用Samsung公司ARM9芯片S3C2440作為CPU,采用64MB的SDRAM和256MB Nand Flash+2MB Nor Flash的雙Flash啟動(dòng)。目標(biāo)板的總體結(jié)構(gòu)如下圖所示:</p><p> 圖2- 1 目標(biāo)板的總體結(jié)構(gòu)</p><p> 2.1.2. 核心板介紹</p>
18、<p> 插針式核心板:采用六層軍工布線(xiàn)設(shè)計(jì),較強(qiáng)的抗震性能,運(yùn)行程序穩(wěn)定高效;</p><p> CPU: 采用三星公司的ARM9芯片的S3C2440AL作為CPU,穩(wěn)定運(yùn)行在400Mhz;</p><p> SDRAM: 64MB的SDRAM芯片;</p><p> FLASH: 256MB Nand Flash+ 2MB Nor Flas
19、h 雙Flash啟動(dòng);</p><p> 電源:專(zhuān)業(yè)電源芯片提供1.25V給CPU供電,3.3V給核心板供電;</p><p> Bootloader:采用功能強(qiáng)大的U-BOOT, 支持一鍵USB下載、TFTP網(wǎng)線(xiàn)下載;</p><p> 擴(kuò)展性:提供多達(dá)192腳的擴(kuò)展接 口,幾乎引出了S3C2440的全部資源,接口均采用2.0間距, 方便客戶(hù)二次開(kāi)發(fā)時(shí)購(gòu)買(mǎi)底
20、板用接口;</p><p> 核心板尺寸: 37mm×78mm。</p><p> 2.1.3. 底板介紹</p><p> 串口: 板載一個(gè)五線(xiàn)異步串行口, 波特率最高115200bps,另外擴(kuò)展出兩個(gè)串口, Wince和linux下均提供三串口源碼;</p><p> 網(wǎng)絡(luò)接口:板載100M 網(wǎng)絡(luò)接口, DM9000網(wǎng)卡
21、, 帶聯(lián)接和傳輸指示燈;</p><p> USB接口:板載USB1. 1 HOST接口,板載USB1. 1 Device接口;</p><p> SD/MMC接口:板載一個(gè)SD卡接口, 可接32GB SD卡;</p><p> 外擴(kuò)IDE接口:集成在底板的總線(xiàn)接口里面,提供linux驅(qū)動(dòng);</p><p> 音頻接口:板載IIS接口
22、芯片UDA1341, 一路立體聲音頻輸出接口可接耳機(jī)或音箱,可錄音;</p><p> LCD和觸摸屏接口: 板上集成了4線(xiàn)電阻式觸摸屏接口的相關(guān)電路;分別有40pin 和50pin LCD接口引出了LCD控制器的全部信號(hào);支持黑白、4級(jí)灰度、16級(jí)灰度、256色、4096色STN液晶屏, 屏幕分辨率可達(dá)到1024*768像素;可接7寸10寸液晶屏;接配套的VGA轉(zhuǎn)接板,實(shí)現(xiàn)VGA輸出;</p>
23、<p> 時(shí)鐘源: 板載RTC內(nèi)部實(shí)時(shí)時(shí)鐘(帶有后備鋰電池);</p><p> 調(diào)試及下載接口: 板載一個(gè)10pinJTAG接口,支持ADS1.2等單步調(diào)試,有配套ADS調(diào)試手冊(cè);</p><p> 復(fù)位電路: 板載一個(gè)復(fù)位按鍵, 采用專(zhuān)用復(fù)位芯片進(jìn)行復(fù)位,穩(wěn)定可靠;</p><p> 電源接口: 5V電源供電, 帶電源開(kāi)關(guān)指示燈;</p&
24、gt;<p> AD功能: 板載可調(diào)電阻接到ADC引腳上用來(lái)驗(yàn)證模數(shù)轉(zhuǎn)換;</p><p> IIC功能: 板載Atmel24C02芯片驗(yàn)證IIC功能;</p><p> PWM功能 : 板載測(cè)試PWM功能的蜂鳴器;</p><p> Camera接口:板載攝像頭接口,可接OV9650,實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控,linux,Wince下均有驅(qū)動(dòng)支 持;&l
25、t;/p><p> 用戶(hù)按鍵: 板載四個(gè)用戶(hù)按鍵;有驅(qū)動(dòng)支持,使用外部中斷;</p><p> 板載外擴(kuò)接口:多達(dá)30多位GPIO, 多達(dá)10多路中斷,16路數(shù)據(jù)線(xiàn), 25路地址線(xiàn),片選信號(hào)等;</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> 對(duì)比度:300:1</b></p><p> 亮度:320cd/m2(流明)</p><p> 使用溫度:-20℃到60℃</p><p> 觸摸屏使用次數(shù):超過(guò)100,000次</p><p> 響應(yīng)時(shí) 間:≤10ms</p><p&
28、gt; 驅(qū)動(dòng)板自帶兩個(gè)接口:40pin的0.5間距的FPC接口和50pin的2.0間距的插針接口;</p><p> 提供5V和3.3V兩種電壓供電,缺省狀態(tài)是3.3V供電.</p><p> 提供接口部分的原理圖,方便您的使用.</p><p> LCD驅(qū)動(dòng)板的尺 寸:103mm×83mm</p><p> 第2.2節(jié)
29、交叉開(kāi)發(fā)環(huán)境</p><p> 2.2.1. 交叉開(kāi)發(fā)環(huán)境的介紹</p><p> 嵌入式系統(tǒng)是專(zhuān)用的計(jì)算機(jī)系統(tǒng),由于其處理能力和存儲(chǔ)能力較弱及特殊的處理器結(jié)構(gòu),使嵌入式系統(tǒng)中不能安裝開(kāi)發(fā)軟件。所以,在進(jìn)行嵌入式開(kāi)發(fā)時(shí),往往采用交叉編譯的方式。</p><p> 所謂交叉編譯是指在宿主機(jī)(host)中編輯和編譯程序,并在目標(biāo)機(jī)(target)中運(yùn)行由主機(jī)編譯得
30、到的可執(zhí)行代碼。</p><p> 2.2.2. 交叉開(kāi)發(fā)環(huán)境的建立</p><p> 在Windows中安裝虛擬機(jī),并在虛擬機(jī)中安裝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,全稱(chēng)Universal Boot Loader,是遵循GPL條款的開(kāi)放源碼項(xiàng)目,從FADSROM、8xxROM 、PPCBOOT逐步發(fā)展演化而來(lái),其源碼目錄、編譯形式與Linux內(nèi)核很相似。事實(shí)上,不少U—Boot源碼就是相應(yīng)Lin
32、ux內(nèi)核源程序的簡(jiǎn)化, 尤其是一些設(shè)備的驅(qū)動(dòng)程序, 從U-Boot源碼的注釋中能體現(xiàn)這一點(diǎn)。但是U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo), 當(dāng)前,它還支持NetBSD。VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系統(tǒng)。其目前要支持的目標(biāo)操作系統(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等諸多常用系列的處理器。這兩個(gè)特點(diǎn)正是U-Boot項(xiàng)目的開(kāi)發(fā)目標(biāo),即支</p><p> 選擇U-Boot的理由:</p><p><b&g
34、t; 開(kāi)放源碼</b></p><p> 支持多種嵌入式操作系統(tǒng)內(nèi)核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS</p><p> 支持多個(gè)處理器系列,如PowerPC、ARM、x86、MIPS、XScale</p><p> 較高的可靠性和穩(wěn)定性</p><p> 高度靈活
35、的功能設(shè)置,適合U-Boot調(diào)試、操作系統(tǒng)不同引導(dǎo)要求、產(chǎn)品發(fā)布等</p><p> 豐富的設(shè)備驅(qū)動(dòng)源碼,如串口、以太網(wǎng)、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、鍵盤(pán)等</p><p> 較為豐富的開(kāi)發(fā)調(diào)試文檔與強(qiáng)大的網(wǎng)絡(luò)技術(shù)支持</p><p> 3.1.1. U-Boot的目錄結(jié)構(gòu)</p><p> U-
36、Boot的源代碼目錄結(jié)構(gòu)十分清晰,主要的目錄及結(jié)構(gòu)如表3-1所示。</p><p> 表3- 1 U-Boot的代碼結(jié)構(gòu)</p><p> 3.1.2. U-Boot的啟動(dòng)過(guò)程</p><p> U-Boot的啟動(dòng)過(guò)程可以分為三個(gè)階段。首先在Flash中運(yùn)行匯編程序,將Flash中的啟動(dòng)代碼部分復(fù)制到SDRAM中,同時(shí)創(chuàng)造環(huán)境準(zhǔn)備運(yùn)行C程序;然后在SDRAM中
37、執(zhí)行,對(duì)硬件進(jìn)行初始化;最后設(shè)置內(nèi)核參數(shù)的標(biāo)記列表,復(fù)制鏡像文件,進(jìn)入內(nèi)核的入口函數(shù)。以本開(kāi)發(fā)板為例來(lái)做詳細(xì)的說(shuō)明。</p><p> 在Flash中運(yùn)行CPU入口函數(shù)/cpu/arm920t/stsrt.s</p><p><b> 具體工作包括:</b></p><p> 設(shè)置異常的入口地址和異常處理函數(shù)</p><
38、;p> 配置PLLCON寄存器,確定系統(tǒng)的主頻</p><p><b> 屏蔽看門(mén)狗和中斷</b></p><p><b> 初始化I/O寄存器</b></p><p><b> 關(guān)閉MMU功能</b></p><p> 初始化寄存器空間,設(shè)置刷新頻率</
39、p><p> 將U-Boot的內(nèi)容復(fù)制到SDRAM中</p><p><b> 設(shè)置堆棧的大小</b></p><p> 跳轉(zhuǎn)到SDRAM中執(zhí)行/lib_arm/board.c中的start_armboot()函數(shù)</p><p> 該函數(shù)將完成如下工作:</p><p><b>
40、 設(shè)置通用端口</b></p><p><b> 設(shè)置處理器類(lèi)型</b></p><p><b> 設(shè)置啟動(dòng)參數(shù)地址</b></p><p> 設(shè)置環(huán)境變量,初始化環(huán)境</p><p><b> 設(shè)置串口的波特率</b></p><p&g
41、t;<b> 設(shè)置串口的工作方式</b></p><p> 設(shè)置ID號(hào)、每個(gè)分頁(yè)的起始地址等信息,并將信息送入到相應(yīng)的結(jié)構(gòu)體中</p><p> 設(shè)置SDRAM的起始地址和大小</p><p> 將環(huán)境變量的地址送到全局變量的結(jié)構(gòu)體中</p><p><b> 開(kāi)啟中斷</b></p
42、><p> 設(shè)置延時(shí)等待,從而確定目標(biāo)板是進(jìn)入下載模式還是裝載鏡像文件啟動(dòng)內(nèi)核</p><p> 裝載模式下系統(tǒng)將內(nèi)核從Flash和Ramdisk復(fù)制到SDRAM中</p><p> 第3.2節(jié) U-Boot的移植</p><p> 基于此開(kāi)發(fā)板的U-Boot天嵌已有提供,但從移植的角度考慮,主要修改一下文件(以下目錄是基于天嵌的U-Bo
43、ot):</p><p> 目標(biāo)板的頭文件,位于目錄/include/configs/EmbedSky.h</p><p> 目標(biāo)板的.c源文件,位于目錄/board/EmbedSky/EmbedSky。這是SDRAM的驅(qū)動(dòng)程序</p><p> Flash的驅(qū)動(dòng)程序,位于目錄/board/EmbedSky/flash.c</p><p&g
44、t; 串口驅(qū)動(dòng),位于目錄/cpu/arm920t/s3c24x0/serial.c</p><p> 在移植的過(guò)程中,有下列一些需要注意的問(wèn)題:</p><p> U-Boot移植參考板</p><p> 這是進(jìn)行U-Boot移植首先要明確的。可以根據(jù)目標(biāo)板上CPU、FLASH、SDRAM的情況,以盡可能相一致為原則,先找出一個(gè)與所移植目標(biāo)板為同一個(gè)或同一系
45、列處理器的U-Boot支持板為移植參考板。對(duì)U-Boot移植新手,建議依照循序漸進(jìn)的原則,目標(biāo)板文件名暫時(shí)先用移植參考板的名稱(chēng),在逐步熟悉U-Boot移植基礎(chǔ)上,再考慮給目標(biāo)板重新命名。在實(shí)際移植過(guò)程中,可用Linux命令查找移植參考板的特定代碼,如grep –r EmbedSky ./ 可確定出在U-Boot中與EmbedSky板有關(guān)的代碼,依此對(duì)照目標(biāo)板實(shí)際進(jìn)行屏蔽或修改。同時(shí)應(yīng)不局限于移植參考板中的代碼,要廣泛借鑒U-Boot中已
46、有的代碼更好地實(shí)現(xiàn)一些具體的功能。</p><p> U-Boot燒寫(xiě)地址</p><p> 不同目標(biāo)板,對(duì)U-Boot在FLASH中存放地址要求不盡相同。事實(shí)上,這是由處理器中斷復(fù)位向量來(lái)決定的。也就是說(shuō),U-Boot燒寫(xiě)具體位置是由硬件決定的,而不是程序設(shè)計(jì)來(lái)選擇的。程序中相應(yīng)U-Boot起始地址必須與硬件所確定的硬件復(fù)位向量相吻合。</p><p> C
47、PU寄存器參數(shù)設(shè)置</p><p> 根據(jù)處理器系列、類(lèi)型不同,寄存器名稱(chēng)與作用有一定差別。必須根據(jù)目標(biāo)板的實(shí)際,進(jìn)行合理配置。一個(gè)較為可行和有效的方法,就是借鑒參考移植板的配置,再根據(jù)目標(biāo)板實(shí)際,進(jìn)行合理修改。這是一個(gè)較費(fèi)功夫和考驗(yàn)?zāi)土Φ倪^(guò)程,需要仔細(xì)對(duì)照處理器各寄存器定義、參考設(shè)置、目標(biāo)板實(shí)際作出選擇并不斷測(cè)試。。</p><p><b> 串口調(diào)試</b>&
48、lt;/p><p> 能從串口輸出信息,即使是亂碼,也可以說(shuō)U-Boot移植取得了實(shí)質(zhì)性突破。串口是否有輸出,除了與串口驅(qū)動(dòng)相關(guān)外,還與FLASH相關(guān)的寄存器設(shè)置有關(guān)。因?yàn)閁-Boot是從FLASH中被引導(dǎo)啟動(dòng)的,如果FLASH設(shè)置不正確,U-Boot代碼讀取和執(zhí)行就會(huì)出現(xiàn)一些問(wèn)題。因此,還需要就FLASH的相關(guān)寄存器設(shè)置進(jìn)行一些參數(shù)調(diào)試。同時(shí),要注意串口收發(fā)芯片相關(guān)引腳工作波形。依據(jù)筆者調(diào)試情況,如果串口無(wú)輸出或
49、出現(xiàn)亂碼,一種可能就是該芯片損壞或工作不正常。</p><p> 與啟動(dòng) FLASH相關(guān)的寄存器BR0、OR0的參數(shù)設(shè)置</p><p> 應(yīng)根據(jù)目標(biāo)板FLASH的數(shù)據(jù)手冊(cè)與BR0和OR0的相關(guān)位含義進(jìn)行合理設(shè)置。這不僅關(guān)系到FLASH能否正常工作,而且與串口調(diào)試有直接的關(guān)聯(lián)。</p><p><b> 關(guān)于CPLD電路</b></
50、p><p> 目標(biāo)板上是否有CPLD電路絲毫不會(huì)影響U-Boot的移植與嵌入式操作系統(tǒng)的正常運(yùn)行。事實(shí)上,CPLD電路是一個(gè)集中將板上電路的一些邏輯關(guān)系可編程設(shè)置的一種實(shí)現(xiàn)方法。其本身所起的作用就是實(shí)現(xiàn)一些目標(biāo)板所需的脈沖信號(hào)和電路邏輯,其功能完全可以用一些邏輯電路與CPU口線(xiàn)來(lái)實(shí)現(xiàn)。</p><p><b> SDRAM的驅(qū)動(dòng)</b></p><
51、p> 串口能輸出以后,U-Boot移植是否順利基本取決于SDRAM的驅(qū)動(dòng)是否正確。與串口調(diào)試相比,這部分工作更為核心,難度更大。MPC8xx目標(biāo)板SDRAM驅(qū)動(dòng)涉及三部分。一是相關(guān)寄存器的設(shè)置;二是UPM表;三是SDRAM上電初始化過(guò)程。任何一部分有問(wèn)題,都會(huì)影響U-Boot、嵌入式操作系統(tǒng)甚至應(yīng)用程序的穩(wěn)定、可靠運(yùn)行。所以說(shuō),SDRAM的驅(qū)動(dòng)不僅關(guān)系到U-Boot本身能否正常運(yùn)行,而且還與后續(xù)部分相關(guān),是相當(dāng)關(guān)鍵的部分。<
52、;/p><p><b> 補(bǔ)充功能的添加</b></p><p> 在獲得一個(gè)能工作的U-Boot后,就可以根據(jù)目標(biāo)板和實(shí)際開(kāi)發(fā)需要,添加一些其它功能支持。如以太網(wǎng)、LCD、NVRAM等。與串口和SDRAM調(diào)試相比,在已有基礎(chǔ)之上,這些功能添加還是較為容易的。大多只是在參考現(xiàn)有源碼的基礎(chǔ)上,進(jìn)行一些修改和配置。</p><p> 另外,如果在
53、自主設(shè)計(jì)的主板上移植U-Boot,那么除了考慮上述軟件因素以外,還需要排查目標(biāo)板硬件可能存在的問(wèn)題。如原理設(shè)計(jì)、PCB布線(xiàn)、元件好壞。在移植過(guò)程中,敏銳判斷出故障態(tài)是硬件還是軟件問(wèn)題,往往是關(guān)系到項(xiàng)目進(jìn)度甚至移植成敗的關(guān)鍵,相應(yīng)難度會(huì)增加許多。</p><p> 第4章 Linux內(nèi)核的研究與移植</p><p> Linux內(nèi)核移植是開(kāi)發(fā)適合于自己特定硬件平臺(tái)系統(tǒng)的重要部分,只有在b
54、ootloader引導(dǎo)內(nèi)核啟動(dòng)之后,才能運(yùn)行自己的應(yīng)用程序,所以掌握內(nèi)核移植技術(shù)是系統(tǒng)開(kāi)發(fā)的重要基礎(chǔ)。</p><p> 第4.1節(jié) Linux內(nèi)核結(jié)構(gòu)</p><p> Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:進(jìn)程調(diào)度、內(nèi)存管理、虛擬文件系統(tǒng)、網(wǎng)絡(luò)接口、進(jìn)程間通信。</p><p> 進(jìn)程調(diào)度模塊(SCHED)用來(lái)負(fù)責(zé)控制進(jìn)程對(duì)CPU資源的使用。所采取的調(diào)度策略
55、是各進(jìn)程能公平合理地訪(fǎng)問(wèn)CPU,同時(shí)保證內(nèi)核能及時(shí)地執(zhí)行硬件操作。Linux使用了簡(jiǎn)單的基于優(yōu)先級(jí)的進(jìn)程調(diào)度算法選擇新的進(jìn)程。 </p><p> 內(nèi)存管理模塊(MM)用于確保所有進(jìn)程能夠安全地共享機(jī)器主內(nèi)存,同時(shí),內(nèi)存管理模塊還支持虛擬內(nèi)存管理方式,使得Linux支持進(jìn)程使用比實(shí)際內(nèi)存空間更多的內(nèi)存容量。并可以利用文件系統(tǒng)把暫時(shí)不用的內(nèi)存數(shù)據(jù)塊交換到外部存儲(chǔ)設(shè)備上去,當(dāng)需要時(shí)再交換回來(lái)。 內(nèi)存管理從邏輯上分為
56、硬件無(wú)關(guān)部分和硬件有關(guān)部分。硬件無(wú)關(guān)部分提供了進(jìn)程的映射和邏輯內(nèi)存的對(duì)換;硬件有關(guān)部分為內(nèi)存管理硬件提供了虛擬接口。</p><p> 文件系統(tǒng)模塊(VFS)用于支持對(duì)外部設(shè)備的驅(qū)動(dòng)和存儲(chǔ)。虛擬文件系統(tǒng)模塊通過(guò)向所有的外部存儲(chǔ)設(shè)備提供一個(gè)通用的文件接口,隱藏了各種硬件設(shè)備的不同細(xì)節(jié)。從而提供并支持與其他操作系統(tǒng)兼容的多種文件系統(tǒng)格式。 </p><p> 進(jìn)程間通信模塊子系統(tǒng)(IPC)
57、用于支持多種進(jìn)程間的信息交換方式。 </p><p> 網(wǎng)絡(luò)接口模塊(NET)提供對(duì)多種網(wǎng)絡(luò)通信標(biāo)準(zhǔn)的訪(fǎng)問(wèn)并支持許多網(wǎng)絡(luò)硬件。 網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議;網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)與硬件設(shè)備通訊,每一種可能的硬件設(shè)備都有相應(yīng)的設(shè)備驅(qū)動(dòng)程序。</p><p> 圖4- 1 Linux內(nèi)核系統(tǒng)模塊結(jié)構(gòu)及相互依賴(lài)關(guān)系</p>
58、<p> 由上圖可以看出,所有的模塊都與進(jìn)程調(diào)度模塊存在依賴(lài)關(guān)系。因?yàn)樗鼈兌夹枰揽窟M(jìn)程調(diào)度程序來(lái)掛起(暫停)或重新運(yùn)行它們的進(jìn)程。通常,一個(gè)模塊會(huì)在等待硬件操作期間被掛起,而在操作完成后才可繼續(xù)運(yùn)行。例如,當(dāng)一個(gè)進(jìn)程試圖將一數(shù)據(jù)塊寫(xiě)到軟盤(pán)上去時(shí),軟盤(pán)驅(qū)動(dòng)程序就可能在啟動(dòng)軟盤(pán)旋轉(zhuǎn)期間將該進(jìn)程置為掛起等待狀態(tài),而在軟盤(pán)進(jìn)入到正常轉(zhuǎn)速后再使得該進(jìn)程能繼續(xù)運(yùn)行。另外3個(gè)模塊也是由于類(lèi)似的原因而與進(jìn)程調(diào)度模塊存在依賴(lài)關(guān)系。</
59、p><p> 其他幾個(gè)模塊的依賴(lài)關(guān)系有些不太明顯,太同樣也很重要。進(jìn)程調(diào)度子系統(tǒng)需要使用內(nèi)存管理來(lái)調(diào)整一特定進(jìn)程所使用的物理內(nèi)存空間。進(jìn)程通信子系統(tǒng)則需要依靠?jī)?nèi)存管理器來(lái)支持共享內(nèi)存通信機(jī)制。這種通信機(jī)制允許兩個(gè)進(jìn)程訪(fǎng)問(wèn)內(nèi)存的同一區(qū)域以進(jìn)行進(jìn)程間信息的交換。虛擬文件系統(tǒng)也會(huì)使用網(wǎng)絡(luò)接口來(lái)支持網(wǎng)絡(luò)文件系統(tǒng)(NFS),同樣也能使用內(nèi)存管理子系統(tǒng)提供內(nèi)存虛擬盤(pán)(ramdisk)設(shè)備。而內(nèi)存管理子系統(tǒng)也會(huì)使用文件系統(tǒng)來(lái)支持
60、內(nèi)存數(shù)據(jù)塊的交換操作。</p><p> 除了這些依賴(lài)關(guān)系外,內(nèi)核中的所有子系統(tǒng)還要依賴(lài)于一些共同的資源。這些資源包括所有子系統(tǒng)都會(huì)調(diào)用的內(nèi)存分配和回收函數(shù)、打印警告或出錯(cuò)信息函數(shù)以及一些系統(tǒng)調(diào)試函數(shù)。從單內(nèi)核的角度可以把內(nèi)核結(jié)構(gòu)描述成如圖4-2所示的結(jié)構(gòu)框圖。</p><p> 圖4- 2 Linux內(nèi)核結(jié)構(gòu)框圖</p><p> 第4.2節(jié) Linux內(nèi)核
61、的編譯</p><p> Linux源代碼只有經(jīng)過(guò)編譯之后,才能在開(kāi)發(fā)板上運(yùn)行,下面詳述具體內(nèi)容。</p><p> 4.2.1. 編譯準(zhǔn)備</p><p> 從http://www.kernel.org/pub/linux/kernel/v2.6/網(wǎng)址中下載linux-2.6.30.4.tar.bz2內(nèi)核到到工作目錄中進(jìn)行解壓,進(jìn)入解壓后的工作目錄。<
62、/p><p> 用vi打開(kāi)目錄下的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> 設(shè)置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、改平臺(tái)的時(shí)鐘頻率,以滿(mǎn)足開(kāi)發(fā)板的工作頻率。修改文件arch/arm/mach-s3c2440/math-smdk2440.c的163行,把16934400改為12000000,因?yàn)殚_(kāi)發(fā)板使用的就是12MHz的外部時(shí)鐘源輸入。</p><p> TQ2440開(kāi)發(fā)板使用的uboot中設(shè)定了機(jī)器碼為168,所以?xún)?nèi)核中需要修改機(jī)器碼,否側(cè)會(huì)出現(xiàn)不能啟動(dòng)的情況。機(jī)器碼保存在內(nèi)核源代碼的“arch/arm/tools/ma
65、ch-types”文件中,在379行,把原來(lái)的362改為168保存即可。</p><p> 4.2.2. Nand Flash驅(qū)動(dòng)移植</p><p> 進(jìn)行Nand Flash的移植,其實(shí)Linux里面已經(jīng)做好了Nand Flash的驅(qū)動(dòng),我們只需要就行修改就可以進(jìn)行使用了。</p><p> 修改內(nèi)核源碼“arch/arm/plat-s3c24xx/com
66、mon-smdk.c”文件,在文件的109行有一個(gè)結(jié)構(gòu)體名為: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的讀寫(xiě)匹配時(shí)間,修改common-smdk.c文件修改前165行的smdk_nand_info結(jié)構(gòu)體,修改內(nèi)容如下:(這部分不做也可)</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> 修改內(nèi)核源代碼“drivers/mtd/nand/Kconfig”文件,添加對(duì)各種容量Nand Flash的支持,在165行處添加如下內(nèi)容:</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、 配置內(nèi)核</p><p> Linux內(nèi)核是一個(gè)社區(qū)共同開(kāi)發(fā)的作品,具備一個(gè)現(xiàn)代操作系統(tǒng)的所有功能,并能對(duì)絕大多數(shù)硬件提供支持。然而對(duì)于具體的開(kāi)發(fā)板來(lái)說(shuō),大多數(shù)功能并不需要,為了盡可能減少編譯出來(lái)的內(nèi)核體積,在配置內(nèi)核時(shí),對(duì)需要的功能進(jìn)行配置和去除不需要的模塊是主要內(nèi)容。</p><p> 運(yùn)行 make menuconfig,進(jìn)入配置菜單界面,如下圖所示:</p>&
76、lt;p> 圖4- 3 配置菜單</p><p> 利用默認(rèn)配置單做自己的配置單</p><p> 這里推薦的一種做法,就是先調(diào)用自帶的一個(gè)默認(rèn)配置單,該配置單在內(nèi)核源代碼的“arch/arm/configs/”目錄下面,名為:“s3c2410_defconfig”,改配置文件里面選擇了幾乎所有的和s3c24xx系列CPU相關(guān)的配置選項(xiàng),我們完全可以在該配置單的基礎(chǔ)上進(jìn)行配置。
77、</p><p> 在配置菜單中選擇選項(xiàng):“Load an Alternate Configuration File”,然后調(diào)用剛剛說(shuō)到的那個(gè)配置文件,如圖4-4::</p><p><b> 圖4- 4</b></p><p> 然后進(jìn)入到如圖4-5所示的界面,輸入剛剛提到的路徑和配置文件名稱(chēng)回車(chē)即可:</p><p
78、> 圖4- 5 加載配置文件</p><p> 然后返回到配置界面,進(jìn)入到“System Type”選項(xiàng)下的配置單,如圖4-6:</p><p> 圖4- 6 system type選項(xiàng)卡</p><p> 然后對(duì)平臺(tái)進(jìn)行配置,如下所示:</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> 配置完畢這個(gè)地方后,退回到最初的配置單。再在配置單中添加上對(duì)Nand Flash支持的配置選項(xiàng),配置如下:</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> 配置好后,選擇選項(xiàng)“Save an Alternate Configuration File”將其保存為:“.config”文件,因?yàn)榫幾g系統(tǒng)時(shí)會(huì)調(diào)用該文件,如圖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,就可以進(jìn)
90、行編譯了,編譯完畢后,會(huì)在內(nèi)核源碼的“arch/arm/boot/”目錄下面生成名為“zImage”的 ,不過(guò)在此之前還需要對(duì)相關(guān)文件系統(tǒng)的支持,請(qǐng)見(jiàn)下章。</p><p> 第5章 文件系統(tǒng)的移植與制作</p><p> 第5.1 節(jié) yaffs文件系統(tǒng)的研究與移植</p><p> YAFFS(Yet Another Filing System)是第一個(gè)專(zhuān)
91、門(mén)為NAND Flash存儲(chǔ)器設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲(chǔ)設(shè)備;并且是在GPL(General Public License)協(xié)議下發(fā)布的,可在其網(wǎng)站http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/免費(fèi)獲得源代碼。</p><p> 在內(nèi)核中添加對(duì)yaffs的支持</p><p> 得到補(bǔ)丁包后,解壓補(bǔ)丁,然后打上yaffs2的補(bǔ)丁,
92、在解壓縮后進(jìn)入源碼目錄執(zhí)行:</p><p> #./patch-ker.shc~/opt/EmbedSky/linux-2.6.30.4/</p><p> 注:c后面為你內(nèi)核的目錄。</p><p> 此時(shí)到內(nèi)核源代碼的“fs/”目錄下面添加了一個(gè)名為“yaffs2”的目錄,同時(shí)fs目錄下面的“Makefile”文件和“Kconfig”文件也添加了ya
93、ffs2的配置和編譯條件。</p><p> 在配置單中添加對(duì)yaffs的支持</p><p> 執(zhí)行#make menuconfig,進(jìn)入配置單,對(duì)File system選項(xiàng)進(jìn)行如下配置:</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)所需要的應(yīng)用程序,然后我們?cè)僮鑫募到y(tǒng)。</p><p> 獲取Bus
105、ybox源碼</p><p> Busybox的源代碼可在網(wǎng)址http://www.busybox.net/downloads/獲得,本人使用的是最新版busybox-1.18.3.tar.bz2,解壓縮到自己的目錄,并進(jìn)入busybox的主目錄。</p><p> 修改并配置Busybox</p><p> 修改Makefile文件,將編譯器和平臺(tái)改成我們所
106、使用的,如下:</p><p> CROSS_COMPILE = arm-linux-</p><p> ARCH = arm</p><p> 然后輸入:#make menuconfig,進(jìn)入配置菜單:</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> 這個(gè)選項(xiàng)是一定要選擇的,這樣才能把busybox編譯成靜態(tài)的可執(zhí)行文件,運(yùn)行時(shí)才獨(dú)立于其他函數(shù)庫(kù)。否則必須要其他庫(kù)文件才能運(yùn)行,在單一個(gè)lin
108、ux內(nèi)核不能使他正常工作。</p><p> Busybox Settings ---></p><p> Installation Options (“make install” behavior) ---></p><p> (./_install) Busybox installation prefix</p><p>
109、; 這個(gè)選項(xiàng)是設(shè)置make install后,busybox的安裝目錄,這里默認(rèn)是放在_install目錄下。</p><p> 其余的選項(xiàng)使用默認(rèn)的配置即可,選擇“Save Configuration to an Alternate”保存并退出。</p><p> 編譯并安裝Busybox</p><p> 執(zhí)行指令:#make;makeinstall進(jìn)行
110、Busybox的編譯,編譯完成后會(huì)在busybox-1.18.3目錄中生成一個(gè)名為“_install”的目錄,里面存放著一些可執(zhí)行的文件,目錄圖5-2:</p><p> 圖5- 2 _install目錄</p><p> 完成busybox的編譯之后,我們就可以進(jìn)行文件系統(tǒng)的構(gòu)建了。</p><p> 5.2.2. 文件系統(tǒng)的構(gòu)建</p>&l
111、t;p><b> 構(gòu)建框架</b></p><p> 建立一個(gè)名為“root_2.6.30.4”的目錄,將busybox編譯出來(lái)的“_install”目錄下的所有文件拷貝到該目錄下,然后新建“dev”、“mnt”、“opt”、“proc”、“root”、“sys”、“temp”、“var”和“web”目錄,同時(shí)在原有的“usr”目錄下面新建一個(gè)“l(fā)ib”和“share”目錄。<
112、;/p><p><b> 添加內(nèi)容</b></p><p><b> “dev”目錄:</b></p><p> 下面的內(nèi)容在內(nèi)核掛載完畢文件系統(tǒng)后,系統(tǒng)會(huì)使用mdev自動(dòng)建立。不過(guò)mdev是調(diào)用init進(jìn)程來(lái)啟動(dòng)的,在使用mdev構(gòu)建“dev”目錄前,init進(jìn)程需要用到“/dev/console/”和“/dev/nu
113、ll”這兩個(gè)設(shè)備文件,所以,我們需要在制作文件系統(tǒng)時(shí)靜態(tài)創(chuàng)建這兩個(gè)設(shè)備文件,在“dev”目錄下執(zhí)行:</p><p> #mknod console c 5 1</p><p> #mknod null c 1 3</p><p><b> “etc”目錄:</b></p><p> 用來(lái)存放系統(tǒng)的配置文件。在“
114、etc/”目錄下面需要建立的文件:</p><p> fstab:指明需要掛載的文件系統(tǒng);</p><p> profile:用戶(hù)環(huán)境配置文件;</p><p> inittab:init進(jìn)程的配置文件;</p><p> init.d目錄:?jiǎn)?dòng)文件目錄,該目錄下面有個(gè)“rc”,里面存放了系統(tǒng)啟動(dòng)時(shí)配置以及自啟動(dòng)加載的進(jìn)程等;<
115、/p><p> resolv.conf:存放DNS信息的文件,訪(fǎng)問(wèn)外網(wǎng)時(shí)需要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ù)制出來(lái),燒寫(xiě)到開(kāi)發(fā)板中,就可以運(yùn)行了。</p><p><b> 結(jié)論</b></p><p>
117、嵌入式linux的移植涉及到啟動(dòng)程序u-boot的移植、linux內(nèi)核的移植、以及文件系統(tǒng)的制作。編譯完成各部分之后還需對(duì)目標(biāo)板進(jìn)行燒寫(xiě),按照順序燒寫(xiě)u-boot、linux內(nèi)核、文件系統(tǒng)到flash中。本文作者經(jīng)過(guò)多次試驗(yàn)失敗之后,終于成功的在S3C2440開(kāi)發(fā)板上移植了Linux系統(tǒng)。完成了時(shí)下熱門(mén)的ARM+Linux的嵌入式系統(tǒng)的移植。系統(tǒng)建立好后我們就可以根據(jù)需要在系統(tǒng)上面進(jìn)行驅(qū)動(dòng)的開(kāi)發(fā)和上層應(yīng)用程序的開(kāi)發(fā)。我們現(xiàn)在所移植的系統(tǒng)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于ARM Cortex-A9的嵌入式Linux內(nèi)核移植研究與實(shí)現(xiàn).pdf
- 基于ARM的嵌入式Linux移植與裁剪研究.pdf
- 基于ARM的嵌入式LINUX移植研究與實(shí)現(xiàn).pdf
- 基于ARM的嵌入式linux系統(tǒng)移植研究.pdf
- 基于ARM的嵌入式Linux可搶占內(nèi)核的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 基于2.6內(nèi)核的嵌入式linux研究
- linux2.6內(nèi)核到arm嵌入式平臺(tái)的移植及實(shí)時(shí)性測(cè)試
- 基于ARM的嵌入式Linux系統(tǒng)移植的研究與實(shí)現(xiàn).pdf
- 基于ARM的Linux嵌入式系統(tǒng)移植的研究與應(yīng)用.pdf
- 嵌入式Linux實(shí)時(shí)內(nèi)核RTAI移植與測(cè)試.pdf
- ARM11的嵌入式免疫Linux內(nèi)核研究.pdf
- 嵌入式Linux內(nèi)核裁剪及移植的研究與實(shí)現(xiàn).pdf
- 畢業(yè)論文基于arm和linux的嵌入式數(shù)碼相框系統(tǒng)設(shè)計(jì)
- 基于ARM11的嵌入式linux系統(tǒng)移植與實(shí)現(xiàn).pdf
- 基于ARM9的嵌入式Linux應(yīng)用與移植性研究.pdf
- 嵌入式Linux內(nèi)核研究.pdf
- 基于ARM的嵌入式Linux操作系統(tǒng)移植.pdf
- 基于ARM的嵌入式Linux研究與實(shí)現(xiàn).pdf
- 基于ARM的嵌入式系統(tǒng)內(nèi)核移植及實(shí)時(shí)性研究.pdf
- 基于ARM的嵌入式Linux操作系統(tǒng)的移植.pdf
評(píng)論
0/150
提交評(píng)論