




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
JIU
畢業(yè)論
題目基于嵌入式的TXT電子書閱讀器開發(fā)英文題目DevelopmentofTXTE-bookReaderBasedonEmbedded院系信息科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)姓名劉紅剛年級A081143指導(dǎo)教師于林峰 二○一二年五月摘要系統(tǒng)設(shè)計(jì)了基于嵌入式系統(tǒng)的TXT電子書閱讀器,在飛凌FS2410硬件平臺下,可以實(shí)現(xiàn)基本的閱讀,對TXT格式電子書實(shí)現(xiàn)上下行以及翻頁查看。主要的技術(shù)難點(diǎn):如何將文字顯示出來,實(shí)現(xiàn)多語言的支持,實(shí)現(xiàn)上下一行的翻動和上下頁的翻動顯示以及放大縮放字體顯示,改變字體顏色。首先對基于嵌入式系統(tǒng)的TXT電子書閱讀器的開發(fā)環(huán)境搭建和硬件系統(tǒng)平臺做了簡要的概述,并在現(xiàn)有的硬件平臺下,詳細(xì)講述了構(gòu)建嵌入式ARM-Linux開發(fā)系統(tǒng)的過程,整個過程是基于開發(fā)電子書閱讀器的內(nèi)容來闡述的。主要內(nèi)容包括,交叉編譯環(huán)境的搭建,U-Boot的移植與燒入,嵌入式Linux內(nèi)核的裁剪和移植,TFTP服務(wù)環(huán)境的搭建,NFS網(wǎng)絡(luò)文件傳輸環(huán)境的搭建,根文件系統(tǒng)的制作,SDL功能開發(fā)的研究,接下來也就是TXT電子書編碼的實(shí)現(xiàn),經(jīng)過多次的調(diào)試以及優(yōu)化,最后要將應(yīng)用程序移植到開發(fā)板上的實(shí)驗(yàn)過程。關(guān)鍵詞:嵌入式,閱讀器,翻頁AbstractSystemdesignaTXTreaderbasedonembeddedsystem,itcanrealisebasicreadingonthehardwareplatformoffeilingFS2410,includingtheviewforthetxtformate-bookasthewayofupanddownandpagerotate.Themaintechnicdifficulties,thatishowtoshowthetxtonthescreenwithwhichmethod,howcanrealisemul-languagesupport,howcanrealisetheshowofthepre,thenextpageandthepreline,thenextlineoftxt,andchangethecoloroffont.ItmakesabriefoverviewofTXTreaderbasedontheembeddedsystemtomakethedevelopmentenvironmetandbuildthehardwareplatformonthefirst,thenitmakesadetailedintroductionoftheprocessofbuildingaembeddedARM-Linuxdevelopmentsystembasedonourexistinghardwareplatform,andtheallthedescriptionisbasedonthedevelopmentofe-book.Allthecontentsincluedbuildingenviormenofcross-compile,thetransplantionandburntofU-boot,cuttingandtransplantionofkernel,thestructuresofTFTPserviceenviorment,thebuildingsofNFSnetworkfiletransferenvironment,theproductionofrootfilesystem,theresearchofSDLdevelopmentfunctions,thenextprocessisrealizationofencodeofe-book,whichistestedandoptimizedconstantly,portingtheapplicationtotheboardfinally.Keywords:Embedded,ElectronicReader,Page摘要 IAbstract II1緒論1.1系統(tǒng)概述 (1)1.2研究的意義和目的 (1)1.3國內(nèi)外發(fā)展現(xiàn)狀 (1)1.4發(fā)展趨勢 (2)1.5本章總結(jié) (2)2系統(tǒng)需求分析2.1系統(tǒng)功能需求分析 (3)2.2系統(tǒng)硬件需求分析 (4)2.3系統(tǒng)軟件需求分析 (4)2.4本章小結(jié) (6)3嵌入式ARM-Linux環(huán)境建立3.1基于Arm-Linux系統(tǒng)的總體設(shè)計(jì) (7)3.2Arm-Linux交叉編譯工具鏈的建立 (8)3.3U-boot的移植并燒入和燒入 (8)3.4Linux內(nèi)核的裁剪與移植 (10)3.5根文件系統(tǒng)的制作與移植 (12)3.6NFS網(wǎng)絡(luò)文件系統(tǒng)的建立 (13)3.7TFTP服務(wù)的配置 (14)3.8本章小結(jié) (15)4系統(tǒng)設(shè)計(jì)4.1系統(tǒng)概要設(shè)計(jì) (16)4.2系統(tǒng)詳細(xì)設(shè)計(jì) (17)4.3軟件運(yùn)行環(huán)境 (224.4本章小結(jié) (22)5系統(tǒng)實(shí)現(xiàn)5.1系統(tǒng)關(guān)鍵技術(shù) (23)5.2編碼實(shí)現(xiàn) (25)5.3本章小結(jié) (346程序移植與驗(yàn)證6.1移植需求 (35)6.2程序移植 (35)6.3程序驗(yàn)證 (36)6.4本章小結(jié) (38致謝 (39參考文獻(xiàn) (401緒論1.1系統(tǒng)概述本系統(tǒng)是設(shè)計(jì)一個基于嵌入式TXT的電子書閱讀器功能開發(fā)[1],實(shí)現(xiàn)在嵌入式系統(tǒng)上可以查看電子書的功能。硬件部分采用三星FS2410開發(fā)板[2],網(wǎng)線。系統(tǒng)軟件部分包括系統(tǒng)初始化程序U-boot[3],Linux操作系統(tǒng)[4],根文件系統(tǒng)[5]和一些運(yùn)行應(yīng)用程序所需要的庫。應(yīng)用軟件就是開發(fā)的TXT電子書閱讀器程序。基于SDL開發(fā)庫進(jìn)行開發(fā)[6],首先將嵌入式Linux操作系統(tǒng)移植到基于ARM9核的FS2410的平臺上。在嵌入式操作系統(tǒng)環(huán)境下,運(yùn)行具有閱讀TXT電子書功能的應(yīng)用程序,實(shí)現(xiàn)對TXT電子書的基本閱讀。1.2研究的意義和目的電子書閱讀器將會帶動閱讀習(xí)慣、學(xué)習(xí)模式、內(nèi)容創(chuàng)作及出版型態(tài)的改變,走向分眾化、個人化、網(wǎng)絡(luò)化及隨身攜帶的行動智能信息發(fā)展,全方位的數(shù)字內(nèi)容服務(wù)平臺及商業(yè)模式也將應(yīng)運(yùn)而生,這些改變將帶動許多新的服務(wù)產(chǎn)業(yè),也會是未來其他新興科技應(yīng)用發(fā)展的典范。針對電子書閱讀器的開發(fā)技術(shù),不僅是限于各大公司之間的競爭,對個人也是挑戰(zhàn),本系統(tǒng)設(shè)計(jì)并實(shí)現(xiàn)了TXT電子書閱讀器的功能,不僅要在嵌入式底層做好基礎(chǔ),而且還要在上層應(yīng)用上開發(fā)閱讀器。嵌入式系統(tǒng)可以有很靈活的特點(diǎn),在本系統(tǒng)中只需要滿足能讓應(yīng)用程序運(yùn)行的要求,也可根據(jù)需求進(jìn)行適當(dāng)?shù)母膭?。在上層?yīng)用開發(fā)上,電子書閱讀器要能在嵌入式系統(tǒng)上實(shí)現(xiàn)上、下一行查看以及翻頁查看功能以及放大縮小字體。1.3國內(nèi)外發(fā)展現(xiàn)狀隨著數(shù)字閱讀的方興未艾,電子書市場風(fēng)生水起,但國內(nèi)外電子書發(fā)展市場,整體增勢緩慢,電子書遠(yuǎn)沒有達(dá)到普及的程度[7]。究其原因,不僅在電子書內(nèi)容上沒有達(dá)到服務(wù)用戶的要求,而且在終端設(shè)施上也沒有達(dá)到,另外,電子書在資源上混亂,沒有形成一個完整的規(guī)劃。然而面對電子書市場的巨大利潤,國內(nèi)外各大公司都在此方向?qū)ど鏅C(jī)遇,在技術(shù)上,電子書閱讀器并沒有達(dá)到爐火純青的地步,有很多的技術(shù)難題存在。1.4發(fā)展趨勢盡管電子書現(xiàn)在已經(jīng)到處可見,但是用戶的需求是無止境的,伴隨著硬件設(shè)施的不段改良,電子書會向著便捷,清爽,多元化,智能化的道路發(fā)展,打破傳統(tǒng)紙質(zhì)書的閱讀習(xí)慣,有非紙質(zhì)書不能比擬的優(yōu)勢。在未來的發(fā)展道路上,電子書很有可能會和移動3G相結(jié)合,達(dá)到書籍和網(wǎng)絡(luò)的相結(jié)合,成為一項(xiàng)成熟的產(chǎn)業(yè)和技術(shù),電子書普及到每個用戶的手上。開發(fā)出高性能以及人性化的的閱讀器,才能滿足用戶需求,達(dá)到用戶所預(yù)期的效果。1.5本章總結(jié)2系統(tǒng)需求分析[8]2.1系統(tǒng)功能需求分析隨著數(shù)字電子技術(shù)的日益發(fā)展,電子書市場也愈演愈烈,面對巨大市場利潤,各大公司紛紛投向電子書市場,電子書的應(yīng)用將會普遍在普通市民中。本系統(tǒng)是開發(fā)出具有TXT功能的電子書閱讀器,該閱讀器主要功能有上下行查看,翻頁查看,放大查看以及盡可能完成具有書簽的電子書閱讀器,然后將該應(yīng)用程序移植到開發(fā)板上,能進(jìn)行相應(yīng)的閱讀功能,其功能流程如圖1-1所示。等待命令等待命令有按鍵有按鍵 否 結(jié)束 是結(jié)束有效按鍵 有效按鍵 否 是左Ctrl右ctrl左Alt下鍵上鍵右鍵左Ctrl右ctrl左Alt下鍵上鍵右鍵左鍵顏色退出放大下頁上頁下行上行顏色退出放大下頁上頁下行上行 圖1-1功能流程圖2.2系統(tǒng)硬件需求分析嵌入式系統(tǒng)開發(fā)與硬件平臺緊密相連,沒有硬件支持的嵌入式平臺是不完整的,良好的硬件平臺也為嵌入式系統(tǒng)應(yīng)用軟件的開發(fā)提供了許多便利,選擇合適的硬件平臺是一項(xiàng)復(fù)雜的工作。2.3系統(tǒng)軟件需求分析軟件平臺主要是BootLoader[10],嵌入式操作系統(tǒng),嵌入式文件系統(tǒng)以及一些在本電子書應(yīng)用程序運(yùn)行所要的庫。(1)BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。結(jié)合系統(tǒng)的需求并綜合比較了各種BootLoader的優(yōu)缺點(diǎn),本系統(tǒng)選擇了U-boot作為本系統(tǒng)的BootLoader。U-Boot,全稱UniversalBootLoader,是遵循GPL條款的開放源碼項(xiàng)目。U-boot不僅僅支持嵌入式Linux系統(tǒng)的引導(dǎo),它還支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系統(tǒng)。U-boot具有較高的可靠性和穩(wěn)定性,高度靈活的功能設(shè)置。U-boot可以使用JTAG板直接燒寫入NorFlash中使用,也可以直接燒寫入NandFlash中運(yùn)行。(2)嵌入式操作系統(tǒng)是嵌入式系統(tǒng)極為重要的組成部分。它提高了系統(tǒng)的可靠性、提高了開發(fā)效率,縮短了開發(fā)周期、充分發(fā)揮了32位CPU的多任務(wù)潛力。嵌入式操作系統(tǒng)的選擇主要考慮其可移植性、可利用資源、系統(tǒng)定制能力和成本。綜合對比了幾種嵌入式操作系統(tǒng),本系統(tǒng)選擇了嵌入式Linux操作系統(tǒng),它與其它嵌入式操作系統(tǒng)相比,Linux有以下特點(diǎn):=1\*GB3①Linux系統(tǒng)是層次結(jié)構(gòu)且內(nèi)核完全開放。Linux是由很多體積小且性能高的微內(nèi)核系統(tǒng)組成;=2\*GB3②強(qiáng)大的網(wǎng)絡(luò)支持功能;=3\*GB3③Linux具備一整套工具鏈,容易自行建立嵌入式系統(tǒng)的開發(fā)環(huán)境和交叉運(yùn)行環(huán)境,可以跨越嵌入式系統(tǒng)開發(fā)中仿真工具的障礙;=4\*GB3④Linux具有廣泛的硬件支持特性。無論是RISC還是CISC、32位還是64位等各種處理器,Linux都能運(yùn)行;=5\*GB3⑤Linux有裝載和卸載程序的能力,所有應(yīng)用程序以文件的形式被存放在閃存文件系統(tǒng)中并在必要的時(shí)候被裝載到內(nèi)存中,以節(jié)省RAM;=6\*GB3⑥Linux移植到新的微處理器體系非常快捷,一般是將其移植到一種新型的目標(biāo)板,其中包含有獨(dú)特的外設(shè)。(3)根據(jù)上面的分析本系統(tǒng)選擇了Linux作為嵌入式操作系統(tǒng),其支持多種文件系統(tǒng),包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等[11],為了對各類文件系統(tǒng)進(jìn)行統(tǒng)一管理,Linux引入了虛擬文件系統(tǒng)VFS,為各類文件系統(tǒng)提供一個統(tǒng)一的操作界面和應(yīng)用編程接口。不同的文件系統(tǒng)類型有不同的特點(diǎn),因而根據(jù)存儲設(shè)備的硬件特性、系統(tǒng)需求等有不同的應(yīng)用場合。在嵌入式Linux應(yīng)用中,主要的存儲設(shè)備為RAM和ROM,常用的基于存儲設(shè)備的文件系統(tǒng)類型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。本系統(tǒng)采用了busybox來制作yaffs的文件系統(tǒng)作為本系統(tǒng)的文件系統(tǒng),其主要有一下特點(diǎn):=1\*GB3①YAFFS[12]文件系統(tǒng)類似于JFFS/JFFS2,是專門為NAND閃存設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲設(shè)備。它是日志結(jié)構(gòu)的文件系統(tǒng),提供了損耗平衡和掉電保護(hù),可以有效地避免意外掉電對文件系統(tǒng)一致性和完整性的影響。=2\*GB3②YAFFS文件系統(tǒng)是按層次結(jié)構(gòu)設(shè)計(jì)的,分為文件系統(tǒng)管理層接口、YAFFS內(nèi)部實(shí)現(xiàn)層和NAND接口層,這樣就簡化了其與系統(tǒng)的接口設(shè)計(jì),可以方便地集成到系統(tǒng)中去。與JFFS相比,它減少了一些功能,因此速度更快,占用內(nèi)存更少。=3\*GB3③YAFFS采用一種多策略混合的垃圾回收算法,結(jié)合了貪心策略的高效性和隨機(jī)選擇的平均性,達(dá)到了兼顧損耗平均和系統(tǒng)開銷的目的。2.4本章小結(jié)在這一章,主要做的工作就是進(jìn)行系統(tǒng)需求分析,這一章在整個系統(tǒng)開發(fā)上起到了至關(guān)重要的作用,可以說是一個關(guān)鍵環(huán)節(jié),這一章的分析調(diào)查結(jié)果直接指導(dǎo)以后的系統(tǒng)開發(fā)的工作,也直接關(guān)系著整個系統(tǒng)完成后的功能情況。在進(jìn)行系統(tǒng)需求時(shí),查閱了大量關(guān)于硬件和嵌入式操作系統(tǒng)方面的知識,綜合各方面的因素,最終確定了選用的硬件平臺和嵌入式操作系統(tǒng),綜合比較了各個系統(tǒng)之間的優(yōu)點(diǎn)和不足,最終確定了系統(tǒng)的功能。3嵌入式ARM-Linux環(huán)境建立絕大多數(shù)的軟件開發(fā)都是本機(jī)開發(fā)、調(diào)試,本機(jī)運(yùn)行的方式進(jìn)行,但是這種方式不適合于嵌入式系統(tǒng)的軟件開發(fā),因?yàn)閷τ谇度胧较到y(tǒng)的開發(fā),它沒有足夠的資源在本機(jī)運(yùn)行開發(fā)工具和調(diào)試工具。因此在宿主機(jī)上搭建一個好的開發(fā)環(huán)境是很關(guān)鍵的一步,它的成敗直接影響下一步的進(jìn)展。根據(jù)需求分析確定了系統(tǒng)的開發(fā)環(huán)境是嵌入式Linux操作系統(tǒng)。3.1基于Arm-Linux系統(tǒng)的總體設(shè)計(jì)根據(jù)需求分析和嵌入式系統(tǒng)結(jié)構(gòu),得出了系統(tǒng)所需的系統(tǒng)結(jié)構(gòu)如圖3-1所示。圖3-1系統(tǒng)結(jié)構(gòu)圖論文設(shè)計(jì)的嵌入式TXT電子書閱讀器系統(tǒng)主要分為四個層次:(1)基于S3C2410A處理器的硬件平臺對SDL的研究和相關(guān)代碼實(shí)現(xiàn)并移植到開發(fā)板上。3.2Arm-Linux交叉編譯工具鏈的建立 與主流軟件開發(fā)相同,嵌入式系統(tǒng)開發(fā)同樣需要用到編譯器、鏈接器、解釋程序、集成開發(fā)環(huán)境以及諸如此類的開發(fā)工具。但是在嵌入式系統(tǒng)開發(fā)中,由于執(zhí)行應(yīng)用程序的平臺(目標(biāo)機(jī))與創(chuàng)建應(yīng)用程序的平臺(宿主機(jī))并不兼容,因此,需要交叉開發(fā)工具進(jìn)行交叉編譯。本文采用工具鏈Arm-none-linux-gnueabi-創(chuàng)建Arm-Linux交叉編譯環(huán)境[13]。建立過程如下:(1)登錄Linux操作系統(tǒng),然后再/home/farsight目錄下新建toolchain目錄;(2)將工具鏈toolchains_for_s3c復(fù)制到以上toolchain目錄下,并執(zhí)行解壓;(3)在宿主機(jī)中設(shè)置環(huán)境變量使得系統(tǒng)能自動調(diào)用已建立好的工具,具體的設(shè)置方法為:在根目錄中打開/etc/profile文件添加交叉編譯環(huán)境。具體設(shè)置方法為:vi/etc/profile,在文件的最后加上:exportPATH=$PATH:/home/farsight/toolchain/bin最后保存退出,在終端輸入source/etc/profile即可生效,在終端輸入arm-none按Tabs鍵即可提示得到該交叉編譯工具的名稱。3.3U-boot的移植并燒入和燒入針對FS2410開發(fā)板,對U-boot要進(jìn)行一定的移植工作[14],主要改動的地方有:(1)添加平臺信息smdk2410是s3c2410的標(biāo)準(zhǔn)版,在smdk2410平臺的基礎(chǔ)上可以實(shí)現(xiàn)FS2410的移植;=1\*GB3①進(jìn)入U(xiǎn)-boot所在目錄下的board/samsung/,進(jìn)行cpsmdk2410fs2410-a;=2\*GB3②進(jìn)入fs2410目錄,進(jìn)行mvsmdk2410.cfs2410.c;=3\*GB3③在Makefile下修改,將COBJS:=smdk2410flash.o;=4\*GB3④修改為COBJS:=fs2410flash.o,進(jìn)入U(xiǎn)-boot目錄下的include/configs目錄,進(jìn)行cpsmdk2410.hfs2410.h,返回到頂層目錄下的Makefile添加fs2410的內(nèi)容。在smdk2410_config:unconfig下面添加對fs2410相應(yīng)的信息:fs2410_config:unconfig@$(MKCONFIG)$(@:_config=)armarm920tfs2410samsungs3c24x0接著修改編譯器,在ifeq($(HOSTARCH,$(ARCH)))CROSS_COMPILE?= endif下面添加ifeq(arm,$(ARCH))CROSS_COMPILE=arm-none-linux-gnueabi-endif(2)針對fs2410平臺要做出進(jìn)一步的修改,主要做出的修改如下:修改start.S的中斷屏蔽位,改為11個;修改配置文件include/configs/fs2410.h中的命令行提示符,網(wǎng)絡(luò)配置參數(shù),內(nèi)核加載地址,Nand功能添加,環(huán)境變量的保存位置;在cpu/arm920t/start.S文件中對Nand啟動進(jìn)行修改,主要包括添加Nand啟動標(biāo)志位,添加BWSCON寄存器的定義,添加啟動模式的判斷;為nand啟動做出支持;修改common/env_nand.c文件,添加norflash環(huán)境變量燒寫功能。修改后,編譯U-boot,進(jìn)行如下操作:$:makefs2410_config$:make此時(shí)U-boot已經(jīng)做編譯好,在相應(yīng)的U-boot目錄下就可以看到u-boot.bin可執(zhí)行文件,此可執(zhí)行文件就可以實(shí)現(xiàn)燒錄了。(3)利用H-jtag將u-boot燒寫在fs2410開發(fā)板上的Nandflash上;(4)打開開發(fā)板,進(jìn)入命令狀態(tài)添加環(huán)境變量。$setenvethaddr08:00:3e:26:0a:43$setenvbootcmdtftp30800000uImage\;bootm$setenvbootargsconsole=ttySAC0,115200init=/linuxrcroot=/dev/nfsnfsroot=30:/opt/filesystemip=90:30:::farsight_30:eth0:off重啟開發(fā)板,此時(shí)開發(fā)板就可以工作了。3.4Linux內(nèi)核的裁剪與移植嵌入式系統(tǒng)的硬件資源畢竟有限,不能直接將Linux操作系統(tǒng)作為嵌入式硬件平臺上的操作系統(tǒng),需要針對具體的應(yīng)用進(jìn)行內(nèi)核的配置和裁減,使整個系統(tǒng)能夠存放到容量較小的Flash中。Linux的動態(tài)模塊加載方式使Linux的裁剪極為方便,高度模塊化使得添加和刪減非常容易。結(jié)合該系統(tǒng)在開發(fā)中所需要的功能,Linux內(nèi)核的裁剪與移植過程中涉及到的目錄有:include/、arch/、drivers/、fs/,移植的過程為:(1)在/home/farsight目錄,將Linux源代碼解壓至該目錄下,本設(shè)計(jì)用到的內(nèi)核為Linux-內(nèi)核;(2)編譯ARM-Linux內(nèi)核,進(jìn)入內(nèi)核目錄,在終端輸入:makemenuconfig;然后對內(nèi)核進(jìn)行裁剪和配置:(1)選擇<*>SystemType,選中該目錄下的<*>ARMsystemtype模塊,選中所用到的硬件平臺信息,即SamsungS3C2410;(2)在以后的實(shí)驗(yàn)中需要用到網(wǎng)線,必須在內(nèi)核中添加網(wǎng)卡的支持,在這一步中的操作如下。=1\*GB3①將cs8900.c和cs8900.h文件拷貝到linux-/drivers/net/arm目錄下。=2\*GB3②修改Linux-/dirvers/net/arm/Kconfig文件,添加以下內(nèi)容:ConfigS3C2410_CS8900 Tristate“CS8900support” DependsonNET_ETHERNET&&ARM&&ARCH_SMDK2410 help Supportforcs8900chipsetbaseEthernetcards,ifyouhaveanetworkcardofthis type=3\*GB3③修改driver/net/arm/Makefile文件,對網(wǎng)卡進(jìn)行支持,添加配置內(nèi)容為:obj-$(CONFIG_S3C2410_CS8900)+=cs8900.o=4\*GB3④添加地址映射定義,修改arch/arm/mach/s3c2410/include/mach/map.h文件,添加如下內(nèi)容:#definepSMDK2410_ETH_IO __phys_to_pfn(0x19000000)#definevSMDK2410_ETH_IO 0xE0000000#defineSMDK2410_ETH_IRQ IRQ_EINT9=5\*GB3⑤添加平臺信息,修改arch/arm/mach-s3c2410-smdk2410.c文件,添加對平臺信息的支持,其內(nèi)容為:{vSMDK2410_ETH_IO,pSMDK2410_ETH_IO,SZ_1M,MT_DEVICE}=6\*GB3⑥配置內(nèi)核,支持cs8900網(wǎng)卡。(3)LCD驅(qū)動也是必不可少的,具體的操作步驟如下:=1\*GB3①在arch/arm/mach-s3c2410/mach-smdk2410.c中添加LCD參數(shù)設(shè)置,在本文件中的smdk2410_init函數(shù)中添加如下內(nèi)容:S3c2410xx_fb_set_platdata(&s3c2410_fb_info)=2\*GB3②配置內(nèi)核,添加對LCD的支持。$makemenuconfig DeviceDrivers> Graphicssupport> [*]Supportforframebufferdevices> [*]S3C2410LCDframebuffersupport(4)用makezImage指令編譯生成內(nèi)核鏡像文件;(5)編譯完畢后在arch/arm/boot目錄下將會生成ARMLinux內(nèi)核鏡像文件zImage,這就是我們將要下載到目標(biāo)系統(tǒng)的內(nèi)核文件,將其拷貝到tftpboot目錄下,執(zhí)行的命令為:cparch/arm/boot/zImage/tftpboot3.5根文件系統(tǒng)的制作與移植(1)根文件系統(tǒng)介紹根文件系統(tǒng)不僅具有普通文件系統(tǒng)的存儲數(shù)據(jù)文件的功能,它是內(nèi)核啟動時(shí)所mount的第一個文件系統(tǒng),內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中,系統(tǒng)引導(dǎo)啟動程序會在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如rcS,inittab)和服務(wù)加載到內(nèi)存中去運(yùn)行。(2)根文件系統(tǒng)制作此處用到的根文件系統(tǒng)是busybox-.tar.gz,進(jìn)行解壓并進(jìn)入該目錄。=1\*GB3①首先要進(jìn)行源碼的一個安裝,在目錄有個_install,執(zhí)行如下命令進(jìn)行安裝:$makeinstall=2\*GB3②在安裝完成后,進(jìn)入到_install目錄,創(chuàng)建一些要用到的目錄,具體的目錄創(chuàng)建如下:$mkdirdevetcmntprocvartmpsysroot;=3\*GB3③接著將工具鏈中的庫需要拷貝到_install目錄下,實(shí)現(xiàn)工具鏈的可用,其操作如下:$cp/home/farsight/toolchain/arm-none-linux-gnueabi/lib./; =4\*GB3④接著要對庫進(jìn)行瘦身,刪除lib目錄下所有.o文件和.a文件,執(zhí)行的如下命令:$arm-none-gnueabi-striplib/*;=5\*GB3⑤最后要在添加系統(tǒng)啟動文件,在etc下添加文件inittab文件,在etc下添加fstab文件。此時(shí)根文件系統(tǒng)已經(jīng)制作完成,接著需要添加內(nèi)核對根文件系統(tǒng)的支持。(3)添加內(nèi)核的支持,具體配置如圖3-2所示。圖3-2內(nèi)核配置圖(4)創(chuàng)建設(shè)備文件根文件系統(tǒng)中有一個設(shè)備節(jié)點(diǎn)是必須的,在dev目錄下創(chuàng)建console節(jié)點(diǎn),其具體操作為:$mknoddev/consolec51(5)掛載測試將我們的文件系統(tǒng)拷貝到/opt/filesystem目錄下,cp_install/opt/filesystem–a,重新啟動開發(fā)板,查看是否可以正常掛載。3.6NFS網(wǎng)絡(luò)文件系統(tǒng)的建立NFS網(wǎng)絡(luò)文件系統(tǒng)可以使得系統(tǒng)調(diào)試開發(fā)更容易進(jìn)行,只需要將經(jīng)過交叉編譯器編譯之后生成的可執(zhí)行文件通過NFS掛載到板子上為調(diào)試做好準(zhǔn)備,避免反復(fù)的燒寫可執(zhí)行文件到FLASH中[15],造成時(shí)間浪費(fèi)和FlASH壽命的縮短。 (1)安裝NFSserver端口映射和服務(wù),首先需要下載相應(yīng)的包,接著進(jìn)行端口的映射,其命令如下:$sudoapt-getinstallnfs-kernel-servernfs-commonportmap$sudodpkg-reconfigureportmap,執(zhí)行完后,在出現(xiàn)提示的時(shí)候,選定“不將portmap綁定在loopback地址”;(2)通過查看/etc/default/portmap,確保#OPTIONS="-i"前面的#號被添加了,重啟portmap服務(wù):$sudo/etc/init.d/portmaprestart;(3)編輯/etc/exports文件,添加目標(biāo)系統(tǒng)的根文件系統(tǒng)映射目錄,此時(shí)需要將目標(biāo)系統(tǒng)的根文件系統(tǒng)最后映射到/opt/filesytem,在/etc/exports文件的最后添加如下內(nèi)容:/opt/filesystem*(subtree_check,rw,no_root_squash,async)(4)重啟NFS服務(wù),并更新,其執(zhí)行的命令為:$sudo/etc/init.d/nfs-kernel-serverrestart,接著進(jìn)行的操作為:$sudoexportfs–a,執(zhí)行完后此時(shí)就基本上可以實(shí)現(xiàn)NFS服務(wù);(5)測試NFS服務(wù),將主機(jī)上的共享目錄mount到自己另外一個目錄下,如:mount25:/home/farsight/toolchain/mnt,然后查看/mnt目錄下是否有/home/farsigh/toolchain目錄下的文件,如果有的話,則NFS服務(wù)啟動成功。3.7TFTP服務(wù)的配置(1)TFTP[16]服務(wù)可以用來在開發(fā)板和主機(jī)之間進(jìn)行傳輸內(nèi)核,對TFTP服務(wù)的配置是必不可少的,具體配置如下:$sudomkdir/tftpboot$cpuImage/tftpboot$sudochmod777/tftpboot-R$sudoapt-getinstalltftptftpd$sudoapt-getinstallopenbsd-inetd$sudovi/etc/inetd.conf在f文件中填入如下一行:tftpdgramudpwaitnobody/usr/sbin/tcpd/usr/sbin/in.tftpd/tftpboot修改/etc/default/tftpd-hpa下的文件為如下內(nèi)容:#Defaultsfortftpd-hpaRUN_DAEMON="yes"OPTIONS="-l-s/tftpboot”$sudo/etc/init.d/openbsd-inetdreload$sudo/etc/init.d/openbsd-inetdrestart(2)TFTP服務(wù)的測試進(jìn)入內(nèi)核目錄下將已經(jīng)編譯好的內(nèi)核鏡像拷貝到tftp目錄下,即/tftpboot。執(zhí)行cparch/arm/boot/zImage/tftpboot進(jìn)入/home/farsight目錄,在終端輸入,接著執(zhí)行tftp>getzImage,如果tftp服務(wù)配置成功后會在當(dāng)前目錄下會看到zImage鏡像文件了。3.8本章小結(jié)一個好的嵌入式開發(fā)平臺是進(jìn)行后續(xù)開發(fā)的一個重要基礎(chǔ),它在整個嵌入式系統(tǒng)開發(fā)的過程中起著非常重要的作用。本章主要闡述了嵌入式ARM-Linux開發(fā)平臺的搭建。具體的介紹了交叉編譯工具鏈的建立,嵌入式Linux操作系統(tǒng)的裁剪和移植,U-boot制作與移植,以及網(wǎng)絡(luò)文件系統(tǒng)、TFTP服務(wù)的搭建,為后續(xù)的開發(fā)以及調(diào)試打好基礎(chǔ)。4系統(tǒng)設(shè)計(jì)進(jìn)入了系統(tǒng)設(shè)計(jì)階段,要把軟件“做什么”的問題變換成“怎么做”的問題。要將需求分析階段生成后的文件做進(jìn)一步的分析和精化。描述軟件的總體體系結(jié)構(gòu),稱為軟件概要設(shè)計(jì)。然后對結(jié)構(gòu)進(jìn)一步細(xì)化,稱為詳細(xì)設(shè)計(jì)。本章主要介紹系統(tǒng)詳細(xì)設(shè)計(jì)。4.1系統(tǒng)概要設(shè)計(jì)軟件總體結(jié)構(gòu)的設(shè)計(jì)是概要設(shè)計(jì)關(guān)鍵的一步,直接影響到詳細(xì)設(shè)計(jì)與編碼的工作,所以要采用一定的設(shè)計(jì)方法,選取合理的設(shè)計(jì)方案。4.1.1系統(tǒng)功能說明4.1.2系統(tǒng)總體功能結(jié)構(gòu)總體功能結(jié)構(gòu)如圖4-1所示。電子書閱讀器電子書閱讀器上下翻行顯示上下翻頁顯示放大字體縮小字體改變字體顏色圖4-1系統(tǒng)功能模塊圖4.2系統(tǒng)詳細(xì)設(shè)計(jì) 在數(shù)據(jù)模塊中的整體開發(fā)流程如圖4-2所示。得到文件大小并申請空間得到文件大小并申請空間語言編碼初始化SDL初始化編碼判斷設(shè)置當(dāng)前偏移創(chuàng)建主窗口解析文件編碼準(zhǔn)備命令等待圖4-2整體開發(fā)流程圖在主函數(shù)中的整體開發(fā)流程中的具體實(shí)現(xiàn)步驟和方法如下:(1)讀出文件的大小,利用全局的文件大小變量以及Unicode編碼大小變量,為變量申請相應(yīng)的空間;(2)因開發(fā)中要用到SDL庫,在利用函數(shù)庫之前要對其進(jìn)行初始化操作;(3)初始化語言編碼指針,為編碼解析做好準(zhǔn)備;(4)判斷文件所采用的編碼方式;(5)根據(jù)文件的編碼方式,若編碼采用的非Unicode編碼,則將字符編碼轉(zhuǎn)換為Unicode編碼;若為Unicode編碼,不進(jìn)行轉(zhuǎn)換;(6)設(shè)置文件的當(dāng)前偏移量;(7)創(chuàng)建主窗口;(8)進(jìn)入等待接受命令狀態(tài),進(jìn)行相應(yīng)的處理。。在SDL窗口創(chuàng)建成功之后,窗口利用輪詢機(jī)制來接收發(fā)送過來的消息,此接收機(jī)制同樣采用的方法是利用了SDL函數(shù)庫,此函數(shù)是SDL_PollEvent(&event),,其中的按鍵對應(yīng)的是SDL庫中的命令,如果當(dāng)有按鍵按下時(shí),要根據(jù)按鍵的類型進(jìn)行區(qū)別,即event.type。當(dāng)按鍵類型是SDL_KEYDOWN時(shí),在此利用到的幾個按鍵分別對應(yīng):(1)SDLK_UP,即方向鍵中的向上鍵,顯示上一頁;(2)SDLK_DOWN,即方向鍵中的向下鍵,顯示下一頁;(3)SDLK_LEFT,即方向鍵中的向左鍵,顯示上一行;(4)SDLK_RIGHT,即方向鍵中的向右鍵,顯示下一行;(5)SDLK_LCTRL,即空格左邊鍵左邊的Ctrl鍵,退出程序;(6)SDLK_LALT,即空格左邊的Alt鍵,放大顯示。如果按鍵類型是SDL_QUIT時(shí),則進(jìn)行退出操作,和按空格左邊Alt鍵的功能一樣,。退出上一行顯示創(chuàng)建窗口退出上一行顯示創(chuàng)建窗口輪詢接收命令向上鍵按下向下鍵按下向左鍵按下向右鍵按下Alt鍵按下左Ctrl鍵按下上一行顯示上一行顯示字體放大或縮小上一行顯示 圖4-5命令模塊流程圖編碼解析模塊功能如圖4-6所示。Gb18030準(zhǔn)備Gb18030準(zhǔn)備 Utf-8取得編碼方式Utf-8取得編碼方式Utf-16Utf-16Unicode編碼Unicode編碼ISO8859-1 否ISO8859-1 是 Gb2312不需格式轉(zhuǎn)換Gb2312不需格式轉(zhuǎn)換轉(zhuǎn)換為Unicode轉(zhuǎn)換為Unicode完成完成圖4-6編碼格式轉(zhuǎn)換流程圖根據(jù)編碼標(biāo)準(zhǔn),所有的字符集若要正確顯示出來,都必須將非Unicode編碼格式轉(zhuǎn)換為Unicode編碼。根據(jù)得出的字符集編碼方式,如果是Unicode編碼,不要進(jìn)行轉(zhuǎn)換。在非Unicode編碼的情況下再繼續(xù)判斷,如果是Utf-8編碼,進(jìn)行單獨(dú)的轉(zhuǎn)換,否則對相應(yīng)的語言編碼進(jìn)行相應(yīng)的編碼轉(zhuǎn)換,該轉(zhuǎn)換都是對相應(yīng)的編碼二進(jìn)制表將其讀取。根據(jù)Utf-8的字符編碼的規(guī)定,Utf-8編碼的轉(zhuǎn)換步驟和方法如下:(1)在ASCII碼范圍內(nèi)的字符,即小于0x80的字符編碼,可直接支持顯示,不用進(jìn)行編碼的解碼;(2)在0x80到0x7FF的范圍內(nèi),要Utf-8編碼形式為高字節(jié)為110xxxxxx,低字節(jié)為10xxxxxx,將高字節(jié)中的110抽去,低字節(jié)的10抽去,最后剩下的就是Unicode編碼;(3)在0x800到0x7FFF的范圍內(nèi),Utf-8的編碼形式為1110xxxx10xxxxxx10xxxxxx,用同樣的方法將Utf-8前端的標(biāo)示符抽去,剩下的經(jīng)過組合成Unicode編碼??傮w來說,在非Unicode編碼中只有Utf-8編碼有規(guī)律可找,其他編碼形式都要經(jīng)過查表來進(jìn)行解碼。在接收到命令后,可以向上翻頁,向下翻頁,上一行,下一行,其實(shí)現(xiàn)原理類似,分析向下行顯示,功能實(shí)現(xiàn)流程如圖4-7所示。接收到右鍵填充背景到屏幕設(shè)置當(dāng)前偏移量接收到右鍵填充背景到屏幕設(shè)置當(dāng)前偏移量當(dāng)前偏移當(dāng)前偏移>0設(shè)置下一頁下一行的偏移量傳送字符串到屏幕設(shè)置下一頁下一行的偏移量傳送字符串到屏幕否刷屏 是刷屏設(shè)置上一頁上一行的偏移設(shè)置上一頁上一行的偏移圖4-7下一行顯示流程圖當(dāng)系統(tǒng)接收到向下行顯示的命令后,具體的實(shí)現(xiàn)步驟如下:(1)填充背景到屏幕;(2)設(shè)置當(dāng)前偏移為下一行偏移,畫出下一行;(3)判斷是否到屏幕末以及文件末;(4)設(shè)置下一行下一頁的偏移;(5)設(shè)置上一行上一頁的偏移;(6)刷新屏幕。4.3軟件運(yùn)行環(huán)境4.4本章小結(jié)5系統(tǒng)實(shí)現(xiàn)5.1系統(tǒng)關(guān)鍵技術(shù)實(shí)現(xiàn)TXT電子書閱讀器的開發(fā),主要用到的技術(shù)就是SDL,SDL(SimpleDirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發(fā)函數(shù)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函式,讓開發(fā)者只要用相同或是相似的程序碼就可以開發(fā)出跨多個平臺(Linux、Windows、MacOSX等)的應(yīng)用軟件。目前SDL多用于開發(fā)游戲、模擬器、媒體播放器等多媒體應(yīng)用領(lǐng)域。SDL的功能偵測當(dāng)前系統(tǒng)的字節(jié)序,快速轉(zhuǎn)換數(shù)據(jù)的函數(shù),讀寫指定字節(jié)序的數(shù)據(jù)。SDL支持的系統(tǒng)如下:Linux視頻顯示使用X11,利用XFree86DGA擴(kuò)展的優(yōu)勢,全屏顯示使用新的wMTRR加速,聲音使用OSSAPI,使用clone()系統(tǒng)調(diào)用和SysVIPC,或者glibc-2.1的pthreads實(shí)現(xiàn)線程。音頻回放采用BSoundPlayerAPI。5.1.2SDL開發(fā)基本介紹(2)視頻(3)事件SDL中支持的事件主要包括等待事件和事件輪詢,前者等待事件采用的調(diào)用函數(shù)為SDL_WaitEvent();而在5.2編碼實(shí)現(xiàn) 編碼的實(shí)現(xiàn)主要包括主函數(shù)實(shí)現(xiàn)、字符編碼的解碼實(shí)現(xiàn)、TXT主窗口的創(chuàng)建、等待命令、翻頁顯示等。主函數(shù)的實(shí)現(xiàn)5.2.2字符編碼解碼的實(shí)現(xiàn)Utf-8編碼,gb18030編碼,big5編碼,iso-8859編碼體系,Unicode編碼,如果文件所采用的編碼格式本身就是Unicode編碼,那么不需要進(jìn)行編碼解析就能直接正確讀取數(shù)據(jù)出來,而非Unicode編碼時(shí),分2種情況來分析,一種是針對Utf-8編碼體系的,因該編碼可以找到規(guī)律,故分開來對待,其他的編碼體系都是相似的解碼方法,都是從編碼體系-Unicode編碼表中查詢得到。表5-1Utf-8Unicode關(guān)系表根據(jù)以上表中給出的Utf-8與Unicode的關(guān)系,以下是對Utf-8字符集編碼的解析的主要代碼。5.2.3TXT主窗口實(shí)現(xiàn)5.2.4命令循環(huán)實(shí)現(xiàn)5.2.5翻頁顯示因有上下翻頁,上下行顯示,上下翻頁原理是一樣的,其主要思想就是不斷改變當(dāng)前的偏移為上、下頁的偏移或者是相應(yīng)的上、下行的偏移,最后更新窗口。以下為向下翻頁的代碼:5.2.6字體放大顯示字體的放大顯示和縮小顯示的方法類似,下面為字體放大顯示的主要代碼。voidprocess_zoom(){ if(pgtxt->zoom>=11) //總共設(shè)置的字體大小為12個 pgtxt->zoom=0; else pgtxt->zoom++; TTF_CloseFont(font); //關(guān)閉當(dāng)前的字體 //Openthenewfontsize font=TTF_OpenFont(DEFAULT_TTF_PATH,font_table[pgtxt->zoom]); txt_main_window_free(); //釋放當(dāng)前主窗口 main_window_update(); //更新主窗口}5.3本章小結(jié) SDL知識點(diǎn)是整個開發(fā)過程必不或缺的,真?zhèn)€開發(fā)都是基于SDL庫來開發(fā)的,了解SDL基本概念和功能是整個程序開發(fā)首要也是最重要的條件。本章從SDL的概念首先出發(fā),講述了什么是SDL,SDL的功能,簡單講述了SDL的基本開發(fā)模版,然后詳細(xì)介紹了整個編碼的思想,包括主函數(shù)中主要開發(fā)流程、TXT主窗口的創(chuàng)建思想,根據(jù)命令接收分別進(jìn)行上下翻頁,上下行翻行,退出,改變字體顏色,以及放大、縮小字體等操作。6程序移植與驗(yàn)證6.1移植需求 移植程序與測試是整個過程的最后的環(huán)節(jié),也是至關(guān)重要的一個環(huán)節(jié),決定了系統(tǒng)是否能運(yùn)行在開發(fā)板上,是否可以進(jìn)行電子書的閱讀。在進(jìn)行移植程序之前有必要對程序的移植做個移植需求分析,可以避免在移植過程中出現(xiàn)一些沒必要的疏忽。 TXT電子書閱讀器開發(fā)是基于SDL的開發(fā),在運(yùn)行程序
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 美國司法協(xié)議書
- 水穩(wěn)站股份合同協(xié)議書
- 簡短愛情協(xié)議書
- 地鐵kpi績效協(xié)議書
- 聚餐經(jīng)費(fèi)協(xié)議書
- 繼續(xù)婚姻協(xié)議書
- 殯儀館公建民營協(xié)議書
- 肉毒注射協(xié)議書
- 道和生發(fā)協(xié)議書
- 聘用店長協(xié)議書
- 算力是人工智能的基礎(chǔ)設(shè)施
- 電信總經(jīng)理談服務(wù)
- 2024年-2025年電梯檢驗(yàn)員考試題庫及答案
- 02J915 公用建筑衛(wèi)生間
- 混凝土攪拌站安全操作技術(shù)交底
- 獸用生物制品保藏、運(yùn)輸管理和相應(yīng)的應(yīng)急預(yù)案制度
- 水域救援課件教學(xué)課件
- 學(xué)術(shù)論文文獻(xiàn)閱讀與機(jī)助漢英翻譯智慧樹知到答案2024年重慶大學(xué)
- (初級)航空油料特設(shè)維修員(五級)理論考試題庫-上(單選題)
- 尾礦庫安全規(guī)程
- 互聯(lián)網(wǎng)+時(shí)代電商助農(nóng)模式的優(yōu)化策略:以S縣為例9000字(論文)
評論
0/150
提交評論