版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PAGEii掌上電腦系統(tǒng)開(kāi)發(fā)【摘要】隨著科技的發(fā)展和人們的需要,越來(lái)越多的消費(fèi)類電子產(chǎn)品已經(jīng)走進(jìn)了移動(dòng)時(shí)代,在嵌入式產(chǎn)品中掌上電腦的靈活便攜性在業(yè)內(nèi)脫穎而出,掌上電腦英文全名為PersonalDigitalAssistant,簡(jiǎn)稱PDA。PDA可分為工業(yè)級(jí)和消費(fèi)品PDA。工業(yè)級(jí)的主要有RFID讀寫器、條形碼、POS機(jī)等;消費(fèi)品PDA比較多如平板電腦、智能手機(jī)、游戲機(jī)等。此次開(kāi)發(fā)的為消費(fèi)品PDA,其功能主要定位在移動(dòng)辦公、學(xué)習(xí)、娛樂(lè)等。掌上電腦采用的是ARM-V4版的ARM9S3C2440開(kāi)發(fā)板為開(kāi)發(fā)平臺(tái),此為比較安全可靠而穩(wěn)定的開(kāi)發(fā)環(huán)境。掌上電腦系統(tǒng)包含的主要結(jié)構(gòu):底層的Uboot、內(nèi)核、文件系統(tǒng)。文件系統(tǒng)為應(yīng)用層,已經(jīng)是上層應(yīng)用,可擴(kuò)展性強(qiáng),所以主要實(shí)現(xiàn)的具體功能在文件系統(tǒng)上的應(yīng)用程序這一部分?!娟P(guān)鍵詞】掌上電腦;PDA;ARM9;移動(dòng)辦公;內(nèi)核引導(dǎo);文件系統(tǒng); PAGEi目錄TOC\o"1-3"\h\u1前言 01.1設(shè)計(jì)背景 01.2系統(tǒng)組成 11.3系統(tǒng)軟件設(shè)計(jì)結(jié)構(gòu)概述 32掌上電腦系統(tǒng)硬件介紹 32.1mini2440開(kāi)發(fā)板 32.2LCD顯示屏 43掌上電腦系統(tǒng)平臺(tái)搭建 53.1U-Boot移植 53.1.1BootLoader介紹 53.1.2BootLoader設(shè)計(jì)目的 53.1.3BootLoader操作模式 53.1.4BootLoader選型 53.1.5U-boot啟動(dòng)流程 63.1.6U-boot移植過(guò)程 63.2內(nèi)核移植 73.2.1內(nèi)核介紹 73.2.2內(nèi)核的任務(wù) 73.2.3內(nèi)核啟動(dòng)過(guò)程 73.2.4內(nèi)核文件目錄 73.2.6內(nèi)核裁剪移植過(guò)程 83.3文件系統(tǒng)制作 93.3.1文件系統(tǒng)介紹 93.3.2構(gòu)建根文件系統(tǒng) 93.3.3BusyBox介紹與應(yīng)用 93.3.4文件系統(tǒng)制作過(guò)程 94掌上電腦應(yīng)用軟件系統(tǒng) 104.1系統(tǒng)功能 104.2基本設(shè)計(jì)框架和處理流程圖 114.3多媒體模塊 114.3.1音頻播放器 114.3.2圖片瀏覽器 124.4系統(tǒng)模塊 134.4.1桌面壁紙?jiān)O(shè)置 134.4.2系統(tǒng)時(shí)間設(shè)置 134.4.2日歷 144.5工具箱模塊 144.5.1秒表 144.5.2鬧鐘 154.5.3畫圖 164.5.4計(jì)算器 164.5.6文本編輯器 174.6游戲模塊 175結(jié)束語(yǔ) 186致謝 197參考文檔 20PAGE20 PAGE01前言1.1設(shè)計(jì)背景現(xiàn)今IT技術(shù)迅猛發(fā)展,在嵌入式CPU中,8位和32位的微處理器在業(yè)內(nèi)擔(dān)任主力。在這數(shù)字化時(shí)代中8位處理器與32位處理器的性能在不斷拓展,成本不斷下降,但這同時(shí)還存在一個(gè)問(wèn)題,8位處理器在很多環(huán)境下無(wú)法適應(yīng)高數(shù)量的處理,所以32位的處理器自然就擔(dān)當(dāng)起了中高端產(chǎn)品的重任。32位的RISC處理器已經(jīng)成為高中端嵌入產(chǎn)品的首選CPU,其主要原因還是歸于客戶的需求,如今客戶所提的各類問(wèn)題都需要處理大量的數(shù)據(jù),這時(shí)只能提升CPU處理速度與多任務(wù)的能力來(lái)滿足客戶的種種要求。從另一個(gè)方面看,像數(shù)碼相機(jī)、手機(jī)、PDA、智能游戲機(jī)等移動(dòng)掌上設(shè)備,還有像視頻監(jiān)控系統(tǒng)、路由器、DTU等通信產(chǎn)品的推出,而且物物間還存在著大量數(shù)據(jù)流量的通信,這必然使系統(tǒng)更替上嵌入式操作系統(tǒng)來(lái)方便管理數(shù)據(jù)。還另一些如家電音箱、電視機(jī)、汽車音響、電玩等進(jìn)行了數(shù)字化要求,它們的性能都超出了8位微處理器能提供的性能,進(jìn)而也選擇了32位的處理器。一個(gè)完整的嵌入式系統(tǒng)包含嵌入式處理器、處理器外圍硬件、嵌入式操作系統(tǒng)、以及系統(tǒng)上的應(yīng)用軟件。所以一個(gè)完整的嵌入式系統(tǒng)是集軟件、硬件于一體的微型計(jì)算機(jī)系統(tǒng),但他不是PC計(jì)算機(jī),只是一個(gè)只完成PC計(jì)算機(jī)一個(gè)功能模塊的電子產(chǎn)品?,F(xiàn)今我們的嵌入式產(chǎn)品大都把功能軟件系統(tǒng)集成于硬件系統(tǒng)中。目前嵌入式產(chǎn)品的開(kāi)發(fā)特性有,以PC計(jì)算機(jī)為開(kāi)發(fā)環(huán)境,也以計(jì)算機(jī)的模型原理為框架,硬件可裁判,軟件特定。產(chǎn)品面向用戶、面向應(yīng)用、完成特定功能、可靠、體積小、功耗低等特點(diǎn)。所以說(shuō)嵌入式產(chǎn)品是與各行業(yè)相結(jié)合的產(chǎn)物[1]。由于嵌入式環(huán)境的需要,有一部分的嵌入式操作系統(tǒng)具有一定的實(shí)時(shí)功能。但對(duì)于在交通運(yùn)輸、工業(yè)控制等特殊領(lǐng)域中的嵌入式操作系統(tǒng),便要求硬實(shí)時(shí)功能,這原因是在這些領(lǐng)域中對(duì)實(shí)時(shí)的要求高,硬件實(shí)時(shí)性好。而在我們?nèi)粘5纳畹闹袘?yīng)用如掌上計(jì)算機(jī)、手機(jī)、電玩等所用的嵌入式操作系統(tǒng),也具有語(yǔ)音與圖像處理軟實(shí)時(shí)功能。要如此成熟的嵌入式開(kāi)發(fā)環(huán)境下,掌上電腦的實(shí)現(xiàn)已經(jīng)不現(xiàn)是實(shí)驗(yàn)室的作品了。掌上電腦以嵌入式微處理器為核心、軟硬件可裁判,來(lái)滿足用戶的需求的一種便攜式設(shè)備[2]。為此掌上電腦也可認(rèn)為是便攜式的筆記本電腦。但因?yàn)橛布c處理器的性能上無(wú)法與PC機(jī)相比,所以很大一部功能受限。雖然無(wú)法與計(jì)算機(jī)一起完成各樣的強(qiáng)大功能,但是其便攜性、價(jià)格低廉以及特殊功能成為了其存在的意義。在市面上已經(jīng)有很多成形的掌上電腦,但這些成形的掌上電腦的功能比較全,使得價(jià)格也昴貴了許多。其中至少有50%的功能是很少被用用戶用到,這些功能是被浪費(fèi)了。而本次設(shè)計(jì),主要是圍繞這一觀點(diǎn)來(lái)設(shè)計(jì)。設(shè)計(jì)中主要是顯示屏與音頻兩個(gè)模塊的實(shí)現(xiàn),而其它拓展部分可根據(jù)功能的需要可進(jìn)行定制二次開(kāi)發(fā),因?yàn)橛布涌谝呀?jīng)存在,所以二次開(kāi)發(fā)會(huì)很方面。接下來(lái)主要介紹下本次設(shè)計(jì)中的功能。1.掌上電腦的功能掌上電腦所實(shí)現(xiàn)的主要的功能有:(1)在操作系統(tǒng)上完成個(gè)人信息管理,如記事本、備忘錄等、計(jì)算器;(2)日常應(yīng)用,如鬧鐘、日歷等;(3)娛樂(lè),如游戲、音頻播放;2.掌上電腦組成
下面是掌上電腦的組成的特點(diǎn):系統(tǒng)分層上看,掌上電腦具體可分為三大部分:(1)BootLoaderBootLoader這對(duì)于經(jīng)常使用計(jì)算機(jī)的用戶來(lái)說(shuō)是個(gè)很熟悉的東西了。沒(méi)錯(cuò)BootLoader是系統(tǒng)加電后運(yùn)行的第一段代碼,在我們PC機(jī)中引導(dǎo)程序是由BIOS與硬盤中的OS一起組成的。而在我們嵌入式系統(tǒng)中通常沒(méi)有像PC機(jī)那樣的BIOS固件程序,因此BootLoader完成系統(tǒng)的加載與啟動(dòng)任務(wù)[3]。(2)內(nèi)核內(nèi)核指的是一個(gè)提供硬件抽象、對(duì)硬件安全訪問(wèn)、設(shè)備驅(qū)動(dòng)的安裝的程序。(3)文件系統(tǒng)文件系統(tǒng)是操作系統(tǒng)用于明確管理磁盤或分區(qū)上的文件的方法和數(shù)據(jù)結(jié)構(gòu)。而且我們通常把應(yīng)用軟件也寫在文件系統(tǒng)里。1.2系統(tǒng)組成掌上電腦系統(tǒng)組成如圖1.1所示: PAGE2圖1.1掌上電腦系統(tǒng)組成此系統(tǒng)由四大部分組成:底層硬件部分包括有: CPU 主核彈部分,中央處理器FlashSDRAMSRAM 用于存儲(chǔ)數(shù)據(jù)LCDtouchscreen 顯示屏Watchdog 看門狗設(shè)備驅(qū)動(dòng)部分包括有:LED 顯示燈驅(qū)動(dòng)KEY 按鍵驅(qū)動(dòng)PWM 用于蜂鳴器的驅(qū)動(dòng)SDRAM 內(nèi)存模塊驅(qū)動(dòng)DMA 數(shù)據(jù)搬運(yùn)驅(qū)動(dòng)FLASH flash驅(qū)動(dòng)UART 串口驅(qū)動(dòng)LCD 顯示屏驅(qū)動(dòng)IIS 音頻播放驅(qū)動(dòng)OS部分這里移植的是linux操作系統(tǒng)內(nèi)核為2.6.32版本Applaction部分包括有: Rootfs 文件系統(tǒng) QTGui QT應(yīng)用程序系統(tǒng)開(kāi)發(fā)過(guò)程;一個(gè)嵌入式應(yīng)用項(xiàng)目的開(kāi)發(fā)過(guò)程是一個(gè)硬件和和軟件設(shè)計(jì)的綜合過(guò)程,是一個(gè)系統(tǒng)設(shè)計(jì)過(guò)程,此次掌上電腦設(shè)計(jì)主要是軟件設(shè)計(jì)為主,所以硬件部分沒(méi)有設(shè)計(jì)直接用友善之臂開(kāi)發(fā)板mini2440,軟件設(shè)計(jì)有以下步驟:Bootloader設(shè)計(jì)Linux內(nèi)核的定制移植,驅(qū)動(dòng)程序的開(kāi)發(fā)文件系統(tǒng)制作、應(yīng)用程序的設(shè)計(jì)系統(tǒng)調(diào)試,樣機(jī)交付1.3系統(tǒng)軟件設(shè)計(jì)結(jié)構(gòu)概述硬件方面已經(jīng)選用友善之臂公司提供的mini2440開(kāi)發(fā)板,本系統(tǒng)從底層平臺(tái)搭建開(kāi)始,逐級(jí)向上的思想。系統(tǒng)分成兩部分,第一部分系統(tǒng)平臺(tái)搭建,其中包括Uboot移植、內(nèi)核移植及rootfs制作,第二部分為應(yīng)用軟件系統(tǒng),用QT實(shí)現(xiàn)各種應(yīng)用程序功能。2掌上電腦系統(tǒng)硬件介紹 硬件分為兩部分一塊為mini2440開(kāi)發(fā)板,另一塊為sonyX35LCD屏,詳細(xì)介紹如下2.1mini2440開(kāi)發(fā)板Mini2440是目前國(guó)內(nèi)性價(jià)比最高的一款開(kāi)發(fā)板,它采用的samsungS3C2440處理器,CPU內(nèi)核電源及復(fù)位芯片穩(wěn)定,保證了系統(tǒng)運(yùn)行穩(wěn)定。其外圍接口如圖2.1圖2.1mini2440開(kāi)發(fā)板外圍接口該板設(shè)有兩種啟動(dòng)方式,NORflash與NANDflash啟動(dòng),NORflash啟動(dòng)方式為開(kāi)發(fā)時(shí)使用的,而NAND啟動(dòng)方式為產(chǎn)品形成時(shí)使用的啟動(dòng)方式。 其硬件構(gòu)成及接口資源: CPU處理器ARM型號(hào):SamsungS3C2440參數(shù):主頻400MHz,最高533MhzSDRAM內(nèi)存板上64MSDRAM參數(shù):32bit數(shù)據(jù)總線,時(shí)鐘最高頻率達(dá)100MHzFLASH存儲(chǔ)板上256MNandFlash,2MNorFlash LCD顯示屏接口 -集成4線電阻式觸摸屏接口 -支持黑白色屏、4灰度級(jí)、16灰度級(jí)、256色屏、4096色屏STN液晶屏 接口資源 -1個(gè)100M以太網(wǎng)RJ-45接口(配DM9000網(wǎng)絡(luò)芯片) -帶3個(gè)串口,波特率可配達(dá)115200bps,且RS232電平轉(zhuǎn)換電路 -1個(gè)USBHost接口-1個(gè)SD卡存儲(chǔ)接口 -1個(gè)USBSlaveB型接口 -4個(gè)用戶可用Led -6個(gè)用戶可用按鍵 -1路立體聲音頻輸出接口,2路麥克風(fēng)接口 -1個(gè)2.0mm間距10針FTAG接口 -1個(gè)I2C總線AT24C08芯片 -電源接口(5V),帶電源開(kāi)關(guān)和指示燈 -1個(gè)PWM控制蜂鳴器 -1個(gè)I2C總線AT24C08芯片 -1個(gè)可調(diào)電阻,連接AD模數(shù)轉(zhuǎn)換 -板載實(shí)時(shí)時(shí)鐘電池 系統(tǒng)時(shí)鐘源 -12M無(wú)源晶振2.2LCD顯示屏 如圖2.2所示為3.5寸LCD顯示屏 圖2.2X35LCD顯示屏該顯示屏為sony公司的X35屏,分辨率為240*320,帶4線TFT電阻觸摸屏。3掌上電腦系統(tǒng)平臺(tái)搭建掌上電腦系統(tǒng)平臺(tái),相當(dāng)PC機(jī)的運(yùn)行應(yīng)用程序的環(huán)境,也類似windows里的DOS。掌上電腦系統(tǒng)平臺(tái)搭建有三個(gè)過(guò)程,第一步就是Uboot的移植,第二步,內(nèi)核的移植,最后一步就是rootfs的制作[4]。如圖3.1為固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu),其主要分配了三個(gè)過(guò)程的內(nèi)存。圖3.1固態(tài)存儲(chǔ)設(shè)備的典型空間分配結(jié)構(gòu)3.1U-Boot移植3.1.1BootLoader介紹 BootLoader這對(duì)于經(jīng)常使用計(jì)算機(jī)的用戶來(lái)說(shuō)是個(gè)很熟悉的東西了。沒(méi)錯(cuò)BootLoader是系統(tǒng)加電后運(yùn)行的第一段代碼,在我們PC機(jī)中引導(dǎo)程序是由BIOS與硬盤中的OS一起組成的。而在我們嵌入式系統(tǒng)中通常沒(méi)有像PC機(jī)那樣的BIOS固件程序,因此BootLoader完成系統(tǒng)的加載與啟動(dòng)任務(wù)。 用簡(jiǎn)單的話說(shuō)就是,BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段程序。這段程序的運(yùn)行,就是為了初始化硬件設(shè)備,并且把整個(gè)系統(tǒng)的軟硬件帶到合適的狀態(tài),為操作系統(tǒng)內(nèi)核做準(zhǔn)備。3.1.2BootLoader設(shè)計(jì)目的嵌入式操作系統(tǒng)的啟動(dòng)需要一定的條件,而這些條件都是BootLoader來(lái)完成的。所以說(shuō)BootLoader充當(dāng)?shù)氖且龑?dǎo)的角色。3.1.3BootLoader操作模式現(xiàn)今大多數(shù)的BootLoader都會(huì)帶有兩種不同的操作模式,啟動(dòng)加載和下載模式,這兩種操作模式對(duì)于我們開(kāi)員來(lái)說(shuō)是非常重要的。如果沒(méi)有下載模式,我們的開(kāi)發(fā)時(shí)間將會(huì)大打加長(zhǎng)。但是從用戶的角度來(lái)看這個(gè)問(wèn)題的話,BootLoader將操作系統(tǒng)加載的方式啟動(dòng)的,而體會(huì)不到啟動(dòng)下載與加載模式的不同。加載啟動(dòng),也有人叫“自主”模式,當(dāng)用戶開(kāi)機(jī)后,BootLoader將從存儲(chǔ)設(shè)備把操作系統(tǒng)通過(guò)加載方式,加載到RAM中運(yùn)行,在這加載的整個(gè)過(guò)程中用戶是不需要介入的。這種工作模式也是產(chǎn)品發(fā)布的時(shí)候用的工作模式。下載模式,這種模式被用在開(kāi)發(fā)過(guò)程當(dāng)中,當(dāng)開(kāi)發(fā)員給設(shè)備上電時(shí)BootLoader通過(guò)串口、網(wǎng)絡(luò)或其它通訊方法從開(kāi)發(fā)的PC機(jī)上下載文件到目標(biāo)機(jī)的RAM中,然后再寫入固態(tài)存儲(chǔ)設(shè)備中。3.1.4BootLoader選型BootLoade包括U-BOOT、vivi、ppcboot、armboot、Redboot等,而我們此次設(shè)計(jì)選用的是U-BOOT,這是個(gè)通用的引導(dǎo)程序。U-Boot不僅僅支持嵌入式的引導(dǎo),當(dāng)前還有其它操作系統(tǒng)也支持,如netBSD,VxWorks,QNX,RTEMS,ARTOS,ARTOS,LynxOS等。U-Boot還能支持像MIPS、X86、ARM、NIOS、Xscale等諸多常用的處理器[4]。U-Boot源友在不斷地更新,支持的開(kāi)發(fā)板越來(lái)越多,其源碼被反復(fù)應(yīng)用、測(cè)試和維護(hù),具有很好的穩(wěn)定性;U-Boot較新的版本已經(jīng)支持smdk2410開(kāi)發(fā)板,所以其移植的工作量大大減少,可以縮短移植的周期,提高開(kāi)發(fā)效率,降低開(kāi)發(fā)的成本。3.1.5U-boot啟動(dòng)流程一般我們把bootloader分為階段1和階段2兩大階段。階段1依賴于CPU體系結(jié)構(gòu)的代碼,它主要與CPU及存儲(chǔ)設(shè)備進(jìn)行密切的處理工作,對(duì)設(shè)備及存儲(chǔ)器進(jìn)行初始化工作,為了提高工作效率以及涉及到對(duì)協(xié)處理器的設(shè)置,所以階段1的代碼一搬都用匯編編寫。其工作的主要流程:首先要先定義代碼入口地址,然后設(shè)置中斷異常的向量表,為中斷異常提供跳轉(zhuǎn)地址,設(shè)置完向量表后,再把CPU的工作模式設(shè)置為超級(jí)用戶模式,接下來(lái)關(guān)閉看門狗,禁掉所有的中斷。之后初始化設(shè)置CPU上工作頻率;給內(nèi)存區(qū)配置控制寄存器;完后把boot代碼復(fù)制一份到RAM中;配置??臻g,為加載鏡像2準(zhǔn)備內(nèi)存空間,最后跳轉(zhuǎn)到鏡像2的代碼入口點(diǎn),此入口一般情況為C代碼的入口。階段2因?yàn)檫@個(gè)階段的代碼比較通用,所以用C語(yǔ)言來(lái)寫,主要實(shí)現(xiàn)一般的流程以及對(duì)板上一些外設(shè)驅(qū)動(dòng)支持,而這部分的代碼將會(huì)被復(fù)制到RAM中去執(zhí)行。這樣做的目的是為了方面程序的移植與閱讀。在通常情況下,如果對(duì)于相同的CPU以及存儲(chǔ)設(shè)備,若要添加外設(shè)支持時(shí),其階段1的代碼可以保持不變,只要對(duì)階段2中的代碼時(shí)行一定的修改就行,同樣,如果要支持不同的CPU,則只需修改階段1的代碼。 其工作的主要流程: 首先對(duì)本階段要使用到的一些硬件設(shè)備的初始化,初始化完后對(duì)系統(tǒng)內(nèi)存映射檢測(cè),將內(nèi)核的和文件系統(tǒng)從flash中讀出,寫入RAM空間中。接下來(lái)給加上內(nèi)核啟動(dòng)時(shí)需要用到的參數(shù),最后調(diào)用內(nèi)核,這樣bootloader的生命周期就結(jié)束了,控制權(quán)已經(jīng)移交了操作系統(tǒng)。3.1.6U-boot移植過(guò)程 移植工作主要是添加開(kāi)發(fā)板硬件相關(guān)的文件、配置選項(xiàng),然后編譯生成文件燒寫入板中。在植前,先下好u-boot包,再分析u-boot查找已支持開(kāi)發(fā)板中是否有自己的板,如果沒(méi)有,找一款硬件配置與自己開(kāi)發(fā)板最接近的開(kāi)發(fā)板的u-boot進(jìn)行修改。 經(jīng)過(guò)對(duì)U-Boot包的分析,同時(shí)用自己的板與其它進(jìn)行比較找到了一款sbc2410x與mini2440最接近。所以選用sbc2410的配置為藍(lán)本[5]。 移植過(guò)程:下載源碼包在PC的linux開(kāi)發(fā)環(huán)下建立root用戶的工作目錄/build_uboot把下載到的源碼包解壓到工作目錄確定分區(qū),這具區(qū)要看內(nèi)核而定修改U-boot包的頂層Makefile,添加對(duì)mini2440的編譯支持在/board的子目錄中建立自己的開(kāi)發(fā)板/board/mini2440目錄,然后將sbc2410.c更名為mini2440.c且將
Makefile里面所有sbc改為mini修改/include/configs修改start.s,把里面所用關(guān)于sbc的宏改為mini/lib_arm/board.c中把關(guān)于SBC2410X_的宏都改為MINI2440_編譯源代碼,使用的4.3.2交叉編譯工具燒寫flash,編譯生成的u-boot.bin文件通過(guò)串口工具下載到NANDFlash中。到這,整個(gè)U-Boot移植過(guò)程就結(jié)束了,我們移植U-Boot的最終的目的是讓板子能啟動(dòng)內(nèi)核,所以下一步就是移植內(nèi)核了。3.2內(nèi)核移植3.2.1內(nèi)核介紹在如今所流行的操作系統(tǒng)中,Linux最大的特點(diǎn)就是遵循GPL自由軟件基金會(huì)發(fā)行的用于計(jì)算機(jī)軟件的許可證的操作系統(tǒng),因此我們可以自己地使用并且修改和擴(kuò)展它。就是因?yàn)檫@么一大特點(diǎn),linux被越來(lái)越多的愛(ài)好者青睞。在這么一個(gè)開(kāi)源的環(huán)境下,經(jīng)常挨家探討的問(wèn)題就出現(xiàn)了,就是關(guān)于linux的系統(tǒng)移植中的核心部分,內(nèi)核。在不同的操作系統(tǒng)上,像這樣的移植是跨不同平臺(tái)的、與其硬件是相關(guān)的,甚至連CPU都不相同。首先先介紹下內(nèi)核,在Linux系統(tǒng)中實(shí)際上是由兩個(gè)比較獨(dú)立的部分組成的,即內(nèi)核部分與文件系統(tǒng)部分。通常啟動(dòng)一個(gè)Linux系統(tǒng)是這樣的,首先通過(guò)U-Boot的加載把控制權(quán)交到了內(nèi)核的第一行代碼,在這之后的過(guò)程中Linux要將自己的剩余部分全加都加載到內(nèi)存,然后初始化所有的設(shè)備,在內(nèi)存中建立好所需的數(shù)據(jù)結(jié)構(gòu)。這一系列的執(zhí)行流程就是內(nèi)核啟動(dòng)時(shí)的工作,這個(gè)時(shí)候內(nèi)核就已經(jīng)掌控了所有的硬件設(shè)備了。如何操作這些設(shè)備,這些就是文件系統(tǒng)的事了,等文件系統(tǒng)有命令下達(dá),內(nèi)核就跟據(jù)命令進(jìn)行操作并跟文件系統(tǒng)做交互。3.2.2內(nèi)核的任務(wù)a.初始化和控制硬件設(shè)備,管理內(nèi)存、管理進(jìn)程、還有對(duì)設(shè)備的讀寫操作等做準(zhǔn)備b.與文件系統(tǒng)進(jìn)行交互,當(dāng)文件系統(tǒng)下發(fā)命令時(shí),內(nèi)核將去執(zhí)行命令,并且與文件系統(tǒng)進(jìn)行交互。3.2.3內(nèi)核啟動(dòng)過(guò)程在U-Boot無(wú)成對(duì)系統(tǒng)的引導(dǎo)并將Linux內(nèi)核調(diào)入內(nèi)存之后,周用函數(shù)bootLinux()將中轉(zhuǎn)到Kernel的起始地址。如果內(nèi)核包沒(méi)有被壓縮,那就可以直接啟動(dòng)了,如果內(nèi)核包被進(jìn)行壓縮過(guò)的話,則要對(duì)其解壓,在壓縮過(guò)的內(nèi)核包頭部有一段解壓縮的程序。解壓后保存從Uboot中傳進(jìn)來(lái)的參數(shù),執(zhí)行一段與處理器存著的代碼,接下來(lái)就會(huì)判斷一下要不要將其重定位,如果不需要重定位的話直接對(duì)bss段進(jìn)行清零,然后初始化頁(yè)表1:1的映射,因?yàn)樵诖蜷_(kāi)cache之前,我們必需得先打開(kāi)mmu,所以先對(duì)頁(yè)表進(jìn)行初始化,然后再依次打開(kāi)mmu和cache。以上的的都準(zhǔn)備完畢后,判斷解壓內(nèi)核時(shí)會(huì)不會(huì)覆蓋還沒(méi)解壓的內(nèi)核映像。如果會(huì)的話,則要進(jìn)行重定位調(diào)整,再解壓內(nèi)核;若是不會(huì)對(duì)其未解壓的映像覆蓋,則直接解壓。最后就是刷新cache,關(guān)閉mmui和dcache,使其禁掉cache和tlb,最后跳轉(zhuǎn)到內(nèi)核入口點(diǎn)去執(zhí)行與arm相關(guān)的內(nèi)核代碼[7]。3.2.4內(nèi)核文件目錄 Linux內(nèi)核對(duì)很多平臺(tái)都有很好的支持,其對(duì)外部接口都是統(tǒng)一的,并且與平臺(tái)無(wú)關(guān),當(dāng)然內(nèi)核里大多數(shù)代碼都是與平臺(tái)無(wú)關(guān)的,其主要體系的代碼位于arch/architecture目錄與include/asm-architectur目錄里,與arm體系的平臺(tái)相關(guān)的代碼主要是在arch/arm與include/asm-arm目錄里。 Linux內(nèi)核源代碼位于/usr/src/linux目錄下/arch目錄中包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。而具體與CPU及其體系結(jié)構(gòu)相關(guān)的代碼以單獨(dú)目錄里,而相應(yīng)的.h頭文件內(nèi)里存放在/include/asm目錄。/drivers目錄中是一些外圍設(shè)備的代碼,包括網(wǎng)卡驅(qū)動(dòng)程序、底層SCSI驅(qū)動(dòng)程序,及視頻驅(qū)動(dòng)程序等。/fs目錄存放的是所有文件系統(tǒng)實(shí)現(xiàn)的代碼。/include目錄存放建立內(nèi)核代碼時(shí)所需的大部分包含文件。/init存放內(nèi)核初始化代碼。/ipc目錄為進(jìn)程間通信用的代碼/kemel目錄為高層系統(tǒng)調(diào)用代碼/lib為庫(kù)文件目錄/mm目錄里存放高層內(nèi)核管理代碼/net網(wǎng)絡(luò)連接代碼/sound聲卡驅(qū)動(dòng)代碼和其它常用的設(shè)備驅(qū)動(dòng)/usr構(gòu)建包含root文件系統(tǒng)映像的歸檔文件以上是內(nèi)核主要代碼的存放目錄,部分未列出。從目錄結(jié)構(gòu)上看內(nèi)核中對(duì)每個(gè)模塊都進(jìn)行了分類,如圖3.2是linux內(nèi)核主要組成部分,主要由虛擬文件系統(tǒng)、內(nèi)存管理、進(jìn)程調(diào)度、進(jìn)程間通信和網(wǎng)絡(luò)接口等5個(gè)子系統(tǒng)組成。圖3.2內(nèi)核子系統(tǒng)組成圖如圖3.3為arch目錄,從目錄中可以看到第個(gè)體系結(jié)構(gòu)都對(duì)應(yīng)的子目錄圖3.3arch目錄 如圖3.4為arm目錄,而在arm目錄下也有很多的sub-arch子目錄,不同的arm的CPU對(duì)應(yīng)的目錄也不同,所以各個(gè)類型都會(huì)有專門對(duì)應(yīng)的目錄。圖3.4arm目錄3.2.6內(nèi)核裁剪移植過(guò)程內(nèi)核移植前先找好參考板,而參考板的選擇也是有一定的要求,處理器要相同或者類似,外圍接口電路相同或類似基本的接口已經(jīng)驅(qū)動(dòng)了[6]。本設(shè)計(jì)中選用的內(nèi)核版本為linux-2.6.32,可到內(nèi)核官網(wǎng)下載地址如下:/pub/linux/kernel/v2.6/linux-.tar.gz源碼拿到了就可以開(kāi)始做裁剪與移植工作了,步驟如下:在頂層目錄下復(fù)制config_mini2440_x35為.config在根目錄下查看Makefile中編譯器的前綴是否為arm-linux-查看機(jī)器碼和UBoot中的代碼是否一致Makemenuconfig進(jìn)行內(nèi)核配置系統(tǒng)篩選需要安裝的與編譯的文件與驅(qū)動(dòng)。進(jìn)入/arch/arm/boot目錄,用mkimage工具為內(nèi)核加上u-boot引導(dǎo)所需要的文件頭最后把生成的uImage.img燒入flash 到這內(nèi)核就移植完了,下步就是根文件系統(tǒng)的制作。3.3文件系統(tǒng)制作3.3.1文件系統(tǒng)介紹 所謂文件系統(tǒng)就是操作系統(tǒng)用于明確分區(qū)或磁盤上的文件的數(shù)據(jù)結(jié)構(gòu)和方法,也就是在磁盤上組織起文件的方法。Linux文件系統(tǒng)是一個(gè)完整結(jié)構(gòu),文件系統(tǒng)將所有的文件組織到樹形的目錄結(jié)構(gòu)中。 在Linux系統(tǒng)中遵循文件系統(tǒng)科學(xué)分類標(biāo)準(zhǔn),就是一個(gè)定義了許多文件和目錄的目錄名和路徑的標(biāo)準(zhǔn)。其主要的規(guī)則如下:/etc目錄存放配置文件/dev目錄存放設(shè)備文件/lib目錄存放庫(kù)文件/bin、/usr/bin、/usr/sbin目錄存放的是系統(tǒng)編譯完后的可執(zhí)行文件3.3.2構(gòu)建根文件系統(tǒng) 在linux系統(tǒng)中的根文件系統(tǒng)必需得包含能夠讓linux正常運(yùn)行的基本內(nèi)容,所以在制作跟文件系統(tǒng)時(shí)應(yīng)包含以下這些內(nèi)容: 基本的文件系統(tǒng)結(jié)構(gòu):etc,lib,proc,bin,dev,usr,tmp,sys一些基本程序運(yùn)行時(shí)所需要的動(dòng)態(tài)鏈接庫(kù)文件基本的系統(tǒng)配置文件,如在init.d目錄下的rcS文件一些必要的設(shè)備文件的支持。命令行的指令操作,如ls、rm、cp、vi、sh、cd等。3.3.3BusyBox介紹與應(yīng)用 從英文名字上翻譯為“繁忙的箱子”,在實(shí)際應(yīng)用上,我們可以理解為linux系統(tǒng)里所有命令的集合,我們?cè)诓僮鱨inux系統(tǒng)的命令行時(shí)用到的所有指令都源于這個(gè)busybox。平時(shí)我們用的cp、ls、cd等命令都用到了glibc的調(diào)用,因此我們的使用的命令都靜態(tài)地鏈接了這些調(diào)用,然而每個(gè)命令都是很大的,所以在每次的發(fā)行版本當(dāng)中,都會(huì)使用動(dòng)態(tài)鏈接的方法使用glibc,不過(guò)glibc本身就很大,在平常使用的PC機(jī)下還可以運(yùn)行,但是在嵌入式系統(tǒng)中這就有點(diǎn)吃力了,并且在通常的嵌入式系統(tǒng)都不可能所有的庫(kù)函數(shù)都會(huì)用上[9]。 解決這個(gè)命令使用的問(wèn)題有兩種辦法,一種是對(duì)glibc進(jìn)行適當(dāng)?shù)夭眉?,而別一辦法就是Busybox,就是把cp、cd等常用的命令程序的main函數(shù)名改下,全部都鏈接在一起,再把glibc靜態(tài)鏈接,這種方法的好處就是只需要調(diào)用才會(huì)對(duì)其進(jìn)行鏈接[10]。 Busybox的源碼可以從官網(wǎng)下載,網(wǎng)址為/downloads/,這個(gè)源碼為1.5.0版[11]。3.3.4文件系統(tǒng)制作過(guò)程 在制作文件系統(tǒng)過(guò)程中必需要注意目錄的正確創(chuàng)建,還有一些重要的初始化文件與啟動(dòng)文件,具體步驟如下:建立開(kāi)時(shí)用的工作目錄建立文件系統(tǒng)的根目錄,該目錄為上文構(gòu)建根文件系統(tǒng)中所分析的目錄交叉編譯busybox,解壓開(kāi)源碼包,添加上交叉編譯工具,然后對(duì)其進(jìn)配置編譯對(duì)文件系統(tǒng)進(jìn)行編譯安裝復(fù)制交叉編譯的鏈接庫(kù)文件,其中包含動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)創(chuàng)建配置文件,在內(nèi)核啟動(dòng)完時(shí),先執(zhí)行sbin/init程序,接下來(lái)執(zhí)行/bin/sh,sh啟動(dòng)后就進(jìn)行讀取一些初始化配置文件。在/etc/profile文件里設(shè)置環(huán)境變量創(chuàng)建inittab文件,定義子進(jìn)程,并寫入啟動(dòng)命令等待文件被執(zhí)行時(shí)啟動(dòng)創(chuàng)建rcS文件創(chuàng)建fstab文件構(gòu)建/dev目錄并加入創(chuàng)建必要的節(jié)點(diǎn)的命令用mkcramfs工具制作yaffs2映像文件,生成rootfs.yaffs2文件最后燒寫rootfs.yaffs2到3分區(qū)啟動(dòng)開(kāi)發(fā)板,這時(shí)一個(gè)操作系統(tǒng)就跑起來(lái)了,但在這個(gè)時(shí)候我們得在開(kāi)發(fā)板上顯示圖像數(shù)據(jù),tslib與QTE庫(kù)的移植,在后面我們界面的顯示與應(yīng)層用的為QT應(yīng)用程序的運(yùn)行需要用到這兩個(gè),所以我們先得移植tslib與QTE庫(kù)到板子上。最后移植完QTE庫(kù)了,這就已經(jīng)幫后面應(yīng)用程序的執(zhí)行提供了一個(gè)基本的運(yùn)行環(huán)境[12]。運(yùn)行QT的環(huán)境基本完成時(shí),還有重要的一點(diǎn),我們?cè)诤竺娴膽?yīng)用層有用到音頻播放器,所以我們得再移植個(gè)Mplayer來(lái)給音頻軟件提供編解碼功能。至此一個(gè)掌上電腦系統(tǒng)平臺(tái)就基本搭建好了,在后面如果要拓展功能的話,只需進(jìn)入系統(tǒng)平臺(tái)安裝驅(qū)動(dòng)就行了。4掌上電腦應(yīng)用軟件系統(tǒng) 應(yīng)用軟件系統(tǒng)設(shè)計(jì)也叫UI的總體設(shè)計(jì),我們的界面用的是QT庫(kù),QT用的是C++的基本語(yǔ)法,我們只需要熟悉C++語(yǔ)法就可以開(kāi)發(fā)了,所以說(shuō)QT是一門比較簡(jiǎn)單編程語(yǔ)言,嚴(yán)格來(lái)說(shuō)QT應(yīng)該只是C++的一個(gè)庫(kù)。4.1應(yīng)用軟件系統(tǒng)流程圖4.1系統(tǒng)功能 整個(gè)應(yīng)用軟件系統(tǒng)由多媒體、系統(tǒng)、工具、游戲四大模塊組成。多媒體中包含播放器、圖片瀏覽器功能;系統(tǒng)模塊中包含桌面壁紙?jiān)O(shè)置、系統(tǒng)時(shí)間設(shè)置、日歷;工具箱中包含秒表、鬧鐘、畫圖、計(jì)算器、文本編輯;游戲里只放了一個(gè)俄羅斯方塊。4.2基本設(shè)計(jì)框架和處理流程圖 如圖4.1為應(yīng)用軟件系統(tǒng)的流程圖。 從圖4.1中可以清楚看到我們的應(yīng)用軟件系統(tǒng)各個(gè)模塊的子功能。從文件系統(tǒng)的初始化文件中加入./PDA運(yùn)行應(yīng)用軟件系統(tǒng)程序,這樣就運(yùn)行起了一個(gè)進(jìn)程[13]。各個(gè)了功能塊,如多媒體為一個(gè)線程,系統(tǒng)為一個(gè)線程等,再下一級(jí),音頻播放器為多媒體線程創(chuàng)建出來(lái)的子線程,圖片瀏覽器的線程也為多媒體線程的子線程,其它功能模塊也如此。 如圖4.2為代碼工程圖,按模塊分成了4個(gè)文件夾。圖4.2代碼工程圖4.3多媒體模塊 多媒體模塊下有兩個(gè)應(yīng)用功能,一個(gè)是音頻播放器,另一個(gè)為圖片瀏覽器。圖4.3音頻播放界面4.3.1音頻播放器 音頻播放器中可以播放音樂(lè)跟視頻多部分格式都支持,如.mp3、.avi、.mp4、.rmvb等。在這這個(gè)播放器中,主要是以視頻的播放為主,因?yàn)橐曨l中已經(jīng)包含了音樂(lè)播放了[14]。音頻播放器的功能介紹打開(kāi)音頻播放界面,如圖4.3,與普通的windows視頻播放器類似,有快進(jìn)、快退、上一個(gè)節(jié)目、一下個(gè)節(jié)目、全屏、暫停、停止、問(wèn)音量調(diào)節(jié)等功能。音頻播放器的實(shí)現(xiàn)音頻播放器中主要用到Mplayer編解碼器,我們主要對(duì)編解碼器用slave命令對(duì)其控制就可以達(dá)到在界面控制音頻的效果。圖4.4音頻控制流程 圖4.4為音頻控制流程,打開(kāi)rb0、dsp、mixer設(shè)備節(jié)點(diǎn),音頻文件通過(guò)Mplaye編解碼送到各設(shè)備中,其它中slave命令控制來(lái)控制一系列的操作,比如全屏、音量、播放、暫停等。實(shí)現(xiàn)的代碼片段如圖4.5,代碼中為信息與槽的連接,也就是對(duì)各按鍵功能的連接實(shí)現(xiàn)。圖4.5音頻播放器代碼片段4.3.2圖片瀏覽器 圖片瀏覽器實(shí)現(xiàn)比較簡(jiǎn)單,不需要像音頻播放器那樣借助編解碼器實(shí)現(xiàn),所以的功能函數(shù)已經(jīng)在QTE庫(kù)里已經(jīng)存在,我們只需調(diào)用就行了,所以在實(shí)現(xiàn)功能時(shí)主要的還是按鈕的UI設(shè)計(jì)。 圖片瀏覽器的功能介紹進(jìn)入圖片瀏覽器,打開(kāi)一張圖片。如圖4.6為圖面瀏覽器的界面,在界面上可以看到上一張、下一張、放大、縮小、左翻轉(zhuǎn)、右翻轉(zhuǎn)等功能。圖片瀏覽器的實(shí)現(xiàn)圖片瀏覽器中的,所有功能需要的函數(shù)在QTE里已經(jīng)可以直接調(diào)用,不得不說(shuō)QT庫(kù)功能還是挻全的,而且編寫方便簡(jiǎn)單。所以我們的重點(diǎn)是在做UI設(shè)計(jì),用PS做她各按鈕的圖標(biāo)保存成PNG格式,然后我們?cè)诖a中為各功能圖標(biāo)寫好位置后,直接用PNG圖標(biāo)蓋上各功能按鈕的形,這樣更瀏覽器里的工具箱更加美觀。圖4.6圖片瀏覽器界面4.4系統(tǒng)模塊 系統(tǒng)模塊中包含了桌面壁紙?jiān)O(shè)置、系統(tǒng)時(shí)間設(shè)置還有日歷。與上一模塊一樣,點(diǎn)擊系統(tǒng)模塊時(shí),會(huì)進(jìn)入各功能選擇。4.4.1桌面壁紙?jiān)O(shè)置 桌面壁紙?jiān)O(shè)置比較簡(jiǎn)單,點(diǎn)擊桌面壁紙?jiān)O(shè)置時(shí),跳轉(zhuǎn)出選擇圖片的頁(yè)面,這時(shí)只要選中一張圖片就會(huì)覆蓋現(xiàn)在桌面上的壁紙。所以其代碼也會(huì)相對(duì)簡(jiǎn)單很多,只需封閉一個(gè)更新桌面頁(yè)面的函數(shù)就可以實(shí)現(xiàn)壁紙?jiān)O(shè)置的效果,代碼如圖4.7。圖4.7壁紙?jiān)O(shè)置代碼片段4.4.2系統(tǒng)時(shí)間設(shè)置 圖4.8為設(shè)置窗口,進(jìn)入系統(tǒng)時(shí)鐘設(shè)置窗口,這是一個(gè)簡(jiǎn)單的窗口布局,因?yàn)槲覀冎恍枰O(shè)置時(shí)間,所以沒(méi)做過(guò)多的UI設(shè)計(jì)。里面用上了三個(gè)QSpinBox來(lái)存放時(shí)、分、秒,兩個(gè)QPushButton設(shè)置成確認(rèn)設(shè)置跟取消設(shè)置功能按鈕[15]。所以只需封裝兩個(gè)方法okclicked()與settime(),再關(guān)聯(lián)上信號(hào)跟槽,系統(tǒng)時(shí)間設(shè)置的功能就可以實(shí)現(xiàn)了。圖4.8時(shí)間設(shè)置窗口4.4.2日歷日歷頁(yè)面比起上面兩個(gè)頁(yè)面來(lái)說(shuō)更復(fù)雜一點(diǎn),主要是表格的設(shè)置比較麻煩。實(shí)例一個(gè)QDate成員變量,用它來(lái)存放我們系統(tǒng)更新的時(shí)間,安裝三個(gè)槽setFontSize()、setMonth()、setYear(),再將其連接到顯示框里,面cursor表格里存放日期,跟據(jù)系統(tǒng)里的日期填入cursor表格里。從系統(tǒng)模塊中點(diǎn)日歷,將進(jìn)顯示這設(shè)置年月日,及日期表格。如圖4.9為日歷表格的代碼片段。4.9日歷表格代碼片段4.5工具箱模塊 工具箱模塊中內(nèi)容比較多,其各應(yīng)用程序功能有秒表、鬧鐘、畫圖、計(jì)算器還有個(gè)文本編輯。在這個(gè)模塊里像計(jì)算最為復(fù)雜,因?yàn)槔锩嬉玫揭恍┺D(zhuǎn)換的算法跟公式,還有界面較多按鈕,設(shè)計(jì)比較麻煩。具體實(shí)現(xiàn)看下面詳細(xì)解析。4.5.1秒表 秒表的設(shè)計(jì)與上面的視頻播放的結(jié)構(gòu)有點(diǎn)類似,主要是上面為操作按鈕,下面為顯示時(shí)間框。 秒表功能介紹在工具箱中點(diǎn)擊秒表進(jìn)入秒表頁(yè)面,如圖4.10,在頁(yè)面的最頂上一欄為時(shí)間,下來(lái)一欄為中有start按鈕,開(kāi)始秒的計(jì)時(shí),clear為清空記錄,在點(diǎn)下start按鈕時(shí),該工具欄會(huì)中會(huì)出現(xiàn)registe按鈕,此按鈕來(lái)用記錄當(dāng)前定時(shí)時(shí)間,點(diǎn)擊一次記錄一條時(shí)間。秒表的實(shí)現(xiàn)從秒的界面開(kāi)始,QString一個(gè)字符串來(lái)存放背景圖片;實(shí)例一個(gè)QTIME用于定時(shí);主顯示界面為QLabel;再定義三個(gè)PushButton,用于操作定時(shí)器。只要設(shè)置三個(gè)EVENT就可以完成我們的定時(shí)器了。timerEvent()更新時(shí)間,paintevent()畫背景,showEvent()刷新頁(yè)面。圖4.10秒表界面 4.5.2鬧鐘 在工具箱里,秒表與鬧鐘的界面風(fēng)格差不多,因?yàn)椴僮髡咻^為簡(jiǎn)單所以,代碼量都不會(huì)很大,主要都是布局上會(huì)多花些心思。 鬧鐘功能介紹在工具箱中點(diǎn)擊鬧鐘進(jìn)入鬧鐘頁(yè)面,如圖4.11,頁(yè)面中間有三個(gè)可選的鬧鐘,如果要啟用鬧鐘,只要在對(duì)應(yīng)的鬧鐘后面選上就行。Alarm1為例,在時(shí)間框中填入鬧鐘時(shí)間,并選上啟用,等到系統(tǒng)時(shí)間到達(dá)鬧鐘時(shí)間時(shí)音樂(lè)就會(huì)響起,如果要停止音樂(lè),只需點(diǎn)StopAlarm音樂(lè)就會(huì)停止。圖4.11鬧鐘頁(yè)面鬧鐘功能實(shí)現(xiàn)鬧鐘的原理很簡(jiǎn)單,或者說(shuō)跟本不算是原理,只是一個(gè)簡(jiǎn)單套路。用戶設(shè)定好時(shí)間,并啟用鬧鐘,當(dāng)系統(tǒng)時(shí)間與鬧鐘所設(shè)的時(shí)間一致的話,就會(huì)解設(shè)定好的槽函數(shù)。所以只要在槽函數(shù)里寫入播放的音樂(lè)就可行了。界面的代碼就不分析了,都與上文中的秒表大同小異。4.5.3畫圖 這是一個(gè)窗口頁(yè)面,大小可伸縮,畫圖的功能比較多,包括像畫直線、圓、加粗等操作。 畫圖介紹該功能中,可操作的按鈕比較多,菜單設(shè)置選項(xiàng)里有兩欄File與Options。File里面有Open圖片,Save圖片,還有個(gè)退出。在Options菜單里面選項(xiàng)比較多,畫筆顏色、刷子顏色、畫筆大小、涂鴉、畫直線、畫矩形、畫圓形、畫橢圓、擦除、清屏。畫圖代碼實(shí)現(xiàn)實(shí)現(xiàn)并不難,因?yàn)楦线呉粯佑蠶T庫(kù)少了很多事,像畫圓、矩形等功能在QT庫(kù)都有對(duì)應(yīng)類的方法,所以我們只需要寫好每個(gè)選項(xiàng)對(duì)應(yīng)需要的發(fā)槽就行,等待用按下選項(xiàng)發(fā)出號(hào)就會(huì)自動(dòng)跳轉(zhuǎn)到槽函數(shù)去執(zhí)行。如圖4.12為畫圖的代碼片段,其中為保存圖片、畫筆顏色與筆刷槽函數(shù)的代碼,從這足可見(jiàn)QT庫(kù)的方便。圖4.12畫圖代碼片段4.5.4計(jì)算器 計(jì)算器在很多的手機(jī)與學(xué)習(xí)機(jī)都很常見(jiàn),還有專門的計(jì)算器產(chǎn)品。這里也是跟手機(jī)里的計(jì)算器差不多,模擬計(jì)算器的一個(gè)軟件。 功能介紹計(jì)算器的操作應(yīng)該大家都比較熟悉,如圖4.13backspace為單數(shù)字刪除鍵,clearAll為清屏鍵,exit為退出計(jì)算器。中間為數(shù)字區(qū)0-9,數(shù)字區(qū)旁為運(yùn)算符號(hào)鍵,運(yùn)算符號(hào)鍵右邊為常用的運(yùn)算函數(shù),如平方根、平方等。所以這是一個(gè)能夠做一些簡(jiǎn)單運(yùn)算用的計(jì)算器。 計(jì)算器的實(shí)現(xiàn)有了上面對(duì)QT編程思想的了解,現(xiàn)在對(duì)于計(jì)算器來(lái)說(shuō)應(yīng)該很容易了,其實(shí)大多的界面編程都是類似的,只要對(duì)各控制件類、按鈕類熟悉了,一切都會(huì)變得簡(jiǎn)單很多。計(jì)算器的實(shí)現(xiàn)也一樣,先做好每個(gè)按鍵的大小,再填入layout里面,接下來(lái)完成各按鍵的功能,最后關(guān)聯(lián)按鍵的信號(hào)與槽函數(shù)。 槽函數(shù)中只是把獲取到的數(shù)據(jù)進(jìn)行運(yùn)算處理,其它功能如刪除、清空等操作的槽函數(shù)與運(yùn)算處理的有所不同。圖4.13計(jì)算器界面4.5.6文本編輯器 文本編輯器功能這個(gè)與上文中的畫圖工具有相通點(diǎn),不過(guò)這個(gè)會(huì)較簡(jiǎn)單,因?yàn)椴恍枰霎媹D里面各種畫圖形操作。 文本編輯菜單內(nèi)容比較少,只有新建文件、打開(kāi)文件、保存文件、退出電子書等簡(jiǎn)單選項(xiàng)。 實(shí)現(xiàn)功能的的代碼里面只需要實(shí)現(xiàn)openFile()newFile()兩個(gè)函數(shù)的功能就行,其它步驟與上文相似。4.6游戲模塊 該模塊中,工作量比較大,只做了一個(gè)游戲。不過(guò)這也是一款比較經(jīng)典的游戲“俄羅斯方塊”,這個(gè)游戲還是參考了網(wǎng)友提供的資料才完成,大部分編寫的思想還源于網(wǎng)友熱心幫忙。圖4.14俄羅斯方塊如圖4.14為游戲的全景圖,游戲中有下一個(gè)方塊的提示、積分、銷毀行數(shù)、方塊下落速度,其它為其本操作按鈕左、右、下、上、暫停、開(kāi)始、退出,其中向上鍵為方塊轉(zhuǎn)向變換。通過(guò)定時(shí)刷新,讓窗口中的方塊動(dòng)起來(lái)。 游戲?qū)崿F(xiàn)與前面幾個(gè)功能比起來(lái)復(fù)雜了很多,代碼分了三個(gè)文件Tetrixpiece.cpp文件實(shí)現(xiàn)各種方塊,Tetrixboard.cpp文件實(shí)現(xiàn)各動(dòng)作操作與規(guī)則的實(shí)現(xiàn),Tetrixwindow.cpp文件為主窗口的布局。Tetrixpiece.cpp文件:如圖4.15中rotatedLeft()為實(shí)現(xiàn)翻轉(zhuǎn)方塊的代碼,其對(duì)X、Y坐標(biāo)進(jìn)行對(duì)換以達(dá)到翻轉(zhuǎn)效果。 Tetrixboard.cpp文件:文件中包含如start()、pause()、moveLeft()、pieceDropped()等對(duì)方塊進(jìn)行操作函數(shù)進(jìn)行實(shí)現(xiàn)。圖4.15Tetrixpiece代碼片段Tetrixwindow.cpp文件:在此文件中對(duì)整個(gè)窗口、游戲按鈕、分?jǐn)?shù)記錄、方塊大小等把有控件進(jìn)行布局。這個(gè)游戲做完后回頭看,其它就不難,也就沒(méi)那么神秘了。5結(jié)束語(yǔ)至此整個(gè)設(shè)計(jì)就已經(jīng)到結(jié)尾了,其中還有不少的BUG還得繼續(xù)修補(bǔ),一個(gè)完整個(gè)的設(shè)計(jì)需要用戶與時(shí)間來(lái)考驗(yàn)的,BUG的存在證明了設(shè)計(jì)的處于正常軌道當(dāng)中?,F(xiàn)在整個(gè)系統(tǒng)結(jié)構(gòu)出來(lái)了,后面還有很多功能可以拓展,如SD卡的拓展、網(wǎng)絡(luò)的連接、安裝應(yīng)用軟件等等,這些都是后期可以再補(bǔ)充的內(nèi)容。此次設(shè)計(jì)還是基于培訓(xùn)班課程的素材的基礎(chǔ)上進(jìn)行整合,并加強(qiáng)與完了整個(gè)系統(tǒng)。該設(shè)計(jì)的完成也證明了培訓(xùn)的效果更肯定了在大學(xué)里的學(xué)習(xí)。從剛開(kāi)始什么是linux都不明白到現(xiàn)在成功的開(kāi)發(fā)出了掌上電腦的系統(tǒng),一路困難重重,掌上電腦的開(kāi)發(fā)是我第一次對(duì)嵌入式產(chǎn)品有了啟蒙性的了解,今后的路也許將就從此打開(kāi)。6致謝 這次系統(tǒng)能夠最終成功完成,應(yīng)該說(shuō)是對(duì)我大學(xué)學(xué)習(xí)專業(yè)知識(shí)的肯定,也是對(duì)培訓(xùn)效果的證明。當(dāng)然這次成功完成系統(tǒng)的開(kāi)發(fā)除了個(gè)人的努力外,是應(yīng)該感謝一直幫助我的老師和同學(xué)們。首先感謝培訓(xùn)班的蘇洪球工程師,在蘇工的指導(dǎo)下,我從嵌入式知識(shí)就是從無(wú)到有的一個(gè)過(guò)程。蘇工待人隨和,只要我們有問(wèn)題她都會(huì)耐心地一一詳細(xì)解答。再來(lái),感謝我們研究室的導(dǎo)師潘新民教授,在開(kāi)發(fā)這系統(tǒng)前我大部分的硬件專業(yè)知識(shí)都是在研究室里潘教授給我的啟蒙。同時(shí),還得感謝身邊一直支持我的同學(xué)和朋友,在此表示衷心感謝。7參考文檔[1]潘新民,王燕芳.微型計(jì)算機(jī)控制技術(shù)實(shí)用教程.北京:電子工業(yè)出版社,2010.1-19.[2]張俊峰.基于ARM芯片的機(jī)車制動(dòng)監(jiān)測(cè)系統(tǒng)研究.學(xué)位論文.武漢:武漢理工大學(xué),2004.8-9.[3]王濰.基于uClinux的溫控系統(tǒng)的底層軟件開(kāi)發(fā).學(xué)位論文.天津:天津大學(xué),2005.13-13.[4]白偉平.基于ARM的嵌入式BootLoader淺析.期刊論文:微計(jì)算機(jī)信息,2006.6-9.[5]劉長(zhǎng)偉.基于IntelPXA270的Bootloader的設(shè)計(jì).會(huì)議論文:全國(guó)抗惡劣環(huán)境計(jì)算機(jī)第十七屆學(xué)術(shù)年會(huì),2007.13-15.[6]陳溯.基于ARM平臺(tái)的數(shù)碼相框軟件開(kāi)發(fā)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 出納員招聘面試題及答案
- 市場(chǎng)策略分析師職位面試技巧與高頻問(wèn)題解析
- 投資分析師的常見(jiàn)問(wèn)題與答案參考
- 直播運(yùn)營(yíng)經(jīng)理面試題及流量變現(xiàn)方法含答案
- 2025年智能城市管理系統(tǒng)可行性研究報(bào)告
- 2025年水資源綜合利用管理項(xiàng)目可行性研究報(bào)告
- 2025年城市微綠化推廣項(xiàng)目可行性研究報(bào)告
- 2025年生態(tài)農(nóng)業(yè)發(fā)展模式的可行性研究報(bào)告
- 2025年人工智能健康診斷系統(tǒng)研發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年環(huán)保產(chǎn)業(yè)投資合作項(xiàng)目可行性研究報(bào)告
- 山東省委黨校在職研究生法學(xué)理論考試真題(附答案)
- 《創(chuàng)新創(chuàng)業(yè)基礎(chǔ)》 課件 第4章 創(chuàng)業(yè)團(tuán)隊(duì)
- 全國(guó)水資源中長(zhǎng)期供求規(guī)劃技術(shù)指南與大綱解讀
- 數(shù)據(jù)資產(chǎn)會(huì)計(jì)核算的現(xiàn)狀與問(wèn)題研究
- 監(jiān)理履約考核管理辦法
- 艾梅乙培訓(xùn)課件
- 貨物運(yùn)輸安全管理制度
- 3 面粉碼垛機(jī)器人的結(jié)構(gòu)設(shè)計(jì)
- 肝癌介入免疫聯(lián)合-洞察及研究
- 衛(wèi)生毒理學(xué)課程教學(xué)大綱
- 涂氟及窩溝封閉的治療
評(píng)論
0/150
提交評(píng)論