基于S3C2440的嵌入式LINUX操作系統(tǒng)內(nèi)核研究_第1頁(yè)
基于S3C2440的嵌入式LINUX操作系統(tǒng)內(nèi)核研究_第2頁(yè)
基于S3C2440的嵌入式LINUX操作系統(tǒng)內(nèi)核研究_第3頁(yè)
基于S3C2440的嵌入式LINUX操作系統(tǒng)內(nèi)核研究_第4頁(yè)
基于S3C2440的嵌入式LINUX操作系統(tǒng)內(nèi)核研究_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 學(xué)校代碼: 11059 學(xué) 號(hào):0805070285hefei university 畢業(yè)論文(設(shè)計(jì))bachelor dissertation論文題目: 基于s3c2440的嵌入式 linux操作系統(tǒng)內(nèi)核研究 學(xué)位類別: 工學(xué)學(xué)士 學(xué)科專業(yè): 自動(dòng)化 作者姓名: 郭輝 導(dǎo)師姓名: 干開(kāi)峰 完成時(shí)間: 2012年5月12號(hào) 基于s3c2440的嵌入式linux操作系統(tǒng)內(nèi)核研究中文摘要嵌入式linux是以linux為基礎(chǔ)的嵌入式操作系統(tǒng),可應(yīng)用于多種硬件平臺(tái),是一個(gè)和unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問(wèn)控制,支持大量硬件等特性的一種通用操作系統(tǒng)。它能夠適應(yīng)對(duì)工業(yè)控制領(lǐng)域高實(shí)時(shí)性的要

2、求,被廣泛應(yīng)用在移動(dòng)電話、個(gè)人數(shù)字助理、媒體播放器、消費(fèi)性電子產(chǎn)品以及航空航天等領(lǐng)域中。本課題是以gt2440開(kāi)發(fā)板為平臺(tái)來(lái)研究linux操作系統(tǒng)的內(nèi)核,gt2440采用高主頻高性能的samsungs3c2440a處理器作為主控芯片,接口資源豐富,具有通用性。主要完成nand flash驅(qū)動(dòng)、lcd驅(qū)動(dòng)、cs8900a網(wǎng)卡驅(qū)動(dòng)、uda1341聲卡驅(qū)動(dòng)、觸摸屏驅(qū)動(dòng)、sd卡驅(qū)動(dòng)、rtc驅(qū)動(dòng)和usb驅(qū)動(dòng)等移植實(shí)現(xiàn)。最后把移植的內(nèi)核文件下載到gt2440開(kāi)發(fā)板進(jìn)行測(cè)試,測(cè)試結(jié)果驗(yàn)證了內(nèi)核移植的正確性。關(guān)鍵詞:嵌入式系統(tǒng);s3c2440;linux內(nèi)核移植;驅(qū)動(dòng)移植 study of embedded

3、linux operating system kernel based on s3c2440 abstractembedded linux is a embedded operating system based on linux, which can be applied to a variety of hardware platforms, with full memory access control, supporting for a lot of hardware features. it can adapt to real-time requirements on the fiel

4、d of industrial control, it is widely used in mobile phones, personal digital assistants, media players, consumer electronics, and aerospace and other fields.the kernel of the linux operating system is studied based on the gt2440 in the topic, the gt2440 uses high frequency and high-performance sams

5、ungs3c2440a processor as the master chip, whose interface is rich in resources and versatile. primarily the transplanting of nandflash drive,lcd driver,cs8900a lan driver,uda1341 sound card driver, touch screen driver, sd card driver, rtc driver and usb driver are finished. finally, the kernel file

6、transplanted is downloaded to the gt2440 development board for testing, and the test results verify the correctness of the kernel transplantation.key word: embedded system;s3c2440;linux kernel porting;drive transplant目錄第一章 前言11.1 嵌入式系統(tǒng)簡(jiǎn)介11.2 嵌入式操作系統(tǒng)概述21.3 章節(jié)安排2第二章 開(kāi)發(fā)環(huán)境搭建32.1 硬件平臺(tái)32.2 交叉開(kāi)發(fā)環(huán)境62.2.1 交叉

7、開(kāi)發(fā)環(huán)境簡(jiǎn)介62.2.2 交叉編譯環(huán)境的建立6第三章 嵌入式linux內(nèi)核移植實(shí)現(xiàn)83.1 嵌入式linux內(nèi)核概述83.2 嵌入式linux內(nèi)核移植實(shí)現(xiàn)103.2.1 移植準(zhǔn)備工作103.2.2 cs8900a網(wǎng)卡驅(qū)動(dòng)移植113.2.3 uda1341聲卡驅(qū)動(dòng)移植153.2.4 觸摸屏驅(qū)動(dòng)移植163.2.5 nand flash驅(qū)動(dòng)移植183.2.6 yaffs2文件系統(tǒng)的支持203.2.7 lcd驅(qū)動(dòng)的移植213.2.8 rtc驅(qū)動(dòng)移植223.2.9 usb驅(qū)動(dòng)移植22第四章 系統(tǒng)的功能測(cè)試244.1 測(cè)試準(zhǔn)備244.2 cs8900a網(wǎng)卡測(cè)試244.3 uda1341測(cè)試244.4 觸摸

8、屏測(cè)試254.5 lcd測(cè)試254.6 rtc實(shí)時(shí)時(shí)鐘測(cè)試264.7 usb驅(qū)動(dòng)測(cè)試26第五章 總結(jié)28參考文獻(xiàn)29致 謝30iv第一章 前言1.1 嵌入式系統(tǒng)簡(jiǎn)介根據(jù)ieee的定義,嵌入式系統(tǒng)是控制、監(jiān)視或者輔助裝置、機(jī)器和設(shè)備運(yùn)行的裝置。從中可看出嵌入式系統(tǒng)是軟件和硬件的綜合體,還可以涵蓋機(jī)械等附屬裝置。嵌入式系統(tǒng)是與應(yīng)用緊密結(jié)合的,具有很強(qiáng)專用性,必須結(jié)合實(shí)際系統(tǒng)需求進(jìn)行合理的裁減利用。國(guó)內(nèi)一個(gè)普遍被認(rèn)同的定義是:以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)1。嵌入式系統(tǒng)有以下一些特點(diǎn):1.系統(tǒng)內(nèi)核小。由于嵌入式系

9、統(tǒng)一般是應(yīng)用于小型電子裝置的,系統(tǒng)資源相對(duì)有限,所以內(nèi)核較傳統(tǒng)的操作系統(tǒng)要小得多。比如enea公司的ose分布式系統(tǒng),內(nèi)核只有5k。2.專用性強(qiáng)。嵌入式系統(tǒng)的個(gè)性化很強(qiáng),其中的軟件4種嵌入式操作系統(tǒng)的調(diào)度機(jī)制和硬件的結(jié)合非常緊密,一般要針對(duì)硬件進(jìn)行系統(tǒng)的移植,即使在同一品牌、同一系列的產(chǎn)品中也需要根據(jù)系統(tǒng)硬件的變化和增減不斷進(jìn)行修改。同時(shí)針對(duì)不同的任務(wù),往往需要對(duì)系統(tǒng)進(jìn)行較大更改,程序的編譯下載要和系統(tǒng)相結(jié)合,這種修改和通用軟件的升級(jí)是完全兩個(gè)概念。3.系統(tǒng)精簡(jiǎn)。嵌入式系統(tǒng)一般沒(méi)有系統(tǒng)軟件和應(yīng)用軟件的明顯區(qū)分,不要求其功能設(shè)計(jì)及實(shí)現(xiàn)上過(guò)于復(fù)雜,這樣一方面利于控制系統(tǒng)成本,同時(shí)也利于實(shí)現(xiàn)系統(tǒng)安全

10、。4.高實(shí)時(shí)性的系統(tǒng)軟件是嵌入式軟件的基本要求。而且軟件要求固態(tài)存儲(chǔ),以提高速度;軟件代碼要求高質(zhì)量和高可靠性。5.嵌入式軟件開(kāi)發(fā)要想走向標(biāo)準(zhǔn)化,就必須使用多任務(wù)的操作系統(tǒng)。嵌入式系統(tǒng)的應(yīng)用程序可以沒(méi)有操作系統(tǒng)直接在芯片上運(yùn)行;但是為了合理地調(diào)度多任務(wù)、利用系統(tǒng)資源、系統(tǒng)函數(shù)以及和專家?guī)旌瘮?shù)接口,用戶必須自行選配開(kāi)發(fā)平臺(tái),這樣才能保證程序執(zhí)行的實(shí)時(shí)性、可靠性,并減少開(kāi)發(fā)時(shí)間,保障軟件質(zhì)量。6.嵌入式系統(tǒng)開(kāi)發(fā)需要開(kāi)發(fā)工具和環(huán)境。由于其本身不具備自舉開(kāi)發(fā)能力,即使設(shè)計(jì)完成以后用戶通常也是不能對(duì)其中的程序功能進(jìn)行修改的,必須有一套開(kāi)發(fā)工具和環(huán)境才能進(jìn)行開(kāi)發(fā),這些工具和環(huán)境一般是基于通用計(jì)算機(jī)上的軟硬

11、件設(shè)備以及各種邏輯分析儀、混合信號(hào)示波器等。開(kāi)發(fā)時(shí)往往有主機(jī)和目標(biāo)機(jī)的概念,主機(jī)用于程序的開(kāi)發(fā),目標(biāo)機(jī)作為最后的執(zhí)行機(jī),開(kāi)發(fā)時(shí)需要交替結(jié)合進(jìn)行2-3。1.2 嵌入式操作系統(tǒng)概述嵌入式操作系統(tǒng)(embedded operation system,eos)是一種用途廣泛的系統(tǒng)軟件,過(guò)去它主要應(yīng)用于工業(yè)控制和國(guó)防系統(tǒng)領(lǐng)域。eos負(fù)責(zé)嵌入系統(tǒng)的全部軟、硬件資源的分配、任務(wù)調(diào)度,控制、協(xié)調(diào)并發(fā)活動(dòng)。它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過(guò)裝卸某些模塊來(lái)達(dá)到系統(tǒng)所要求的功能。目前,已推出一些應(yīng)用比較成功的eos產(chǎn)品系列。常見(jiàn)的嵌入式操作系統(tǒng)有uc/os ii、rt-thread、uclinux、freerto

12、s、rtx、arm-linux、vxworks、rtems、psos、nucleus、palmos、windows ce、windows xp embedded、windows vista embedded、嵌入式linux等4。嵌入式linux操作系統(tǒng)是指對(duì)linux經(jīng)過(guò)小型化裁剪后,能夠固化在容量只有幾十萬(wàn)字節(jié)或幾十億字節(jié)的存儲(chǔ)器芯片或單片機(jī)中,應(yīng)用于特定嵌入式場(chǎng)合的專用linux操作系統(tǒng)。嵌入式linux操作系統(tǒng)具有以下特點(diǎn):1.內(nèi)核完全開(kāi)放;2.強(qiáng)大的網(wǎng)絡(luò)支持功能;3.具備一整套工具鏈,容易自行建立嵌入式系統(tǒng)的開(kāi)發(fā)環(huán)境和交叉運(yùn)行環(huán)境,并且可以跨越嵌入式系統(tǒng)開(kāi)發(fā)中仿真工具的障礙;4.具有

13、廣泛的硬件支持特性;5.遵循通用國(guó)際標(biāo)準(zhǔn),便于程序的移植。本課題選擇了嵌入式linux操作系統(tǒng)作為研究對(duì)象,移植內(nèi)核并下載運(yùn)行。1.3 章節(jié)安排第一章,前言,簡(jiǎn)要介紹嵌入式系統(tǒng)以及嵌入式操作系統(tǒng)的概念;第二章,開(kāi)發(fā)環(huán)境搭建,介紹內(nèi)核移植的硬件平臺(tái)以及交叉編譯環(huán)境的建立;第三章,內(nèi)核移植實(shí)現(xiàn),簡(jiǎn)要介紹一下嵌入式linux內(nèi)核,并詳細(xì)介紹內(nèi)核移植步驟;第四章,系統(tǒng)功能的測(cè)試,下載測(cè)試軟件到開(kāi)發(fā)板,觀察是否能實(shí)現(xiàn)所需功能,第五章,總結(jié),對(duì)畢業(yè)設(shè)計(jì)進(jìn)行一個(gè)總結(jié)。第二章 開(kāi)發(fā)環(huán)境搭建2.1 硬件平臺(tái)gt2440是一款具有極高性價(jià)比的嵌入式開(kāi)發(fā)系統(tǒng),采用高主頻高性能的samsungs3c2440a處理器作

14、為主控芯片,專業(yè)的電路設(shè)計(jì),優(yōu)秀的layout,采用高品質(zhì)的pcb板材和元器件,使其具備優(yōu)越的穩(wěn)定性;gt2440開(kāi)發(fā)板總體結(jié)構(gòu)如圖1所示。圖1 gt2440開(kāi)發(fā)板總體結(jié)構(gòu)圖gt2440開(kāi)發(fā)板硬件資源特性如下: cpu處理器-samsung s3c2440a,主頻400mhz,最高533mhz sdram內(nèi)存- 板載64m sdram- 32bit數(shù)據(jù)總線- sdram時(shí)鐘頻率高達(dá)100mhz flash存儲(chǔ)- 板載256m nand flash,掉電非易失- 板載2m nor flash,掉電非易失,已經(jīng)安裝bios lcd顯示- 板上集成4線電阻式觸摸屏接口,可以直接連接四線電阻觸摸屏-

15、支持黑白、4級(jí)灰度、16級(jí)灰度、256色、4096色stn液晶屏,尺寸從3.5寸到12.1寸,屏幕分辨率可以達(dá)到1024x768象素; 接口和資源- 1個(gè)10m以太網(wǎng)rj-45接口(采用cs8900網(wǎng)絡(luò)芯片)- 3個(gè)串行口- 1個(gè)usb host- 1個(gè)usb slave b型接口- 1個(gè)sd卡存儲(chǔ)接口- 1路立體聲音頻輸出接口,一路麥克風(fēng)接口;- 1個(gè)2.0mm間距20針標(biāo)準(zhǔn)jtag接口- 4 user leds- 4 user buttons- 1個(gè)pwm控制蜂鳴器- 1個(gè)可調(diào)電阻,用于ad模數(shù)轉(zhuǎn)換測(cè)試- 1個(gè)i2c總線at24c08芯片,用于i2c總線測(cè)試- 1個(gè)20pin攝像頭接口-

16、板載實(shí)時(shí)時(shí)鐘電池- 電源接口(12v),帶電源開(kāi)關(guān)和指示燈 系統(tǒng)時(shí)鐘源- 12m無(wú)源晶振 實(shí)時(shí)時(shí)鐘- 內(nèi)部實(shí)時(shí)時(shí)鐘(帶后備鋰電池) 擴(kuò)展接口- 1個(gè)34 pin 2.0mmgpio接口- 1個(gè)44 pin 2.0mm系統(tǒng)總線接口地址空間分配和片選信號(hào)定義s3c2440支持兩種啟動(dòng)模式:一種是從nand flash啟動(dòng);一種是從nor flash啟動(dòng)。在此兩種啟動(dòng)模式下,各個(gè)片選的存儲(chǔ)空間分配是不同的,如圖2所示。圖2 硬件資源分配上圖中,左邊是ngcs0片選的nor flash啟動(dòng)模式下的存儲(chǔ)分配圖;右邊是nand flash啟動(dòng)模式下的存儲(chǔ)分配圖。在進(jìn)行器件地址說(shuō)明之前,有一點(diǎn)需要注意,ng

17、cs0片選的空間在不同的啟動(dòng)模式下,映射的器件是不一樣的。由上圖可以知道:在nandflash啟動(dòng)模式下,內(nèi)部的4k bytes bootsram被映射到ngcs0片選的空間;在nor flash啟動(dòng)模式下(非nand flash啟動(dòng)模式),與ngcs0相連的外部存儲(chǔ)器nor flash就被映射到ngcs0片選的空間。sdram地址空間:0x300000000x340000005。2.2 交叉開(kāi)發(fā)環(huán)境2.2.1 交叉開(kāi)發(fā)環(huán)境簡(jiǎn)介嵌入式系統(tǒng)是專用計(jì)算機(jī)系統(tǒng),由于其處理能力和存儲(chǔ)能力較弱及特殊的處理器結(jié)構(gòu),使嵌入式系統(tǒng)中不能安裝開(kāi)發(fā)軟件。所以,在進(jìn)行嵌入式開(kāi)發(fā)時(shí),往往采用交叉編譯的方式。所謂交叉編

18、譯是指在宿主機(jī)(host)中編輯和編譯程序,并在目標(biāo)機(jī)(target)中運(yùn)行由主機(jī)編譯得到的可執(zhí)行代碼6。2.2.2 交叉編譯環(huán)境的建立1.在windows中安裝虛擬機(jī),虛擬機(jī)版本為vmware workstation 8.0.2。2.在vmware workstation虛擬機(jī)中安裝linux操作系統(tǒng),版本為red had linux 9.0。3.在linux操作系統(tǒng)中安裝安裝交叉編譯器arm-linux-gcc。下載arm-linux-gcc-4.3.3.tgz,進(jìn)行解壓操作:#tar xzvf arm-linux-gcc-4.3.3.tgz / 修改環(huán)境變量:在etc/profile中添

19、加export path=/usr/local/arm/4.3.3/bin:$path。然后輸入:arm-linux-gcc v出現(xiàn)如圖3所示的信息,說(shuō)明交叉編譯環(huán)境搭建成功。圖3 交叉編譯器版本顯示3.在windows中安裝一些工具軟件,如文本編輯器notepad+,串口通信securecrt,燒錄工具dnw等,便于開(kāi)發(fā)。第三章 嵌入式linux內(nèi)核移植實(shí)現(xiàn)3.1 嵌入式linux內(nèi)核概述linux是最受歡迎的自由電腦操作系統(tǒng)內(nèi)核。它是一個(gè)用c語(yǔ)言寫成,符合posix標(biāo)準(zhǔn)的類unix操作系統(tǒng)。linux最早是由芬蘭黑客linus torvalds為嘗試在英特爾x86架構(gòu)上提供自由免費(fèi)的類un

20、ix操作系統(tǒng)而開(kāi)發(fā)的。該計(jì)劃開(kāi)始于1991年,在計(jì)劃的早期有一些minix黑客提供了協(xié)助,而今天全球無(wú)數(shù)程序員正在為該計(jì)劃無(wú)償提供幫助7。內(nèi)核指的是一個(gè)提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務(wù)等功能的系統(tǒng)軟件。一個(gè)內(nèi)核不是一套完整的操作系統(tǒng)。一套基于linux內(nèi)核的完整操作系統(tǒng)叫作linux操作系統(tǒng)。嵌入式linux內(nèi)核的體系結(jié)構(gòu)如下:1.進(jìn)程調(diào)度:負(fù)責(zé)控制進(jìn)程對(duì)cpu的使用。cpu是計(jì)算機(jī)系統(tǒng)中最核心的資源,調(diào)度程序負(fù)責(zé)在可運(yùn)行進(jìn)程中公平地選擇,使其中之一成為運(yùn)行進(jìn)程,從而充分利用cpu的資源。同時(shí),它也負(fù)責(zé)保證內(nèi)核及時(shí)對(duì)硬件進(jìn)行操作。2.內(nèi)存管理:標(biāo)準(zhǔn)linux的內(nèi)存管理支持虛擬內(nèi)存,進(jìn)

21、程的代碼、數(shù)據(jù)和堆棧的總量可以超過(guò)實(shí)際內(nèi)存的大小。而linux大致可以根據(jù)平臺(tái)有無(wú)存儲(chǔ)管理單元分為兩個(gè)類別:一類是和標(biāo)準(zhǔn)linux一樣運(yùn)行在有硬件存儲(chǔ)管理器的處理器上,另外一類通常針對(duì)無(wú)硬件存儲(chǔ)管理器的cpu進(jìn)行裁剪和移植。3.虛擬文件系統(tǒng):隱藏了不同硬件的具體細(xì)節(jié),為所有設(shè)備提供統(tǒng)一的接口。虛擬文件系統(tǒng)可再分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動(dòng)程序兩部分。邏輯文件系統(tǒng)指linux支持的文件系統(tǒng),如etx2、jffs和nfs等。設(shè)備驅(qū)動(dòng)程序是具體操作硬件控制器的代碼。4.網(wǎng)絡(luò)接口:負(fù)責(zé)支持標(biāo)準(zhǔn)的網(wǎng)絡(luò)通信協(xié)議和各種網(wǎng)絡(luò)硬件設(shè)備。其中網(wǎng)絡(luò)通信協(xié)議部分負(fù)責(zé)實(shí)現(xiàn)各種標(biāo)準(zhǔn)的鏈路層、網(wǎng)絡(luò)層和傳輸層協(xié)議;而設(shè)備驅(qū)動(dòng)程序

22、負(fù)責(zé)對(duì)網(wǎng)絡(luò)硬件進(jìn)行具體操作。5.進(jìn)程間通信:支持進(jìn)程間各種通信機(jī)制。其通信手段主要有:信號(hào)、文件鎖、管道、等待隊(duì)列、信號(hào)量、消息隊(duì)列、共享內(nèi)存和套接字。linux內(nèi)核系統(tǒng)模塊結(jié)構(gòu)及相互依賴關(guān)系如圖4所示。虛擬文件系統(tǒng)文件系統(tǒng)網(wǎng)絡(luò)接口內(nèi)存管理進(jìn)程調(diào)度進(jìn)程間通信圖4 linux內(nèi)核系統(tǒng)模塊結(jié)構(gòu)及相互依賴關(guān)系由上圖可以看出,所有的模塊都與進(jìn)程調(diào)度模塊存在依賴關(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ù)塊寫到軟盤上去時(shí),軟盤驅(qū)動(dòng)程序就可能在啟動(dòng)軟盤旋轉(zhuǎn)期間將該進(jìn)程置為掛起等待狀

23、態(tài),而在軟盤進(jìn)入到正常轉(zhuǎn)速后再使得該進(jìn)程能繼續(xù)運(yùn)行。另外3個(gè)模塊也是由于類似的原因而與進(jìn)程調(diào)度模塊存在依賴關(guān)系。其他幾個(gè)模塊的依賴關(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)程訪問(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)存虛擬盤(ramdisk)設(shè)備。而內(nèi)存管理子系統(tǒng)也會(huì)使用文件系統(tǒng)來(lái)支持內(nèi)存數(shù)據(jù)塊的交換操作8。linux內(nèi)核源碼目錄如下:1.documentation:這個(gè)

24、目錄下面沒(méi)有內(nèi)核代碼,只有很多質(zhì)量參差不齊的文檔,但往往能夠給我們提供很多的幫助。2.arch:所有與體系結(jié)構(gòu)相關(guān)的代碼都在這個(gè)目錄以及include/asm-*/目錄中,linux支持的每種體系結(jié)構(gòu)在arch目錄下都有對(duì)應(yīng)的子目。3.drivers:這個(gè)目錄是內(nèi)核中最龐大的一個(gè)目錄,顯卡、網(wǎng)卡、scsi適配器、pci總線、usb總線和其他任何linux支持的外圍設(shè)備或總線的驅(qū)動(dòng)程序都可以在這里找到。4.fs:虛擬文件系統(tǒng)(vfs,virtual file system)的代碼,和各個(gè)不同文件系統(tǒng)的代碼都在這個(gè)目錄中。linux支持的所有文件系統(tǒng)在fs目錄下面都有一個(gè)對(duì)應(yīng)的子目錄。5.incl

25、ude:這個(gè)目錄包含了內(nèi)核中大部分的頭文件,它們按照下面的子目錄進(jìn)行分組。include/asm-*/,這樣的子目錄有多個(gè),每一個(gè)都對(duì)應(yīng)著一個(gè)arch的子目錄。6.init:內(nèi)核的初始化代碼。包括main.c、創(chuàng)建早期用戶空間的代碼以及其他初始化代碼。7.ipc:即進(jìn)程間通信(interprocess communication)。它包含了共享內(nèi)存、信號(hào)量以及其他形式ipc的代碼。8.kernel:內(nèi)核中最核心部分,包括進(jìn)程的調(diào)度(kernel/sched.c),以及進(jìn)程的創(chuàng)建和撤銷(kernel/fork.c和kernel/exit.c)等,和平臺(tái)相關(guān)的另外一部分核心的代碼在arch/*/k

26、ernel目錄。9.lib:庫(kù)代碼,實(shí)現(xiàn)了一個(gè)標(biāo)準(zhǔn)c庫(kù)的通用子集,包括字符串和內(nèi)存操作的函數(shù)(strlen、mmcpy和其他類似的函數(shù))以及有關(guān)sprintf和atoi的系列函數(shù)。與arch/lib下的代碼不同,這里的庫(kù)代碼都是使用c編寫的,在內(nèi)核新的移植版本中可以直接使用。10.mm:包含了體系結(jié)構(gòu)無(wú)關(guān)部分的內(nèi)存管理代碼,體系相關(guān)的部分位于arch/*/mm目錄下。:網(wǎng)絡(luò)相關(guān)代碼,實(shí)現(xiàn)了各種常見(jiàn)的網(wǎng)絡(luò)協(xié)議,如tcp/ip、ipx等。12.scripts:該目錄下沒(méi)有內(nèi)核代碼,只包含了用來(lái)配置內(nèi)核的腳本文件。當(dāng)運(yùn)行make menuconfig或者make xconfig之類的命令配置內(nèi)核時(shí),

27、用戶就是和位于這個(gè)目錄下的腳本進(jìn)行交互的。13.block:block層的實(shí)現(xiàn)。最初block層的代碼一部分位于drivers目錄,一部分位于fs目錄,從2.6.15開(kāi)始,block層的核心代碼被提取出來(lái)放在了頂層的block目錄。14.crypto:內(nèi)核本身所用的加密api,實(shí)現(xiàn)了常用的加密和散列算法,還有一些壓縮和crc校驗(yàn)算法。15.security:這個(gè)目錄包括了不同的linux安全模型的代碼,比如nsa security-enhanced linux。16.sound:聲卡驅(qū)動(dòng)以及其他聲音相關(guān)的代碼。17.usr:實(shí)現(xiàn)了用于打包和壓縮的的cpio等9。3.2 嵌入式linux內(nèi)核移植

28、實(shí)現(xiàn)3.2.1 移植準(zhǔn)備工作1.為了方便修改程序,在windows平臺(tái)下面操作。需要windows和linux之間共享文件,實(shí)現(xiàn)如下:(1)安裝smb服務(wù)器。(2)配置smb服務(wù)器:建立一個(gè)共享的目錄和win7可以訪問(wèn)的用戶名和密碼。(3)在win7中創(chuàng)建一個(gè)虛擬網(wǎng)卡,設(shè)置虛擬網(wǎng)卡的靜態(tài)ip地址,例如:。(4)設(shè)置虛擬機(jī)網(wǎng)絡(luò):vmnet8,host-only;subnet的ip:。(5)設(shè)置linux eth0的ip地址和虛擬網(wǎng)卡ip地址在一個(gè)網(wǎng)段,例如:00。(6)啟動(dòng)smb服務(wù)器:#service smb start。(7)

29、win7中win+r輸入00即可訪問(wèn)共享的資源。2.準(zhǔn)備內(nèi)核干凈的源碼,從官網(wǎng)下載,本課題用的是linux2.3.61版本的內(nèi)核,即文件linux-2.6.31.tar.bz2。解壓至工作目錄linux-2.6.31。3.指定內(nèi)核為arm,交叉編譯器為linux修改linux-2.6.31下的makefile:183行:linux arch?=arm184行:cross_compile?=arm-linux-修改makefile權(quán)限為可寫可執(zhí)行,保存。4.修改時(shí)鐘修改arch/arm/mach-s3c2440/mach-smdk2440.c163行:s3c24xx_ini

30、t_clocks(12000000)。5.載入配置文件#make menuconfig進(jìn)入load an alternate configuration file輸入2440的默認(rèn)配置文件:arch/arm/configs/s3c2410_defconfig在system type下,s3c24xx machine那部分,只選中:smdk2410/a9m2410smdk2440smdk2440 with s3c2440 cpu moudle進(jìn)入kernel features選擇use the arm eabi to compile the kernel和allow old abi binari

31、es to run with this kernel保存配置文件改名為:.config并退出10。編譯:#make zimage,把鏡像燒進(jìn)nandflash跑一下,看串口是否打印出信息。3.2.2 cs8900a網(wǎng)卡驅(qū)動(dòng)移植cs8900a工作流程圖如圖5所示。圖5 cs8900a工作流程圖移植時(shí)首先確定網(wǎng)卡的地址為0x19000000,中斷號(hào)為eint9。修改drivers/net/cs89x0.c,指定cs8900a使用的資源:#elif defined(config_arch_s3c2410)#include <asm/irq.h>#include <mach/regs

32、-mem.h>#define s3c24xx_pa_cs8900 0x19000000static unsigned int netcard_portlist _initdata =0,0;static unsigned int cs8900_irq_map = irq_eint9,0,0,0;然后修改入口函數(shù)cs89x0_probe:#if defined(config_arch_s3c2410) unsigned int oldval_bwscon; unsigned int oldval_bankcon3;#endif#if defined(config_arch_s3c2410)

33、 /設(shè)置mac,總線寬度等if(netcard_portlist0)return -enodev;netcard_portlist0 = (unsigned int)ioremap(s3c24xx_pa_cs8900, sz_1m) + 0x300;dev->dev_addr0 = 0x08;dev->dev_addr1 = 0x89;dev->dev_addr2 = 0x89;dev->dev_addr3 = 0x89;dev->dev_addr4 = 0x89;dev->dev_addr5 = 0x89;oldval_bwscon = *(volatil

34、e unsigned int *)s3c2410_bwscon);*(volatile unsigned int *)s3c2410_bwscon) = (oldval_bwscon & (3<<12) | s3c2410_bwscon_dw3_16 | s3c2410_bwscon_ws3 | s3c2410_bwscon_st3;oldval_bankcon3 = *(volatile unsigned int *)s3c2410_bankcon3);*(volatile unsigned int *)s3c2410_bankcon3) = 0x1f7c;#endifo

35、ut: /出錯(cuò)退出#if defined(config_arch_s3c2410) iounmap(netcard_portlist0); netcard_portlist0 = 0; *(volatile unsigned int *)s3c2410_bwscon) = oldval_bwscon; *(volatile unsigned int *)s3c2410_bankcon3) = oldval_bankcon3;#endif free_netdev(dev);注冊(cè)中斷處理程序,指定中斷觸發(fā)方式,修改net_open函數(shù):#if 0 writereg(dev, pp_busctl,

36、enable_irq | memory_on);#endif write_irq(dev, lp->chip_type, dev->irq);#if defined(config_arch_s3c2410) ret = request_irq(dev->irq, &net_interrupt, irqf_trigger_rising, dev->name,dev);#else ret = request_irq(dev->irq, &net_interrupt, 0, dev->name, dev);#endif在drivers/net/cs

37、89x0.c中適當(dāng)?shù)奈恢眉由蟘onfig_arch_s3c2410宏編譯開(kāi)關(guān),可以參考:config_arch_pnx010x:net_open(struct net_device *dev) struct net_local *lp = netdev_priv(dev); int result = 0; int i; int ret;#if !defined(config_mach_ixdp2351) && !defined(config_arch_ixdp2x01) && !defined(config_arch_pnx010x) && !d

38、efined(config_arch_s3c2410) if (1 irq) & lp->irq_map) = 0) printk(kern_err "%s: irq %d is not in our map of allowable irqs, which is %xn",dev->name, dev->irq, lp->irq_map); ret = -eagain; goto bad_out; #endif#if defined(config_arch_pnx010x) | defined(config_arch_s3c2410) re

39、sult = a_cnf_10b_t;#endif內(nèi)核配置文件修改,修改drivers/net/kconfig中的描述:config cs89x0tristate "cs89x0 support"depends on net_ethernet && (isa | eisa | mach_ixdp2351 | arch_ixdp2x01 | mach_mx31ads | mach_qq2440) |arch_s3c2410-help- support for cs89x0 chipset based ethernet cards. if you have a

40、network (ethernet) card of this type, say y and read the ethernet-howto, config cs89x0_nonisa_irqdef_bool ydepends on cs89x0 != ndepends on mach_ixdp2351 | arch_ixdp2x01 | mach_mx31ads | mach_qq2440 |arch_s3c2410/*必須添加arch_s3c2410,否則出現(xiàn)eth0: irq 53 is not in our map of allowable irqs, which is 1c20的錯(cuò)

41、誤*/ 11-13。最后配置cs8900a網(wǎng)卡,在內(nèi)核目錄下執(zhí)行make menuconfig后,選中:device drivers ->* network device support ->*ethernet (10 or 100mbit) -><>dm9000support<*>cs89x0 support3.2.3 uda1341聲卡驅(qū)動(dòng)移植uda1341工作流程如圖6所示。圖6 uda1341工作流程圖移植時(shí)需要修改的代碼如下:在arch/arm/mach-s3c2440/mach-smdk2440.c添加:static struct plat

42、form_device *smdk2440_devices _initdata = &s3c_device_uda1341, 在arch/arm/plat-s3c24xx/devs.c添加: #include <mach/regs-gpio.h> #include <sound/s3c24xx_uda134x.h> static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = .l3_clk = s3c2410_gpb4, .l3_data = s3c2410_gpb3, .l3_mode

43、= s3c2410_gpb2, .model = uda134x_uda1341, ; struct platform_device s3c_device_uda1341 = .name = "s3c24xx_uda134x", .dev = .platform_data = &s3c24xx_uda134x_data, ; export_symbol(s3c_device_uda1341);在arch/arm/plat-s3c/include/plat/devs.h添加extern struct platform_device s3c_device_uda1341

44、; arch/arm/mach-s3c2410/include/mach/regs-gpio.h這個(gè)文件的內(nèi)容修改為:static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = .l3_clk = s3c2410_gpb (4), .l3_data = s3c2410_gpb (3), .l3_mode = s3c2410_gpb (2), .model = uda134x_uda1341, ; 配置內(nèi)核,支持uda1341:device drivers: * sound card support ? * advance

45、d linux sound architecture? * ccs mixer api * css pcm(digital audio) api * verbose procfs contents * alsa for soc audio support? * soc audio for the samsung s3c24xx chips * soc i2s audio support for uda134x wired to a s3c24xx 143.2.4 觸摸屏驅(qū)動(dòng)移植觸摸屏的工作流程如圖7所示。圖7 觸摸屏工作流程圖觸摸屏驅(qū)動(dòng)移植涉及有三個(gè)文件:s3c2410_ts.c,s3c244

46、0_adc.c,s3c2440adc.h,將s3c2410_ts.c拷貝到drivers/input/touchscreen目錄下,修改該目錄下kconfig文件:config touchscreen_s3c2410tristate "samsung s3c2410 touchscreen input driver"depends on input && s3c2440_adchelpsay y here if you have the s3c2410 touchscreen.if unsure, say n.to compile this driver a

47、s a module, choose m here: themodule will be called s3c2410_ts.修改同目錄下makefile文件,加入:obj-$(config_touchscreen_s3c2410) += s3c2410_ts.o將s3c2440_adc.c,s3c2440adc.h拷貝到drivers/char目錄下,修改同目錄下kconfig文件,加入:config s3c2440_adcbool "adc driver for s3c2440 development boards"helpthis is adc driver for

48、s3c2440 development boardsnotes: the touch-screen-driver required this option修改同目錄下makefile 文件,加入:obj-$(config_s3c2440_adc) += s3c2440_adc.o配置內(nèi)核,支持觸摸屏:device drivers ->character devices ->* adc driver for s3c2440 development boardsinput devices support -><*> event interface* touchscre

49、ens -><*> samsung s3c2410 touchscreen input driver啟動(dòng)時(shí)輸出:s3c2410 touchscreen successfully loadedinput: s3c2410 touchscreen as /class/input/input03.2.5 nand flash驅(qū)動(dòng)移植nand-flash內(nèi)存是flash內(nèi)存的一種,其內(nèi)部采用非線性宏單元模式,為固態(tài)大容量?jī)?nèi)存的實(shí)現(xiàn)提供了廉價(jià)有效的解決方案。nand-flash存儲(chǔ)器具有容量較大,改寫速度快等優(yōu)點(diǎn),適用于大量數(shù)據(jù)的存儲(chǔ),因而在業(yè)界得到了越來(lái)越廣泛的應(yīng)用,如嵌入式產(chǎn)品中包

50、括數(shù)碼相機(jī)、mp3隨身聽(tīng)記憶卡、體積小巧的u盤等。要讓開(kāi)發(fā)板在nand flash上運(yùn)行起來(lái),必須添加nand flash驅(qū)動(dòng)。程序的修改要與u-boot對(duì)應(yīng)。1.修改arch/arm/plat-s3c24xx/common-smdk.c文件本課題要使nandflash同時(shí)支持64m,256m或者更高容量。加入:#if defined(config_64m_nand)0 = .name= "uboot",.offset= 0x00000000,.size= 0x00040000,1 = .name= "kernel",.offset= 0x0020000

51、0,.size= 0x00200000,2 = .name= "yaffs2",.offset= 0x00200000,.size= 0x03bf8000,#elif defined(config_256m_nand)0 = .name= "uboot",.offset= 0x00000000,.size= 0x00080000,1 = .name= "kernel",.offset= 0x00240000,.size= 0x00200000,2 = .name= "yaffs2",.offset= 0x00440

52、000,.size= 0x0fb40000,#endif;2.修改nand讀寫匹配時(shí)間每種nand的值都不一樣,修改如下:static struct s3c2410_platform_nand smdk_nand_info =.tacls = 10,.twrph0 = 25,.twrph1 = 10,.nr_sets = array_size(smdk_nand_sets),.sets = smdk_nand_sets,;3.修改kconfig文件在配置時(shí)選擇nand類型,修改driver/mtd/nand/kconfig,在172行,添加:choiceprompt"nand fla

53、sh capacity select"depends on mtdconfig 64m_nandboolean "64m nand for s3c2440"depends on mtdconfig 256m_nandboolean "256m nand for s3c2440"depends on mtdendchoice4.配置內(nèi)核,使其支持nandflashdevice drivers -><*> memory technology device (mtd) support -> * mtd partitioning

54、 support <*> nand device support -> <*> nand flash support for s3c2410/s3c2440 soc * samsung s3c nand hardware ecc/這個(gè)一定要選上 nand flash capacity select(256m nand for gt2440)->3.2.6 yaffs2文件系統(tǒng)的支持yaffs文件系統(tǒng)是專門針對(duì)nand閃存設(shè)計(jì)的嵌入式文件系統(tǒng),目前有yaffs和 yaffs2兩個(gè)版本,兩個(gè)版本的主要區(qū)別之一在于yaffs2能夠更好的支持大容量的nand flash芯片。首先下載yaffs2源碼,解壓并進(jìn)入yaffs2目錄:#tar xzvf yaffs2.tar.gz#cd yaffs2/給內(nèi)核打上yaffs2文件系統(tǒng)的補(bǔ)丁,執(zhí)行:#./patch-ker.sh c ./linux-2.6.31/這時(shí)內(nèi)核源碼fs目錄下多了一個(gè)yaffs2目錄,同時(shí)makefile文件和kconfig文件也增加了yaffs2的配置和編譯條件4。配置對(duì)yaffs2支持:file systems ->dos/fat/nt filesystems -><*&g

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論