嵌入式與多核技術(shù)_第1頁
嵌入式與多核技術(shù)_第2頁
嵌入式與多核技術(shù)_第3頁
嵌入式與多核技術(shù)_第4頁
嵌入式與多核技術(shù)_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《嵌入式與多核技術(shù)》課程設(shè)計(jì)報告題 目: 驅(qū)植班 級: 通信本二學(xué) 號: 13405039姓 名: 周文敏同組人員:謝爽、彭義龍、葉盛、郭恒指導(dǎo)教師:年月日摘要目前,LED(LightEmittingDiode的應(yīng)用技術(shù)已經(jīng)非常成熟,與D相關(guān)的產(chǎn)品也走進(jìn)了人們的日常生活中在LD期,示,和燈,前,的D和D已遍,故D此,針對不同應(yīng)用的D生,用D對LED控的推廣尤為重要在本課題中采用了ARM+Linux的嵌式發(fā)式,控器用的處理器是基于ARM920T核的S3C2440芯片,并以Linux26.0的操作系統(tǒng)作為軟件平臺詳細(xì)的分析了DMX512舞臺光控制協(xié)議,最終,設(shè)計(jì)和完成本文的嵌入式D控制系統(tǒng)。本文首先從應(yīng)用層、操作系統(tǒng)層和硬件層三個層面對嵌入式Linux析。次,的DMX512控制協(xié)議進(jìn)行詳細(xì)的分析,然后設(shè)計(jì)了基于DMX512協(xié)議的D控制器的系統(tǒng)框架,并給出了控制器各功能模塊的功能定義。其中將控制器系統(tǒng)劃分成了六個模塊單D燈串部分、手動控制部分、LD、SD卡數(shù)據(jù)讀寫部分PC端后,分硬現(xiàn),并成D控中,化式,義,口,器臺,應(yīng)現(xiàn),根據(jù)控制器的處理過程進(jìn)行了詳細(xì)的劃分,并采用了多線程的編程模式,完成了控制器的軟件處理流程。同,在應(yīng)用層的程序開發(fā)屏蔽了底層硬件的實(shí)現(xiàn)細(xì),使系統(tǒng)具有較好的兼容性與擴(kuò)展性1、緒論1題研究背景和意義.2.入式的系統(tǒng)概述ARMAdvancedCach的縮寫,它既可以認(rèn)為是一個公司的名字,也可以認(rèn)為是對一類微處理器的統(tǒng)稱,還可以認(rèn)為是一種技術(shù)的名字A司自己并不介入芯片的生產(chǎn)銷售,而是以I核(知識產(chǎn)權(quán)核)的形式向各大半導(dǎo)體制造商出售技術(shù)授權(quán),由于其設(shè)芯性功低低著支持,在3位嵌入式領(lǐng)域獲得了巨大的成功。目前,A處理器已經(jīng)深入到工業(yè)控制、無用產(chǎn)域用RISC構(gòu)架的ARM微處器有下性:()采用RI架的A處理器具有如下特性()支持Th位)/A(3位)雙指令集,可以很好的兼容8/器件()帶有指令ca據(jù)ca量使用寄存器,指令執(zhí)行速度更快()大多數(shù)的數(shù)據(jù)操作都在寄存器中完成()尋址方式靈活簡單,執(zhí)行效率高()指令長度固定。隨著A司發(fā)布了最新的Corte,A理器的性能被提高到一個新的高度,同時功耗仍然保持較低的水平。后P時代的到來,A理器的應(yīng)用范圍將會更的廣泛會義制機(jī)或的籍系以用、功耗等有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)嵌入式系統(tǒng)一般由部分組成嵌入式微處理器外圍硬件設(shè)備嵌入式操作系統(tǒng)和用戶應(yīng)用程序其體系結(jié)構(gòu)如圖1示其中硬件平臺外圍硬件設(shè)備嵌入式操作系統(tǒng)和用戶應(yīng)用程序其體系結(jié)構(gòu)如圖1示其中硬件平臺統(tǒng)與通用操能提操序。應(yīng)序 嵌入嵌入式操作系統(tǒng)(如 式linux)軟件平臺系控硬臺 統(tǒng)圖1.2圖,決將技通統(tǒng)下:(1)性型PC的硬嵌下:.體積小、集成度高,是功中此.的計(jì)通用PC的對般硬件.。嵌入式系統(tǒng)的電磁兼使很。硬功更具競爭力(2)性統(tǒng):a.。發(fā)牽,開備識。.件有。件入時行在件各程要。件力力3擇系來嵌式域可以的有此個易移植統(tǒng)慮題是國r發(fā)操可構(gòu)、靈理要是不發(fā)難高。(2)EE的2持多種的CPU活與PC機(jī)上s程序流但E開發(fā)進(jìn)的;需高。(3u/S-IuCOSII是Micrim開發(fā)的實(shí)作統(tǒng),于86位和2位的但u/I僅實(shí)和本能或一要作大式類UX作時權(quán)核裁的32、4位C支乎有富開。式了著式系。式。對進(jìn)。4擇形戶面GU用友極業(yè)士過計(jì)不于PC,嵌入式對GUI。式操作平臺上,有各種各樣的GUI目的:s、QtEmededMiiU、OpenUI各特。(1s用統(tǒng)的支持用C了C/S。s支持兩種AP:類2I和Nano-AIs這些API容2和w系今s無加代參。(2)MiniI容E的AP口的控件資但MiI控件功能不使用C,雜的應(yīng)用程序開發(fā)難度大(3pUI的X86了C/C+接動在。但OpUI使現(xiàn)差。(4tEbded基于幀緩沖的Qt版色與s和1的AP于Qt界化也容易用QtCraor基于Qt/Ebeded序是序比。對比上GUI統(tǒng)QEeed使得開發(fā)人員專注于應(yīng)時Qt/Embdd有的礎(chǔ)開取QtEmeded。二、構(gòu)建嵌入式Linux統(tǒng)1式系概述式、文件系統(tǒng)和用戶應(yīng)用程序四個部分,其組成框圖如圖3.1示序 嵌入件統(tǒng)式Linux內(nèi)核 系統(tǒng)加序圖31嵌入式Linux系統(tǒng)圖(1)序就的以硬設(shè)建空圖軟一為最終調(diào)用Linux內(nèi)備環(huán)。(2)Linxu內(nèi)核Linux內(nèi)核是Linux操作系統(tǒng)的靈魂,它的編程接口屏蔽底層硬件細(xì)節(jié)對下提供對硬件的抽象管理此處的Linux內(nèi)核定式制。(3)統(tǒng)文件系統(tǒng)內(nèi)包含了Linux系統(tǒng)等(4)序面用用們中。構(gòu)建嵌入式Linux系統(tǒng)就是在系統(tǒng)硬件平臺上移植BootLoader、Linux內(nèi)核和嵌入式Linux,可驟:(1)建立開發(fā)環(huán)境,即。(2)構(gòu)建Bootodr。Botodr統(tǒng)和應(yīng)用程序初始化軟硬件環(huán)境建Bootoaer對Bor滿。(3)構(gòu)建嵌入式Linux內(nèi)核。嵌入式Linux內(nèi)核是根據(jù)開發(fā)平臺資源對標(biāo)準(zhǔn)Linux配程置、裁剪得來的。本系統(tǒng)采用的是Linux2.6版用程內(nèi),硬。(4)構(gòu)建嵌入式Linux文件存體用并中必需置、。(5)(。2境嵌入式程序的開發(fā)過程與普通的PC、在PC機(jī)上:在PC驗(yàn)證程序。交叉開發(fā)模式如圖3.2。機(jī) 機(jī)編 G輯程 口 運(yùn)序 行操作Bootloader/Linux編譯程序

絡(luò) 序傳輸文件/NFS式圖3.交叉開發(fā)模式建立基于A嵌入式Li環(huán)境主要包含以下兩個方面:()在開發(fā)主機(jī)上安裝發(fā)行版的Li系統(tǒng)許多個人、組織和企業(yè)開發(fā)了基于GNU/uxi版操作系統(tǒng),如Red、atued任何一種都可以用來開發(fā)。可以選擇在實(shí)際硬件上安裝,也可以選擇在虛擬機(jī)上安裝。為了方便使用Win已經(jīng)熟悉的工具,本設(shè)計(jì)中使用Virt擬機(jī)來安裝Fed并配置防火墻和其它的一些基本服務(wù)如tfp務(wù)、sa、nf務(wù)等()安裝交叉編譯工具鏈程序的編譯是在P上進(jìn)行的如果使用宿主機(jī)Li中默認(rèn)安裝的g譯工具序序是foX86,而不是foARM,它是不能在ARM平臺上運(yùn)行因此要使用交叉編譯工具鏈—它自己本身運(yùn)行在X臺上但它編譯出來的程序則運(yùn)行在ARM臺上。交叉編譯工具鏈由交叉編譯器(arm-li-gcc平臺使用的C庫(gli或cuCl)及輔助的二進(jìn)制工具binu(包sarm-linuux-objcopy譯工具鏈可以自己制作,也可以使用網(wǎng)上別人制作好的比如YAG交叉編譯器這里我使用YAGTO的鏈a-91-nuui-nnr2這免費(fèi)軟件可以從網(wǎng)上下載將下載好的工具鏈的壓縮包拷貝至Li中在該目錄下執(zhí)行如下命令:trvfa-1rnxe6iuz2-/s/cltlhin這樣交叉編譯工具鏈就被解壓到/usr/localchain//etc/.交叉編譯工具鏈的路徑信息這樣交叉編譯工具鏈就安裝好了。2.構(gòu)建BootLoader2.3ootL概述der簡單的說,BootL體統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序,它在系統(tǒng)上電始硬個合適的狀態(tài)系境由于BootL賴于C系結(jié)構(gòu)和具體的嵌入式外設(shè)的配置,所以大多數(shù)的BootL都分為ta和ta兩部分。依賴于CPU系結(jié)構(gòu)相關(guān)的代碼,例如設(shè)備初始化代碼等,通常放在sta而且通常都是使用匯編語言實(shí)現(xiàn),以達(dá)到短小精悍的目的。而與具體的嵌入式外設(shè)的配置相關(guān)的代碼通常放在sta而且通常用語言來實(shí)現(xiàn)這樣不僅可以實(shí)現(xiàn)更復(fù)雜的功能,而且代碼會有更好的可讀性和可移植性。(1)BooLoad完成的主要任務(wù)(以執(zhí)行的先后順序)a基本的硬件設(shè)備初始化。制sta代碼到RAMc設(shè)置好堆棧指針S。d跳轉(zhuǎn)到sta的入口點(diǎn)。(2)BootLoad完成的主要任務(wù)(以執(zhí)行的先后順序a初始化本階段要使用到的硬件設(shè)備。b加載內(nèi)核鏡像。c.置內(nèi)核啟動參數(shù)。d調(diào)用內(nèi)核。BootL的種類很多,比如X86的LILOR等,ARM的U-Boot等。它們各具特點(diǎn)。本設(shè)計(jì)中使用的是S3CU-Bi兩個不錯的選擇。Vivi是Mi司為三星公司的A架C門設(shè)計(jì)的,基本上可以直接使用,需要修改的地方很少,命令簡單方便,不過只支持串口下載,速度太慢。U-B大多數(shù)C可以燒寫YaF件系統(tǒng)映像,支持串口下載、網(wǎng)絡(luò)下載,U能,并提供了豐富的命令,相較于Vivi的移植和使用更加的復(fù)雜,但是調(diào)試程序更為方便,所以本設(shè)計(jì)選用U-Boot2.3-B修改和編譯U-B一直沒有添加對S3C2,移植一般都是采用U-B中的sbc2410smdk件作為藍(lán)本來進(jìn)行移植,所要做的就是針對S3C440C,以及U-B的開發(fā)板硬件外設(shè)和本系統(tǒng)硬件外設(shè)的不同作相應(yīng)的修改,并添加新的功能。大致的過程如下:()修改主目錄Makefile下內(nèi)容:my2440_onfignfig定本設(shè)計(jì)硬件配置選項(xiàng)@$(MKCONFIG)coarmg=)92m0yt2440LL3c24x0修改Makefile叉編譯器:CROSS_CMPILE-linux-交叉編譯器()在bo夾下創(chuàng)建my2及文件。在/bo中建立開發(fā)板my2440,制smdk2410文件到此目以smdk2410加快移植進(jìn)度。cdboardmkdir-p my2440cp-arfsamsung/smdk2410/*my2440/cdmy2440/mvsmdk2410.cmy2440.c修改my2440的MakefileCOBJS:=my2440.o flash.o()在include文件。以smdk2410藍(lán)本:cpinclude/configs/smdk2410.hinclude/configs/my()修改第一階段相關(guān)的代碼。改C率設(shè)置代碼。S3C24403C4參數(shù)設(shè)置不一樣在數(shù)據(jù)手冊中可以查到將FCLK為40比為FCLK:HCLKLm92art.S:/*FCLK:HCLK:PCLK=1:4:8*/ldrr0,=CLKDIVNmovr1,#5strr1,[r0]比//mrcp15,0,r1,c1,c0,0orrr1,r1,#0xc0000000mcrp15,0,r1,步c1,c0,0 //movr1,#CLK_CTL_BASEmovr2,#MDIV_405addr2,r2,#PSDIV_405strr2,[r1,#0x04]/設(shè)置FCLK改SD化參數(shù)。為了匹計(jì)儲需改lowleve這個與.SD數(shù)以到下:#defineREFCNT 0459改為:#defineREFCNT 1012()修改第二階段相關(guān)代碼。要改board/my24這個文件中的函數(shù)負(fù)責(zé)板級初始化的任務(wù),修地要屏已用的NAND器初始化代碼、添加網(wǎng)卡芯片(DM9000化。()完善目標(biāo)板外設(shè)驅(qū)動。這部分要修改的內(nèi)容主要包括:NALASH的代碼修改、添加對Yaffs2件像能網(wǎng)、加U備驅(qū)動支持、添加SD讀碼。()修正配置文件。加CONFIG_S3C2440對于S3C44多代碼是使用S3C41所以要在所有條件編譯中有CONFIG_1CONFIG才會被編譯進(jìn)來。件include/con。igs/my2440.h分的括除CS8900宏定義,添加DM9000義;使能對JFAT件系統(tǒng)的支持;使能USB卡功能;()編譯。makecleanmakemy2440_configmake成以到NANDFLASHu-bot.bin2.3.3實(shí)現(xiàn)開常過U-Boot些命令來往開發(fā)板FL寫內(nèi)核映文統(tǒng)內(nèi)行且效率不高開了U-Boot菜單開發(fā)人員只要輸入字母相就讓U-Boot雜的命令從而極大的方便了嵌入式開發(fā)。U-Boot啟用main_loopoin_lo規(guī)定的時(配文中定義CONFIG_BOOTD查到任何按鍵事件的發(fā)生,就會去加統(tǒng),把Li壓縮鏡像從NANDFLASHDRAM。如在CONFIG_BOOT鍵盤上的任意一個按鍵U-Bot與狀在定了CONFIG_SYSSH_PARSER過parse_fi用戶命令,否則進(jìn)入一個for)循環(huán)中,通過read(CONFIG_S然后調(diào)用run_command(cmd,fla去解析行。這個個U-Boot令,U-B時,如果行輸相過:()在common新建一個名為cmd_menu.同時修改同目錄下Makefile。改commonMakefile如下內(nèi)容:COBJS-$(CONFIG_CMD_MENU)+=cmd_menu.o()編寫cmd_menu.c。①定個U-BootU_BOOT_CMD(menu,3,0,do_menu,"menu-displaydosomething\n","-displayamenu,toselectt寫do_uintdo_menu(cmd_tbl_t*cmdtp,intflag,intar{menu_shell();return0;}現(xiàn)menu_ll()menu_shell()能是通過串口打印命令菜單,然后等待用戶的輸入,根據(jù)用戶入的給run_c的操作。傳遞給ran_cand其實(shí)就是用戶在命令行模式下實(shí)現(xiàn)相同功能時輸入的命令的字符串的組合,流程圖如3.3示。始束命單是有輸入數(shù)據(jù)?數(shù)遞不參數(shù)給cmd_buf否是執(zhí)行run_command(cmd_f,0)圖3.3menu_shell()在U-Bootmenu。在main.cmainpabortbooty)#ifdef CONFIG_CMD_MENUrun_command("menu",0);#endif在include/configs/my2440.h#defineCONFIG_CMD_MENU1新譯U-Boot成帶有命令菜單的u-boot.bin2.構(gòu)建嵌入式Lix2.4.1L2.6Lin內(nèi)核的最初版本在1991布,是LinusTorval發(fā)的一個類Mi作系統(tǒng)。此后借助于互聯(lián)網(wǎng),經(jīng)過全世界計(jì)算機(jī)愛好者的共同努力,如今已經(jīng)成類UNIX系統(tǒng)。20312Linux2.6,在Linu上作了極大的改進(jìn):a支持更多的硬件平臺,從小規(guī)模的嵌入式設(shè)備到服務(wù)器級別的系統(tǒng)。b使用新的調(diào)度器算法,進(jìn)程的切換的效率更高。c內(nèi)核服務(wù)可以被搶占,使得用戶操作實(shí)時的響應(yīng)更高。d大幅度的修改I系統(tǒng),使得各種工作負(fù)荷下都有很好的響應(yīng)性。e對模塊子系統(tǒng)和文件系統(tǒng)進(jìn)行了大量的改進(jìn)。f合并了uCl,以支持沒有內(nèi)存管理單元(M的CPU2.4.2L6()Linu碼目錄結(jié)構(gòu)[30-34]內(nèi)核源碼可以從www.kernl.M系構(gòu)的核源碼丁可從www.arm.linux.o能,如下表3示。表3.1頂層目錄說明目錄名述arch包含和硬件碼的C一個相應(yīng)的錄如archrm/block驅(qū)用。crypto常用加密和散列算法如AESHA,還有一些壓縮和C驗(yàn)算。Documentation核助檔。drivers所有的設(shè)備驅(qū)動程序,驅(qū)子,如cablockne等。fs系,如fs/j/ext3include無在includx在include種驅(qū)動或部頭。init化。ipc間的。kernel部、處的部代放在arch/xxrnellib的與的于arch/xib/mm平在arch/xxx/mmnet網(wǎng)絡(luò)支持相關(guān)代碼,實(shí)現(xiàn)了各種常見的網(wǎng)絡(luò)協(xié)議,如TCX。scripts用核。security不同的Li模式的代碼。sound的他碼。usr了和的cpio對Li的移植,主要是對體系結(jié)構(gòu)相關(guān)的代碼進(jìn)行修改,其它體系結(jié)構(gòu)無關(guān)的代用,修部在arch/arm/()Linux的組成部分Lin內(nèi)核由進(jìn)程管理(SCED內(nèi)存管理(MM統(tǒng)(V和網(wǎng)絡(luò)接口(N5個子系統(tǒng)組成,如圖

、進(jìn)程間通信(IC、虛擬文件系3示。圖3.4與關(guān)系①程管理位個Li的中心位置,內(nèi)核中其它的子系統(tǒng)的工作都依賴它,因?yàn)榻y(tǒng)恢管程對C訪問,使得多個進(jìn)程能在C宏觀并行,微觀串行地執(zhí)行。②存管理是域。持M,Lin內(nèi)存管理完成進(jìn)程虛擬地址到物理地址的轉(zhuǎn)換。虛文系統(tǒng)圖3示,虛擬文件系統(tǒng)(V隱藏了各種文件系統(tǒng)的具體細(xì)節(jié),為用戶空間的應(yīng)用程序提供了統(tǒng)一的編程接口提供了對數(shù)十種不同的文件系統(tǒng)的支持VFS立于具體的個。用序虛擬文件系統(tǒng)VFSMinixExt2FAT備件戶間核間圖3.5x程信Lin支持進(jìn)程間多種通信機(jī)制,如消息隊(duì)列、信號量、管道、共享內(nèi)存等,這些機(jī)制可問。⑤絡(luò)接口了存?zhèn)淇谙稻W(wǎng)動與硬的。2.4.3L2.6和SMDK2440樣的,而linux32SMDK已經(jīng)十分豐富,所以大部分關(guān)鍵的移植基本很簡單,只需要根據(jù)目標(biāo)平臺的差異作調(diào)整就可以了。移植過程大致如下[35][36]()指定目標(biāo)平臺和交叉編譯工具壓Linux-.tar.bz2核代碼根目錄,修改根目錄下的MakefileARCH?=arm/指定目標(biāo)平臺CROSS_COMPILE?=指arm-linux- //()缺省配置內(nèi)核可在SMDK2440基行可入makes3c24c2440核置件。配置內(nèi)核有四種方式mao文本的傳統(tǒng)的配置界面十分的繁瑣不推薦使用)、mamenuconfigcu界面)、maxcogQT配置界面)、magconfigG置界面)于ncu界面。使用makeme面,如圖3示,瀏覽基本配置。圖3核配置主界面擊Systeme-SMachi如圖s3示。其中SMDK2440DK2440S3Cod選擇,表明編譯出來的內(nèi)核將支持由S3C開發(fā)板。此映是差。圖3.7S3C2440置Machines()修改系統(tǒng)的時鐘頻率SMDK上的晶振的頻率是16.944Mhz硬件上使用的是一個12MHz所源率。將arch/arm/mach-s3c2的第0/的ch-smdk2440.cs3c24xx_init_closks(16934400)改為s3c24xx_init_closks(12000000);()修改NANDFLASHLinux部分NANDFLASHdrivers/mtd/nand/nand_i中查持種NANDFLASHDK置文件中的NANDFLASH表和本設(shè)計(jì)在移植U-Boot的分區(qū)表是不一致。如果不修改的話,Linux文。改arch/arm/plat-24xx/commo如下所示。這樣一來,整個NANDASH分為個分區(qū)。第一個分區(qū)大小384KBU-個分區(qū)小128KB參數(shù);第三個分區(qū)大小5MB放Li;第四個分區(qū)大小為剩余的NAND放根文件系統(tǒng)。staticstructmtd_partitionsmdk_default_nand_pa[0]={.name.size.offset

="U-Boot",=0x00060000,=0,},[1]={.name.offset.size

="param",=0x00060000,=0x00020000,},[2]={.name ="Kernel",.offset=0x00080000,.size =SZ_5M,},[3]={.name ="Rootfilesystem",.offset=0x00560000,.size =1024*1024*1024,},;()打上yaffs2Yaf是專門為嵌入式設(shè)備開發(fā)的一種文件系統(tǒng),十分適合使用NANDFLASH器的嵌入式設(shè)備。Linux碼中并不包含Ya系統(tǒng)代碼,所以要給內(nèi)核打補(bǔ)丁使支持Ya系統(tǒng)。yaf持小頁(512byte/pageDaf大的NANDFLASH使用的NANDFLASH以要給內(nèi)核打上yaffs2統(tǒng)補(bǔ)丁。從http://www.aleph1.co.uk/gi可以下載到最新版affs2.git的yaffs2碼成用t令解壓壓縮包,然后進(jìn)入yaffs2目錄執(zhí)行,并在中:cdyaffs2./patch-ker.shc /linux/kernel/linux-樣為Li打上了yaffs2此時進(jìn)入內(nèi)核源代碼中fs/內(nèi),可以看到已經(jīng)了一個yaffs2()配置并裁剪內(nèi)核的的常核一并需所要對Linux電大學(xué)文26表3輸入makenuc在核主面項(xiàng)。表3核配置主界面選項(xiàng)說明名明Codematurityleveloptions的配這以配項(xiàng)Generalsetup雜置Blocklayer設(shè)(量的置度)就以。SystemType統(tǒng)型選擇C架、開發(fā)板類型等開發(fā)板相關(guān)的配置項(xiàng)BussupportPCMCIA/不用設(shè)置KernelFeature一核支持動態(tài)修改系統(tǒng)時鐘等Bootoptions啟命,般需修改Floatingpointemulation運(yùn)能前Li持硬件浮點(diǎn)運(yùn)算,所以運(yùn)擇NWFPEmathemulationUserspacebinaryformats擇E式Powermanagementoptions管項(xiàng)Networking絡(luò)議項(xiàng):擇Networking項(xiàng)support能擇Packettrawsocket,擇TCP/IPnkP/IP議。通在選擇Networking項(xiàng)supportDeviceDrivers驅(qū)幾含Li的驅(qū)動程序Filesystems件統(tǒng)Profilingsupport活僅使用Kernelhacking調(diào)試內(nèi)核時的各種選項(xiàng)Securityoptions項(xiàng)默項(xiàng)Cryptographicoptions密項(xiàng)Library子序例如

routinesCR函數(shù)、zl縮函數(shù)等。不包含的這全內(nèi)依選上配界上對Li配置時,對于[項(xiàng)可以按下鍵或者使用空格鍵,使括號中出現(xiàn)號,這個選項(xiàng)就會編譯進(jìn)內(nèi)核,N鍵或者使用空格鍵使括號中為空白,這個選項(xiàng)就不會被編譯;對于<>項(xiàng)除了可以像選項(xiàng)那樣來配置,也可以使用鍵或者空格鍵,使這個選型譯模選名為.k的文件。該文件就被稱為模塊,模塊可以在操作系統(tǒng)啟動后通過“ins文件”進(jìn))。過makeme和裁剪,使得最終的內(nèi)核盡量小,并實(shí)現(xiàn)支持如下功能:()NAFLASH;()對E式的應(yīng)用程序的支持;()串口驅(qū)動;()ri(將內(nèi)存當(dāng)做硬盤使用);()模塊的動態(tài)加載和動態(tài)卸載()S卡驅(qū);()U盤、鼠標(biāo)驅(qū)動;()支持將目錄掛載到內(nèi)存(將內(nèi)存當(dāng)做目錄使用);()能夠識別盤、S卡的F區(qū)和NTFS上的中英文文件;(10驅(qū);(11DM9000(12TCP棧;(13NFS戶端的支持;(14NF文件系統(tǒng);(1)Yaf系統(tǒng)。(1)內(nèi)核映像文件uImage置、裁剪行makm會在內(nèi)核源碼的arch/a/zImage的映像文件uIm原來的zImage件的前面加上一個0x的頭記錄所息樣U-Boot別這個映像文件是針對哪個C系結(jié)構(gòu)的,哪個OS哪種類型,內(nèi)存加載的位置內(nèi)存入口點(diǎn)的位置以及映像名是什么。使用在移植U-B候生成的mki文件來制作uImage像文件。入zImage錄中:mkimage-Aarm-Olinux-Tkernel--e30008000-nlinux-2.6.生d用ge./uIma內(nèi)映文件2.構(gòu)建嵌入式

uIageLi系統(tǒng)2.5嵌入式文件系統(tǒng)概述嵌軟源的PC有很大的不同,所以嵌入式系統(tǒng)對文件系統(tǒng)有著特定的要求[23]較碎。。用FL存儲介質(zhì),但是FL除次數(shù)是有限的,為長FL用壽命,文件系統(tǒng)應(yīng)盡量減少對FL入操作,同作整個FLH式Li用的幾種文件系統(tǒng)特點(diǎn)如表3示。表2入式Li文件系統(tǒng)件統(tǒng)點(diǎn)RomFS可存放在R間,也可以存放在系統(tǒng)的R;RomFS讀的文件系統(tǒng),所以系統(tǒng)同時需要支持虛擬盤(RAM放臨時文件和數(shù)據(jù)文件,掉電后數(shù)據(jù)丟失;RomFS簡單、占用空間較少。CRAMFSCRA據(jù)被壓縮,屬于只讀文件系統(tǒng),不能在閃存中修改;CRA數(shù)傳到RAM戶從R讀取,修改后的數(shù)據(jù)保存在R,一旦掉電修改全了理間隨FL增長;FLA容量越大日志占用R大。計(jì)用NANDFLASH備,從以上幾種文件系統(tǒng)的特點(diǎn)分析可以出Ya適合本系統(tǒng),因此本設(shè)計(jì)中采用Ya系統(tǒng),前面移植Lix時已經(jīng)加對Yaffs2統(tǒng)的支持。2.5.2Linux錄結(jié)構(gòu)了止Li文件放置混亂,人們定義了文件系統(tǒng)層次結(jié)構(gòu)標(biāo)準(zhǔn)(FS。FHS定了Li系統(tǒng)中的主要目錄及目錄存放的內(nèi)容,雖然它并不是一個強(qiáng)制的標(biāo)準(zhǔn),但是多的Li版本都遵循。FHS準(zhǔn)目錄結(jié)構(gòu)如表3示[23]表2.4FHS錄結(jié)構(gòu)名放容/bin必備的用戶命令,例如c等/sbin系令如ifcot/dev和如mtdbloc0/etc統(tǒng),件如initab/lib共可塊如鏈接庫、內(nèi)核模塊/home目號如FP/rootro戶的主目錄/usr/bin備序如f等/usr/sbin管理員程序,例如chetd/usr/lib運(yùn)用/var變?nèi)占?proc供程文統(tǒng)proc系統(tǒng)的掛載點(diǎn)/sys供備文統(tǒng)sy系統(tǒng)的掛載點(diǎn)/mnt臨個統(tǒng)點(diǎn)/tmp存放臨時文件,通常是臨時文件,重啟后將自動消除2.5.3式Li系統(tǒng)制作制嵌入式Li系統(tǒng)就是要建立表3的目錄,并在其中填充相應(yīng)的目錄內(nèi)容,其過程大體包括[35][36]()建立文件系統(tǒng)所需要的目錄一為rootfs:mkdirrootfs進(jìn)入/linux/rootfs以下目錄:cd rootfsmkdirbinetcdevhomelibmntoptprocrootsbijffs2存改統(tǒng)式和CRAMFS數(shù)據(jù)區(qū);掉全。Yaffs專門為NANDFLASH文件系統(tǒng),提供磨損平衡和掉電恢復(fù);適合大容量的NANDFLASHf系統(tǒng)同等容量的FLASHa的R間要很;()編譯、安裝Busybox在/binsusr/binr/sbin放的主要是一些常用命令的二進(jìn)制文件。果移命難很。Busybox遵循GP的開源項(xiàng)目,它將眾多的UNIX進(jìn)行優(yōu)化,集成進(jìn)一個然Bus命令提供的選項(xiàng)較桌面Li命令少但是滿式的。從/downloads/.tar.bz2源放到Li目錄中,解壓:tarjvfBusybox-1.18.3.tar.bz2②進(jìn)入源碼目錄,修改MakefileCROSS_COMPILE?=arm-linnux-ARCH?=ARM置BusyBoxBusyBox的方式和Li的配置方式基本相同,執(zhí)行makemeconfigbusybox配置界面,如圖3示。圖3.8Box項(xiàng)內(nèi)就需置Busod設(shè)備類型持裝。LinuxSystemUtilities>[*]Support/etc/mdev.conf[*]Supportcommandexecutionatdeviceaddition/InstallationOptions>(./_installboxinstallationprefix配置完成后,選擇<EXIT>鍵,提示是否保存配置,選擇<Y回車,將配置保存為.config④編裝make&&makeinstall以在bus下生成_ins里面包含三個目錄和一個文件/bin/susrin些文件全部復(fù)制到建立好的rootfs。()建立動態(tài)鏈接庫態(tài)用需用庫函數(shù),所以光有應(yīng)用程序(命令)是不行必作A以使用的庫,并將其放置于根文件系統(tǒng)的l錄內(nèi)。C庫可以交譯庫源碼來生成也可以使用交叉編譯工具鏈中包含的庫本設(shè)計(jì)中使用編具的庫只需要復(fù)制到根文件系統(tǒng)下l錄就可以了交叉工具鏈中的庫文件總大小為2用程序并不需要所有的庫函數(shù)所以可以復(fù)制需要的就可以統(tǒng)。()建立/e錄下的配置文件et目錄下存放的是系統(tǒng)程序的主配置文件,需要哪些配置文件取決于要運(yùn)行哪些系統(tǒng)程行號用戶進(jìn)程i以至少要編寫init要配置文件ini置文件決定了init要啟動哪些子進(jìn)程以及如何啟動這些子進(jìn)。①建立/etc/md空。②貝主機(jī)e錄下的paha到e錄下。改etc/i如下:#etc/inittab::sysinit:/etc/init.d/rcSconsole::askfirst:-/bin/sh::ctrlaltdel:/sbin/reboot::shutdown:/bin/umount-a改etc/文件中定義了文件系統(tǒng)的信息,利用它來對系統(tǒng)啟動時mount-a:#deviceproctmpfssysfsmdev

mount-point/proc/tmp/sys/dev

type optionproc defaultstmpfs defaultssysfs defaultsramfs defaults⑤改etc/init.d/rcS出了系統(tǒng)啟動時要執(zhí)行的命令,內(nèi)容如下:#!/bin/sh電大學(xué)文31PATH=/sbin:/bin:/usr/sbin:/usr/binrunlevel=Sprevlevel=Numask022exportPATHrunlevelprevlevelmount-aecho/sbin/mdev>/proc/sys/kernel/hotplugmdev-s/bin/hostname-F/etc/sysconfig/HOSTNAME新建etc/sy新建一個名為HOSTNAME編輯文件的內(nèi)容為zhf440⑥修改etc/p如下:#Ashprofile#vim:syntax=sh#Nocorefilebydefaults#ulimit-S-c0>/dev/null2>&1USER="id-un"LOGNAME=$USERPS1='[\u@\h=W]#'PATH=$PATHHOSTNAME='/bin/hostname'exportUSERLOGNAMEPS1PATH()創(chuàng)建設(shè)備節(jié)點(diǎn)在/d錄下,創(chuàng)建兩個設(shè)備節(jié)點(diǎn):mknodconsolec51mknodnullc13中點(diǎn)找進(jìn)文系。()制作文件系統(tǒng)映像文件為yaffs2件,以供使用BootLoaderNANDFLASyaf碼的目錄下的ut中包含有制作yaffs2件所需要的的碼mkyaffs2image.cffscmkyaffs2image可執(zhí)行文件并復(fù)制到宿主機(jī)/usr。在令mkyaffs2imagerootfsrootfs.img映像文件rootfs.img三、Lin設(shè)備驅(qū)動程序開發(fā)通信與完成設(shè)備的輪詢中斷處理DMA信,進(jìn)行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設(shè)備能夠收發(fā)數(shù)據(jù)使顯示設(shè)備可以顯示圖文使存儲設(shè)備可以記錄數(shù)據(jù)文件[3沒有操作系統(tǒng)的情完序架。3.1Linux概述Lin設(shè)備驅(qū)動可以直接編譯進(jìn)內(nèi)核,。程序大當(dāng)動修要譯加把內(nèi)減了內(nèi)驅(qū)分內(nèi)。現(xiàn)實(shí)界這和I式上各不相同。為了簡化設(shè)備驅(qū)動開發(fā)的,Li從這些各異的設(shè)備中提取出了共性的特征,:設(shè)設(shè)絡(luò)。()字符設(shè)備是序鼠),由序來實(shí)現(xiàn)這種能訪程序通過/d錄下的字符設(shè)備文件節(jié)點(diǎn)來訪問字符設(shè)備文件。字符設(shè)備驅(qū)動程序通常至少需現(xiàn)oledwr統(tǒng)調(diào)用所對應(yīng)的、對硬件進(jìn)行操作的功能函數(shù)。()塊設(shè)備位如FL數(shù)據(jù)就是以頁為單位存取。用戶應(yīng)用程序?qū)K設(shè)備的訪問也是通過/d錄下的塊設(shè)備文件節(jié)點(diǎn)來訪問。塊設(shè)備和字符數(shù)戶兩有。()網(wǎng)絡(luò)設(shè)備不同于字符設(shè)備和塊設(shè)備,網(wǎng)絡(luò)設(shè)備在/d錄下并不存在對應(yīng)的設(shè)備文件節(jié)點(diǎn),而是通過單獨(dú)的網(wǎng)絡(luò)接(etth1代表,而且內(nèi)核調(diào)用一套與數(shù)據(jù)包傳輸相關(guān)的函數(shù)和設(shè)間。核員套驅(qū)型可上。的一個節(jié)點(diǎn),是一種特殊的文件。一個設(shè)備文件代表一個設(shè)備。設(shè)備文件一般存放在/dv用mk創(chuàng)建也可以配置文件系統(tǒng)和內(nèi)核來自動創(chuàng)建設(shè)備文件有主、備相同備是設(shè)序備來使用設(shè)備驅(qū)動的功能。圖4示。當(dāng)件接數(shù)op個設(shè)備文件時操作系統(tǒng)獲知應(yīng)用程序想操作的設(shè)備的設(shè)備號,將動個控備程用統(tǒng)用相來功。 調(diào)用理 ??庫序件備圖應(yīng)系下了弄框,在,。:12線序);34函;5;6命令載);7設(shè)模型初),當(dāng))或者喚)設(shè)備模型提供的功能有:歷成以。立虛擬,間統(tǒng)及口。行信的。找去虛擬件系統(tǒng) 以,個機(jī)器個端。周。把和。設(shè)的,用到這方面的知識,因?yàn)閮?nèi)核提供的驅(qū)部分解底層兩。底模型和 這三個數(shù)據(jù)結(jié)的每一個元素都對應(yīng)一個和 是結(jié)構(gòu)方面的圖。的上類的個的。?鏈表kobject->ktype圖4.2kobjckobjpe()kobjectkobject設(shè)備模型的基本結(jié)構(gòu),類似于面向?qū)ο笳Z言中的基類,它被嵌入到更大的象如busdevdevice_driver是用于一個簡單的引用計(jì)數(shù),是,也如:structkobject{constchar*name;structlist_headentry;structkobject*parent;structkset*kset;structkobj_type*ktype;structsysfs_dirent*sd;structkrefkref;unsignedintstate_initialized:1;??};na向設(shè)備的名字;entryaeset形成樹狀結(jié)構(gòu)的指針;structkobj_type來*typeob;structsysfs_dirent該kobey目錄實(shí)體sysfs一個目錄都會對應(yīng)一個sysfs_dirent每中的kob對應(yīng)于sy一個目錄。內(nèi)核源碼/Lib/Ko接口函數(shù)對kob進(jìn)行操作。()ksetks相同類型的kob。kobject樹中的葉子節(jié)點(diǎn),ks似于內(nèi)節(jié)點(diǎn),兩者連接形成樹狀結(jié)構(gòu)。ks構(gòu)體如下:structkset{structlist_headlist;spinlock_tlist_lock;structkobjectkobj;structkset_uevent_ops*uevent_ops;};litkset有的kob雙向循環(huán)鏈表的鏈表頭;listoset中的kob遍歷時的鎖;k結(jié)構(gòu)內(nèi)嵌了一個kobct由ko示),所有屬于這個ks的kobtparent向這個內(nèi)嵌的對象ueven_et對kob事件處理的操作函數(shù)集合內(nèi)核源碼/Lib/Ko接口對kset體進(jìn)行操作。()kobj_typekobj_typekob,其結(jié)構(gòu)如下:structkobj_type{void(*release)(structkobject*kobj);structsysfs_opsstructattribute

*sysfs_ops;**default_attrs;};kobjectbusvice_driver中,每個容器都有不同在syfkob錄,屬性對應(yīng)文件。當(dāng)用戶空間的程序?qū)傩晕募x寫時,kobj_typeysf口函數(shù)就會被調(diào)用。3.2上層容器kobetobj_type構(gòu)聯(lián)合起來構(gòu)成了整個設(shè)備模型的基石,而總線(bus_t備(device動(device構(gòu)是基于它們之上的容器Linux模型由busdevcdevice描述[3941]()bus_type與之備都過總線連接。即使是沒有掛接到物理總線上的設(shè)備,Linux了一種虛擬平臺(platform用bus_type示,其結(jié)構(gòu)如下:structbus_type{constchar*name;structbus_attribute*bus_attrs;structdevice_attribute*dev_attrs;structdriver_attribute*drv_attrs;int(*match)(structdevice*dev,structdevice_int(*uevent)(structdevice*dev,structkobj_uint(*probe)(structdevice*dev);int(*remove)(structdevice*dev);void(*shutdown)(structdevice*dev);int(*suspend)(structdevice*dev,pm_message_tint(*resume)(structdevice*dev);conststructdev_pm_ops*pm;structbus_type_private*p;};na向總線的名字;bus___attrs線、設(shè)備、驅(qū)動的屬結(jié)構(gòu)體指針;maev總線操作函數(shù)指針;p是總線電源管理接口函數(shù)集指針;bus_type體,其定義如下:structbus_type_private{structksetstructksetstructkset

subsys;*drivers_kset;*devices_kset;structkliststructklist

klist_devices;klist_drivers;structblocking_notifier_headbus_notifier;unsignedintdrivers_autoprobe:1;structbus_type*bus;};sub個kset描述該總線的所有子系統(tǒng)driver有驅(qū)動的;devices_kset設(shè)備的集合;總線上的設(shè)備和驅(qū)動用kl了設(shè)備鏈表和驅(qū)動鏈表,klist_devicest_個鏈表。每個bus_yp都對應(yīng)/sys/us個目錄(如platfrm應(yīng)于/sys/busplatform存在兩個子目錄devcriversdevice_ksetdrivert。其中dev描述連接在該總線上的所有設(shè)備,而drivers則描述與該總線關(guān)聯(lián)的所有驅(qū)動。()device核用device描述,如下:structdevice{structdevice*parent;structdevice_private*p;structkobjectkobj;charbus_id[BUS_ID_SIZE];constchar*init_name;structdevice_type*type;structsemaphoresem;structbus_type*bus;structdevice_driver*driver;void *platform_data;structdev_pm_infopower;??}關(guān)是structbus_typeu*busevice應(yīng)*driver設(shè)備所屬的設(shè)個device/sys/des個的。()device_driver用device如下:structdevice_driver{constchar*name;structbus_type*bus;structmodule*owner;int(*probe)(structdevice*dev);int(*remove)(structdevice*dev);??conststructdev_pm_ops*pm;structdriver_private*p;}關(guān)是struct_*bsplist_應(yīng)驅(qū)動所關(guān)聯(lián)的總線和使用表而多個設(shè)個device/sys/d創(chuàng)建一對的錄。大層術(shù)人用而化驅(qū)動。,的ma去匹配總線上的驅(qū)用驅(qū)動或總線的probe(驅(qū)動沒有實(shí)現(xiàn)pr時)去初始化設(shè)備;同理,每當(dāng)有一的,會的ma去匹配總線上的設(shè)備。如果匹配成功,則線的pr(驅(qū)動沒有實(shí)現(xiàn)pr時)去初始化設(shè)備。Li模型通過總線將系統(tǒng)中的設(shè)備,由于設(shè)備,增加伴代度。3.3LED設(shè)使的是64480T,由于Qt/Em接口使用的是幀緩沖(Frame此L動必須采用幀緩沖設(shè)備驅(qū)動形式實(shí)現(xiàn)。3.3幀緩沖設(shè)備驅(qū)動框架Framebuffer備提供的一段內(nèi)存,應(yīng)用程序通過向Frame對顏色以可以這樣為L制器中設(shè)置了Frame,LCD制器會通過DMA方自動將Frame顏色信息通過數(shù)據(jù)總線輸出到L動器由LCD驅(qū)解數(shù)后在L幕上。()Linux沖設(shè)備驅(qū)動結(jié)構(gòu)[42]沖在Li以看作是一個完整的子系統(tǒng),由fbmmxx件組,如圖4示。fbmem.c象了幀緩沖設(shè)備的共性,提供了應(yīng)用程序?qū)彌_作操操體數(shù)Li有實(shí)現(xiàn),因?yàn)檫@要根據(jù)具體的LCD制器硬件進(jìn)行編寫,這就是驅(qū)動開發(fā)人員要做的事情。fb_read()fb_mmap()fb_write()fb_ioctl()register_framebuffer()fb_infounregister_framebuffer()fb_check_var()fb_set_par()varfixfile_operations用序LCD制器戶間核間fbmem.cxxxfb.c硬件fb_結(jié)構(gòu)體圖3緩沖設(shè)備驅(qū)動結(jié)構(gòu)()幀緩沖相關(guān)的重要數(shù)據(jù)結(jié)構(gòu)fb_infofb_info是幀緩沖設(shè)備驅(qū)動程序的關(guān)鍵數(shù)據(jù)結(jié)構(gòu),在內(nèi)核源代碼linux/fb.h記沖信操數(shù)核個fb_對應(yīng)一個幀緩沖設(shè)備。fb_var_screeninfofb_var_screeninfo戶可以修改的L制器參數(shù),比如屏幕的分辨率。fb_fix_screeninfofb_fix_screeninfo戶不可以修改的L制器參數(shù),比如屏幕緩沖區(qū)的物理地址、長度等。fb_opsfb_體是對底層硬件操作函數(shù)的指針,各個具體的函數(shù)需要開發(fā)人員編寫。備數(shù)如圖驅(qū)結(jié)通過

4示,fb_info是整個驅(qū)動程序fb_info.var.fixpap.fops.oe.bfo.rs.rs.rsvral.rsvral.fst.fst.f_asreifo.mtt.mmln.yeval.pntp.pntp.f_isreifo.xcc_r).x_etpr).xbn().xsclg).xps圖3據(jù)結(jié)構(gòu)之間的關(guān)系3.3.析下面對Linux中自帶的幀緩沖設(shè)備驅(qū)動driver/video文件中的主要部分fb.c進(jìn)行分析以方便后面的移植s3c2410fb.c_ops成員的初始化代碼如下所示:staticstructfb_opss3c2410fb_ops={.owner=THIS_MODULE,.fb_check_var=s3c2410fb_check_var,.fb_set_par=s3c2410fb_set_par,.fb_blank=s3c2410fb_blank,.fb_setcolreg=s3c2410fb_setcolreg,.fb_fillrect=.fb_copyarea=

cfb_fillrect,cfb_copyarea,.fb_imageblit=cfb_imageblit,};其中s3c2410fb__var_s調(diào)整到合適的值,s3c2410fb設(shè)置L存器使之在硬件上生效。這兩個函數(shù)比較關(guān)鍵,下面會詳細(xì)的分析。cfb_fillrect()pyarea()cfb_ima)fbm實(shí)現(xiàn)通用圖像繪制功能這里是直接調(diào)。要:()LCD測移除函數(shù)在S3CCD制器集成在芯片內(nèi)部作為一個相對獨(dú)立的外設(shè)單元,所以Linux臺比。函導(dǎo)致L測函數(shù)的執(zhí)行。在L測函數(shù)中主要完成并化fb_初始化L應(yīng)硬件申請并注冊顯示緩沖區(qū)等任務(wù)LCD探測函數(shù)的流程圖如圖4示。函導(dǎo)致L除函數(shù)的執(zhí)行。在L除函數(shù)中主要做釋放在探測函作,如、注、放fb_nfo間等。函程圖4示。平據(jù)申請fb_info成功?數(shù)當(dāng)個量將fb_平臺數(shù)據(jù)獲得L鐘?開啟L鐘獲得平臺I存并映射得臺斷號初始化fb_infofb_fix_screeninfofb_var_screeninfo緩,?申請L斷,?冊緩設(shè)備返回是否是是是釋放fb_info否釋放fb_nfo關(guān)閉L鐘釋放fb_nfo關(guān)閉L鐘,顯沖區(qū)否否始圖3.5數(shù)流程圖釋放fb_info源銷緩設(shè)備釋中斷號放鐘返回停止L制器時顯沖間映虛址間釋放L口占用的I/O存圖3.6數(shù)流程圖()參數(shù)檢查函數(shù)在L測函數(shù)中調(diào)用參數(shù)檢查函數(shù)(fb_員函數(shù)fb_chear()fb_var_screen查函數(shù)檢查fb_var_sro哪種式充fb_var_s數(shù),具體的程圖3示。獲取L關(guān)平臺數(shù)據(jù)是否驗(yàn)證X析度fb_var_screeninfo與平臺數(shù)據(jù)中X/Y度?配置相關(guān)的L存器色式置fb_var_screninfo、的顏色位域設(shè)置fb_var_screeninfo的變參數(shù)返回開始圖3數(shù)檢查函數(shù)流程圖()參數(shù)設(shè)置函數(shù)參數(shù)設(shè)置函數(shù)(fb_員函數(shù)fb_se根據(jù)afb_中屏幕參數(shù)配置寫LC控制器寄存器使L制器進(jìn)入相應(yīng)的工作狀態(tài),具體的流程圖如圖4示。每素位數(shù)BP=112<=BPP<=32?屏色模式偽色屏色模式黑色屏色模式真色設(shè)置fb_info數(shù)置入LCD制器1~5回是否是是否否LCD型是TFT型?手照TFT參數(shù)配置LCD控制寄存器1~5手照STN參數(shù)配置LCD控制寄存器1~5開始配置并設(shè)置LD寄器圖3數(shù)設(shè)置函數(shù)流程圖3.3.3驅(qū)LCDLinux2.6.32帶了S3C沖設(shè)備驅(qū)動,不需要修改就可以直接使用,做據(jù)硬與SMDK2440不同修改平臺配置文件arch/arm/mach-s3c2440/dk2440.c()修改arch/arm/mach-s3c2中4s3c2410fplay容,根使用的L據(jù)手冊上的參數(shù)修改,如下所示:staticstructs3c2410fb_displaysmdk2440_lcd_cfg{.lcdcon5=S3C2410_LCDCON5_FRM565|S3C2S3C2410_LCDCON5_INVVFRAME|S3C2410S3C2410DHWP, //.type=S3C2410_LCDCON1_TFT, //LCD.width=640,//素點(diǎn)寬度.height=480,素點(diǎn)高度.pixclock=40000,/時鐘頻率.xres=640,/寬度.yres=480,/高度.bpp=16,素點(diǎn)位數(shù).left_margin=41,切換:同步到繪圖之間的延遲.right_margin=68,切換:繪圖到同步之間的延遲.hsync_len=32,水平同步長度.upper_margin=6,切換:同步到繪圖之間的延遲.lower_margin=26,切換:繪圖到同步之間的延遲.vsync_le垂同度 //}};()修改arch/arm/mach-s3c2440/mach-smdk2440.cfo,據(jù)L微處理器硬件連接修改,如下所示:staticstructs3c2410fb_mach_infosmdk2440_fb_in.displays=&smdk2440_lcd_cfg,.num_displays=1,.default_display=0,.gpccon=0xaa955699,.gpccon_mask=0xffc003cc,.gpcup=0x0000ffff,.gpcup_mask=0xffffffff,.gpdcon=0xaa95aaa1,.gpdcon_mask=0xffc0fff0,.gpdup=0x0000faff,.gpdup_mask=0xffffffff,.lpcsel=0xf82,};(在arch/arm/mach-s3c2中4smdk2440_machine_init(vo中:s3c24xx_fb_set_platdata(&smdk2440_fb_info);代后配對的L動,重新編譯后即可通備對L作。試4.1入式li系統(tǒng)測試構(gòu)的U-nux、文件系統(tǒng)映像文件燒寫到FL行測試。()U-Bt的U-Boot件通過JTAG燒入到NANDFLASH看入U-Boot功能命令測試U-Boot。()Linux測試U-B一切工作正常后,使用U-Booti映像燒入到NANDFLASH,打相常。()根文件系統(tǒng)測試用n方式掛載根文件系統(tǒng)測試,在U-BootLi的啟動參數(shù)。在U-Boot輸入模式下輸入如下內(nèi)容:setbo?targstrdconsole=ttySAC0root=/dev/nfsnfsroot=2:/linux/rootfsip=4:2:19?.168.135.32:根件系統(tǒng)n式測試無誤后,將映像文件燒寫到NANDAi的啟參數(shù)從NANDFLASHLi啟動后會掛載Yaffs2統(tǒng),進(jìn)入控制臺后操個Li。整嵌入式Li集成一起時正常啟動信息如圖6示。圖4.1Linux信息出問題:()啟動內(nèi)核出現(xiàn)Uncompressnioting后thekernel解方法:配置內(nèi),打開內(nèi)核的de,提示unrecognized/unsupportemachineID說明U-B核的機(jī)器碼不匹配,修改U-B中的machi或者nux中的machineI使兩者一致即可解決問題。()Kernelpanic-notsyncing:Noinitfound.Tryp打跟U-Boot區(qū)信合到的NANDFLASH掛載根文件系統(tǒng)。因此修改內(nèi)核中的NANDFLASH以解決問題。4備驅(qū)動程序測試()LC驅(qū)動LC驅(qū)動程序的測試可以通過編寫應(yīng)用程序的方式,不過本設(shè)計(jì)中對L動的測試過看Li啟動畫面的方式需要在內(nèi)核中配置相應(yīng)的選項(xiàng)這種方式最為簡單、。業(yè)的Li啟動畫面如圖6示。圖4核啟動畫面顏。起中初問。使用量LD40線插座發(fā)現(xiàn)有部分短路,重新焊接后顯示正常。40線插座因?yàn)楣苣_太細(xì)、太緊密,焊接的時候很容易短路要特別注意。()觸摸屏驅(qū)動中和ts試。中斷查看法很簡單,只需超端過cat/dev/i標(biāo)來判斷驅(qū)動是否工。tslib試于L正常工作只有在L常工作前提下才能做進(jìn)一步的測試圖6.3為ts測試界面。圖4摸屏驅(qū)動測試界面問屏。的A存器初始化函數(shù)中將ADCDLY中延時值設(shè)置差。()RS485對RS進(jìn)行測試采用編寫應(yīng)用程序的方式,P機(jī)使用RS2325示制終端RS。RS4測試程序的流程圖如圖6示。始回打開/dev/ttyS1功?參性re、write讀寫串口是否圖4.4RS485流程圖出現(xiàn)問題:P機(jī)端接收不正確。顯模,送數(shù)中延時一定時間等待發(fā)送完成;否則,P機(jī)端不能正常接收數(shù)據(jù)。4用程序測試的界功驟:()開機(jī)后,按照正常的操作順序在顯示控制終端上操作按鈕,觀察軟件是否可以正常的跳轉(zhuǎn)到相應(yīng)的界面。()以不正常順序操作顯示控制終端上操作按鈕,觀察軟件是否有錯誤提示、死機(jī)等現(xiàn)。()對通信參數(shù)進(jìn)行設(shè)置,完成后,查看配置文件中對應(yīng)參數(shù)是否改變;對屏幕參數(shù)進(jìn)否置。()將顯示控制終端通過RS2328PC相

溫馨提示

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

最新文檔

評論

0/150

提交評論