第一篇:改進(jìn)嵌入式Linux系統(tǒng)實(shí)時(shí)性新方案
改進(jìn)嵌入式Linux系統(tǒng)實(shí)時(shí)性新方案
時(shí)間:2009-05-12 23:31來(lái)源:Linux Website 作者:尚觀 點(diǎn)擊: 7
3次
對(duì)嵌入式Linux進(jìn)行實(shí)時(shí)性改進(jìn)是嵌入式操作系統(tǒng)領(lǐng)域的一個(gè)研究熱點(diǎn)。本文在分析了現(xiàn)有嵌入式操作系統(tǒng)實(shí)時(shí)性不足的基礎(chǔ)上,提出了一種新型的改進(jìn)方案(將RTAI和uClinux相結(jié)合),并給出
對(duì)嵌入式Linux進(jìn)行實(shí)時(shí)性改進(jìn)是嵌入式操作系統(tǒng)領(lǐng)域的一個(gè)研究熱點(diǎn)。本文在分析了現(xiàn)有嵌入式操作系統(tǒng)實(shí)時(shí)性不足的基礎(chǔ)上,提出了一種新型的改進(jìn)方案(將RTAI和uClinux相結(jié)合),并給出具體的工控應(yīng)用實(shí)例,進(jìn)一步對(duì)這種系統(tǒng)的功能進(jìn)行有效驗(yàn)證。
圖1:雙內(nèi)核實(shí)時(shí)系統(tǒng)嵌入式實(shí)時(shí)Linux架構(gòu)。嵌入式Linux以代碼開放、價(jià)格低廉、功能強(qiáng)大又易于移植的特性正在被廣泛應(yīng)用,為嵌入式操作系統(tǒng)提供了一個(gè)極具吸引力的選擇。但許多實(shí)際應(yīng)用,譬如多媒體通信、生產(chǎn)過(guò)程控制、在線事務(wù)處理等等都要求對(duì)外部事件在限定的時(shí)間內(nèi)做出反應(yīng)。因而嵌入式系統(tǒng)實(shí)時(shí)性問(wèn)題越來(lái)越受到關(guān)注,對(duì)嵌入式Linux進(jìn)行實(shí)時(shí)性改進(jìn)也成為嵌入式操作系統(tǒng)領(lǐng)域的一個(gè)研究熱點(diǎn)。
本文提出了一種基于uClinux的嵌入式實(shí)時(shí)操作系統(tǒng)方案。將RTAI和uClinux相結(jié)合,既滿足了嵌入式應(yīng)用的需求,同時(shí)又保證了系統(tǒng)的硬實(shí)時(shí)性。此外,還有強(qiáng)大的網(wǎng)絡(luò)功能、易升級(jí)性、易移植性等優(yōu)點(diǎn)。最后結(jié)合基于這一操作系統(tǒng)開發(fā)的重大裝備遠(yuǎn)程監(jiān)控系統(tǒng)的應(yīng)用案例,進(jìn)一步從功能和性能上對(duì)其進(jìn)行驗(yàn)證。
現(xiàn)有嵌入式操作系統(tǒng)應(yīng)用中存在的問(wèn)題 一個(gè)優(yōu)秀的嵌入式操作系統(tǒng)是嵌入式系統(tǒng)成功的關(guān)鍵。它除了具備一般操作系統(tǒng)最基本的功能,如任務(wù)調(diào)度、同步機(jī)制、中斷處理、文件功能等,還需要具有以下特點(diǎn):1.更好的硬件適應(yīng)性,也就是良好的移植性;2.占有更少的硬件資源;3.高可靠性;4.提供強(qiáng)大的網(wǎng)絡(luò)功能,支持TCP/IP協(xié)議及其他協(xié)議;5.有些應(yīng)用要求具有實(shí)時(shí)性能。
現(xiàn)有的嵌入式操作系統(tǒng)大致可分為商用型和免費(fèi)型兩類:商用型操作系統(tǒng)由于功能穩(wěn)定、可靠,有完善的技術(shù)支持和售后服務(wù),在嵌入式市場(chǎng)占有一定的份額。但它同時(shí)也存在價(jià)格昂貴、需要版權(quán)、源代碼不公開等一系列問(wèn)題;免費(fèi)型操作系統(tǒng)(如Linux)源碼公開,有價(jià)格方面的優(yōu)勢(shì),但在嚴(yán)格滿足嵌入式實(shí)時(shí)應(yīng)用需求方面還有欠缺。
圖2:實(shí)時(shí)內(nèi)核實(shí)現(xiàn)機(jī)理
RTAI對(duì)Linux的實(shí)時(shí)性改進(jìn)
現(xiàn)有幾種針對(duì)Linux的實(shí)時(shí)系統(tǒng)解決方案,實(shí)現(xiàn)方法主要包括兩種:1)直接修改Linux內(nèi)核、增加實(shí)時(shí)性,如:Montavista;2)在普通Linux內(nèi)核之上增加實(shí)時(shí)模塊、雙內(nèi)核結(jié)構(gòu),如:RTLinux或RTAI。
Montavista可以滿足用戶的軟實(shí)時(shí)要求,RTLinux或RTAI著重增強(qiáng)Linux的硬實(shí)時(shí)特性。軟實(shí)時(shí)系統(tǒng)的時(shí)限是柔性靈活的,它可以容忍偶然的超時(shí)錯(cuò)誤。失敗造成的后果并不嚴(yán)重,僅僅是輕微地降低了系統(tǒng)的吞吐量。硬實(shí)時(shí)系統(tǒng)有一個(gè)剛性的、不可改變的時(shí)間限制,它不允許任何超出時(shí)限的錯(cuò)誤。超時(shí)錯(cuò)誤會(huì)帶來(lái)?yè)p害甚至導(dǎo)致系統(tǒng)失敗、或者導(dǎo)致系統(tǒng)不能實(shí)現(xiàn)它的預(yù)期目標(biāo)。
RTAI采用雙內(nèi)核方法,不直接使用Linux的任何功能,而是把需要高度時(shí)間精度的工作寫成一個(gè)驅(qū)動(dòng)程序的形式,然后直接用PC時(shí)序芯片所產(chǎn)生的中斷調(diào)用這個(gè)驅(qū)動(dòng)程序。RTAI與NMTRT-Linux的最大不同之處在于,它在Linux上定義了一組實(shí)時(shí)硬件抽象層(RTHAL)。RTHAL將RTAI需要在Linux中修改的部分定義成一組程序界面,RTAI只使用這組界面和Linux溝通。這樣做的好處在于,用戶可以將直接修改的Linux核心程序代碼減至最小,這有可能使得將RTHAL移植到新版Linux的工作量減至最低。但是,RTAI雖然滿足了硬實(shí)時(shí)性要求,卻沒有被裁減為足夠小且適用于嵌入式系統(tǒng)。
RTAI+uClinux的實(shí)時(shí)方案
uClinux是為嵌入式應(yīng)用設(shè)計(jì)的,它本身并沒有更多地關(guān)注實(shí)時(shí)問(wèn)題。uClinux經(jīng)過(guò)小型化改造,形成了一個(gè)高度優(yōu)化、代碼緊湊的嵌入式Linux,并保留了Linux大多數(shù)的優(yōu)點(diǎn)。它專門針對(duì)無(wú)MMU的CPU,去除了普通Linux內(nèi)核中的虛擬內(nèi)存管理部分。更重要的是,uClinux提供了完整的TCP/IP協(xié)議棧,并支持大量其他的網(wǎng)絡(luò)協(xié)議,為嵌入式系統(tǒng)提供了強(qiáng)大的網(wǎng)絡(luò)支持。而從前面的分析可以看出,RTAI是基于普通Linux內(nèi)核,相對(duì)于嵌入式應(yīng)用其內(nèi)核過(guò)于龐大;而uClinux本身并沒有更多地關(guān)注實(shí)時(shí)問(wèn)題。因此,可以將RTAI和uClinux相結(jié)合,采用雙內(nèi)核的設(shè)計(jì)方案,既滿足了嵌入式應(yīng)用的需求,又保證了系統(tǒng)的硬實(shí)時(shí)性。
1.硬件抽象層
圖3:系統(tǒng)中斷處理流程圖
系統(tǒng)的實(shí)現(xiàn)基礎(chǔ)是硬件抽象層,通過(guò)硬件抽象層進(jìn)行硬件管理,把基本內(nèi)核和實(shí)時(shí)內(nèi)核結(jié)合在一起,其中一個(gè)內(nèi)核的改變,不會(huì)影響另一個(gè)內(nèi)核的執(zhí)行。硬件抽象層定義了本系統(tǒng)同硬件之間的抽象接口,主要用來(lái)截取硬件中斷,并且依據(jù)實(shí)時(shí)內(nèi)核調(diào)度器的需求,重定向?yàn)榛緝?nèi)核任務(wù)或是實(shí)時(shí)任務(wù)。RTHAL包含一個(gè)關(guān)鍵的組件:中斷描述符表(IDT,InterruptDetorTable),它定義了一套指針用來(lái)處理中斷例程。RTHAL本身定義了一個(gè)結(jié)構(gòu),使得基本內(nèi)核中斷處理函數(shù)能夠很容易地被實(shí)時(shí)處理函數(shù)所替代。這樣,當(dāng)實(shí)時(shí)內(nèi)核通過(guò)RTHAL激活后,新的IDT表為合法。在以上控制下,基本內(nèi)核作為實(shí)時(shí)系統(tǒng)的任務(wù)提供服務(wù)。
2.雙內(nèi)核結(jié)構(gòu)
雙內(nèi)核實(shí)時(shí)系統(tǒng)的總體結(jié)構(gòu)模型如圖1所示,主要包含了基本內(nèi)核、實(shí)時(shí)內(nèi)核、硬件抽象層、硬件部分。
其中基本內(nèi)核(uClinux)和實(shí)時(shí)內(nèi)核(RTAI)分別處理非實(shí)時(shí)和實(shí)時(shí)任務(wù)的調(diào)度和執(zhí)行,而實(shí)時(shí)任務(wù)和非實(shí)時(shí)任務(wù)之間信息的交換要通過(guò)管道(FIFO)或共享內(nèi)存(MBUFF)來(lái)實(shí)現(xiàn)。當(dāng)實(shí)時(shí)任務(wù)運(yùn)行時(shí),基本內(nèi)核被硬件抽象層屏蔽。即實(shí)時(shí)內(nèi)核將基本內(nèi)核作為優(yōu)先級(jí)最低的一個(gè)任務(wù)來(lái)運(yùn)行,只有在沒有實(shí)時(shí)任務(wù)運(yùn)行的時(shí)候才予以調(diào)度。
3.實(shí)時(shí)內(nèi)核動(dòng)態(tài)加載
嵌入式實(shí)時(shí)Linux的實(shí)時(shí)內(nèi)核是動(dòng)態(tài)加載的。實(shí)時(shí)任務(wù)被激活前,實(shí)時(shí)內(nèi)核并沒有啟動(dòng),基本內(nèi)核通過(guò)RTHAL透明訪問(wèn)硬件,就像RTHAL不存在一樣。當(dāng)實(shí)時(shí)任務(wù)被激活時(shí),RTHAL結(jié)構(gòu)發(fā)生變化,基本內(nèi)核被實(shí)時(shí)內(nèi)核接管,圖2表明了實(shí)時(shí)內(nèi)核啟動(dòng)前后,系統(tǒng)發(fā)生的變化。
4.調(diào)度處理
當(dāng)中斷到來(lái)時(shí),實(shí)時(shí)內(nèi)核判斷它是基本內(nèi)核中斷還是屬于實(shí)時(shí)中斷,分別進(jìn)行處理。若是基本內(nèi)核中斷,如果當(dāng)前有實(shí)時(shí)任務(wù)正在運(yùn)行,則只是設(shè)置一下中斷標(biāo)志位,懸掛此中斷,如果沒有實(shí)時(shí)任務(wù)運(yùn)行,則調(diào)用基本內(nèi)核的中斷處理程序;如果此中斷是實(shí)時(shí)中斷,就直接調(diào)用相對(duì)應(yīng)的實(shí)時(shí)中斷處理程序。注意,實(shí)時(shí)中斷可以搶先基本內(nèi)核任務(wù)的執(zhí)行。系統(tǒng)的中斷處理流程如圖3所示。
應(yīng)用案例
工業(yè)控制是嵌入式實(shí)時(shí)操作系統(tǒng)的傳統(tǒng)應(yīng)用領(lǐng)域,需要嚴(yán)格的實(shí)時(shí)處理功能、高可靠性和良好的開放性,對(duì)開發(fā)環(huán)境、可操作性、成本等也有特別的要求。因此本項(xiàng)研究以重大裝備的遠(yuǎn)程監(jiān)控系統(tǒng)作為其應(yīng)用之一。
1.嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)結(jié)構(gòu)
應(yīng)用針對(duì)工業(yè)生產(chǎn)中使用的大型設(shè)備在連續(xù)運(yùn)轉(zhuǎn)狀態(tài)下的遠(yuǎn)程監(jiān)控問(wèn)題,研究用于重大裝備遠(yuǎn)程監(jiān)控的嵌入式裝置。系統(tǒng)主要包括輸入/輸出模塊(NetIO)和輸入/輸出上位模塊(NetWeb),前者用于實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的采集(輸入),或用于現(xiàn)場(chǎng)裝置的控制(輸出),后者集成了Web功能,使得用戶可以通過(guò)互聯(lián)網(wǎng)對(duì)輸入/輸出模塊進(jìn)行訪問(wèn)。兩類模塊通過(guò)網(wǎng)絡(luò)相連接,在本系統(tǒng)中為通過(guò)串行485總線。嵌入式遠(yuǎn)程監(jiān)控系統(tǒng)結(jié)構(gòu)如圖4所示。
2.NetWeb對(duì)嵌入式Linux的功能驗(yàn)證
圖4:嵌入式遠(yuǎn)程監(jiān)控體系結(jié)構(gòu)
NetWeb的開發(fā)基于前面介紹的嵌入式實(shí)時(shí)Linux操作系統(tǒng)。特殊的雙內(nèi)核操作系統(tǒng)結(jié)構(gòu)決定了應(yīng)用開發(fā)的特殊性。
1)任務(wù)管理功能
系統(tǒng)中的任務(wù)可以分為實(shí)時(shí)性任務(wù)和非實(shí)時(shí)性任務(wù),實(shí)時(shí)任務(wù)包括實(shí)時(shí)數(shù)據(jù)采集、處理等方面,這部分的功能要在實(shí)時(shí)內(nèi)核RTAI之上進(jìn)行實(shí)現(xiàn);另外,非實(shí)時(shí)任務(wù)主要包括數(shù)據(jù)存儲(chǔ)、遠(yuǎn)程通訊的實(shí)現(xiàn),這部分功能要在基本內(nèi)核uClinux之上實(shí)現(xiàn)。
嵌入式實(shí)時(shí)Linux將實(shí)時(shí)任務(wù)與非實(shí)時(shí)任務(wù)分開管理,實(shí)施不同的調(diào)度策略和任務(wù)間通信方式,至于實(shí)時(shí)任務(wù)與非實(shí)時(shí)任務(wù)之間的通信可以通過(guò)實(shí)時(shí)的FIFO或共享內(nèi)存實(shí)現(xiàn)。這樣的功能使應(yīng)用的編寫簡(jiǎn)潔清晰、功能明確、調(diào)度靈活,方便了用戶。
2)網(wǎng)絡(luò)功能
嵌入式實(shí)時(shí)Linux實(shí)現(xiàn)了嵌入式互聯(lián)網(wǎng)技術(shù),將Web服務(wù)器引入到現(xiàn)場(chǎng)測(cè)試和控制設(shè)備中,在相應(yīng)的硬件平臺(tái)和軟件系統(tǒng)的支持下,使傳統(tǒng)的測(cè)試和控制設(shè)備轉(zhuǎn)變?yōu)榫邆淞艘訲CP/IP為底層通信協(xié)議,Web技術(shù)為核心的基于互聯(lián)網(wǎng)的網(wǎng)絡(luò)測(cè)試和控制設(shè)備。
嵌入式Web與傳統(tǒng)Web應(yīng)用相比,簡(jiǎn)化了系統(tǒng)結(jié)構(gòu),將信息采集和信息發(fā)布都集成到現(xiàn)場(chǎng)的測(cè)控設(shè)備中。由于有了標(biāo)準(zhǔn)的接口形式和通信協(xié)議,內(nèi)嵌于設(shè)備的Web服務(wù)器可以向任何接入它所在網(wǎng)絡(luò)的合法用戶提供統(tǒng)一的基于瀏覽器方式的操作和控制界面,瀏覽器成了設(shè)備的前端控制板。
3)實(shí)時(shí)性
嵌入式實(shí)時(shí)Linux是硬實(shí)時(shí)的嵌入式操作系統(tǒng)。當(dāng)中斷到來(lái)時(shí),若是基本內(nèi)核中斷,如果當(dāng)前有實(shí)時(shí)任務(wù)正在運(yùn)行,則只是設(shè)置一下中斷標(biāo)志位,懸掛此中斷;如果此中斷是實(shí)時(shí)中斷,就直接調(diào)用相對(duì)應(yīng)的實(shí)時(shí)中斷處理程序。這樣的調(diào)度機(jī)制可以保證遠(yuǎn)程監(jiān)控系統(tǒng)中實(shí)時(shí)任務(wù)在確定的時(shí)間限度內(nèi)完成,為系統(tǒng)故障的實(shí)時(shí)預(yù)報(bào)、診斷、控制提供了強(qiáng)有力的支持。
此外,系統(tǒng)還從時(shí)間管理、內(nèi)存管理、中斷管理、同步、互斥管理以及設(shè)備管理等方面對(duì)這一操作系統(tǒng)的功能進(jìn)行評(píng)估驗(yàn)證。
本文小結(jié)
盡管將Linux進(jìn)行嵌入式實(shí)時(shí)性改進(jìn)的方案很多,但是采用RTAI+uClinux的還未見到成型的產(chǎn)品。這一方案既符合嵌入式系統(tǒng)的需求,又達(dá)到硬實(shí)時(shí)性標(biāo)準(zhǔn),同時(shí)還有強(qiáng)大的網(wǎng)絡(luò)功能、易升級(jí)性、易移植性等優(yōu)點(diǎn)。同時(shí),在其上進(jìn)行應(yīng)用編程時(shí)實(shí)時(shí)任務(wù)(基于RTAI)和非實(shí)時(shí)任務(wù)(基于uClinux)是分開編寫的,清晰簡(jiǎn)潔,但由于用戶需要直接在內(nèi)核空間編程,從系統(tǒng)的安全性角度存在很大隱患。希望可以通過(guò)進(jìn)一步討論研究使其更加完善。
第二篇:嵌入式linu學(xué)習(xí)心得
嵌入式Linux學(xué)習(xí)心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄
cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級(jí)目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復(fù)制命令,例子cp 文件名 /home/dir/
mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個(gè)命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。
/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序
/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開頭)、字符設(shè)備(c開頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對(duì)應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫(kù)文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫(kù)。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過(guò)來(lái),mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應(yīng)用程序
/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號(hào)。每個(gè)進(jìn)程號(hào)目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號(hào)。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對(duì)于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。
/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫(kù)文件,src包含Linux2.4的內(nèi)核源碼
/var:存放是臨時(shí)變量
3、
第三篇:全高清實(shí)時(shí)視頻顯示嵌入式系統(tǒng)設(shè)計(jì)與調(diào)試
實(shí)驗(yàn)名稱
全高清實(shí)時(shí)視頻顯示
嵌入式系統(tǒng)設(shè)計(jì)與調(diào)試
課程名稱
姓名學(xué)號(hào)
年級(jí)專業(yè)
嵌入式系統(tǒng)設(shè)計(jì)
彭嘉喬
3130104084
大三
電子信息工程
所在學(xué)院
電氣工程學(xué)院 全高清實(shí)時(shí)視頻顯示嵌入式系統(tǒng)設(shè)計(jì)與調(diào)試報(bào)告
3130104084 彭嘉喬
心得體會(huì):
我想了想,還是決定把心得體會(huì)放在這里。畢竟基礎(chǔ)實(shí)驗(yàn)大家做的都是一樣的內(nèi)容,何況我們做的水平也就那樣,Phase5還沒有做完。但我的感想是獨(dú)一無(wú)二的,不如把最有價(jià)值的部分排版到最前面。
如果讓我直觀總結(jié)下這22天小學(xué)期的感受,我會(huì)毫不猶豫地說(shuō):“累”。如果要具體點(diǎn)的話,“真的很累”。這種累,不僅是身體上的累,更是心累,大部分時(shí)候是一種深深的絕望。
我對(duì)這門課是有心理準(zhǔn)備的。上課前我就看過(guò)往屆學(xué)生寫的報(bào)告,無(wú)一例外充斥著“大學(xué)最累的課”“大學(xué)生涯難度最高的課”“累得昏天黑地”這種話,然而我還是有著迷之自信。其實(shí)如果我不是有著迷之自信的話我壓根就不會(huì)選這門課,畢竟我之前沒有上過(guò)數(shù)字系統(tǒng)設(shè)計(jì),沒有任何與FPGA板開發(fā)有關(guān)的經(jīng)驗(yàn),對(duì)這門課的內(nèi)容完全是兩眼一抹黑。
這門課一開始是早上八點(diǎn)開始,到下午五點(diǎn)結(jié)束,后來(lái)才改成了早上八點(diǎn)半開始。最初我根本不適應(yīng)這樣的強(qiáng)度,而且由于這樣改變了我睡午覺的習(xí)慣,導(dǎo)致我第一周每天回寢室后都先補(bǔ)覺睡到九點(diǎn),再起來(lái)繼續(xù)白天的進(jìn)度到凌晨三點(diǎn)再睡覺,作息嚴(yán)重混亂。后面稍微調(diào)整過(guò)來(lái)了,回寢不需要補(bǔ)覺了,只是昏昏沉沉一晚上而已。
從Phase2第一次要求自己寫代碼開始我就感覺到了巨大的壓力。因?yàn)闆]有上過(guò)數(shù)字系統(tǒng)設(shè)計(jì),我壓根就不會(huì)Verilog語(yǔ)言,得拿著數(shù)設(shè)的書從零開始自學(xué),以致于連寫個(gè)激勵(lì)源文件都要折騰一天時(shí)間。這門課的玄學(xué)之處也從寫這第一個(gè)testbench開始出現(xiàn),我照著書上的例子一模一樣的形式寫的都運(yùn)行不了。
當(dāng)然這只算小兒科的,Phase2.3把之前的幾個(gè)文件綜合起來(lái),本來(lái)分別檢驗(yàn)都符合要求,綜合起來(lái)后出現(xiàn)了嚴(yán)重的bug,仿真顯示scl的輸出有一半是高阻態(tài),sda的輸出始終為高阻態(tài)。即使將其強(qiáng)制賦值為1再輸出仍然不行。我在i2c文件里通過(guò)注釋掉其余語(yǔ)句逐句檢驗(yàn)也發(fā)現(xiàn)不了問(wèn)題。偶然間我發(fā)現(xiàn),當(dāng)注釋掉與sda有關(guān)的一切,刪掉sda的輸出引腳后仿真顯示scl正常,注釋掉scl后sda仍然全為高阻態(tài)。我開始猜測(cè)是不是sda引腳出現(xiàn)了干擾,甚至去檢查約束文件。為了這個(gè)bug我整整耽誤了兩天,最終在萬(wàn)念俱灰走投無(wú)路的情況下我干脆重建了工程把代碼原樣復(fù)制了進(jìn)去,結(jié)果仿真就正常了??
有趣的是重建工程前還可以生成bitstream文件,重建后就不行了。明明是一樣的代碼啊??再花半天終于生成了bitstream文件,我也不知道怎么弄好的,然后燒錄上去果然不能用,即使仿真波形和老師給的標(biāo)準(zhǔn)波形一模一樣。干脆全部推倒重寫吧。
這樣的玄學(xué)在之后的實(shí)驗(yàn)中會(huì)一而再再而三地發(fā)生。同樣的代碼,重建工程復(fù)制進(jìn)去就是截然不同的結(jié)果。同一個(gè)工程沒有任何改動(dòng),重啟下電腦就不能用了。同樣的bitstream文件每次燒錄顯示都不同。一模一樣的操作步驟在別人的電腦上行得通在自己電腦上就報(bào)錯(cuò)。不僅是我,其他同學(xué)也都發(fā)現(xiàn)了,人人都知道了重建大法好,出bug第一反應(yīng)不再是去找原因而是先重建試試。想想以后我用的電子產(chǎn)品可能就是這樣一群人用這樣的方式做出來(lái)的,簡(jiǎn)直慌得要死。
除了玄學(xué),很多時(shí)候一點(diǎn)小問(wèn)題也會(huì)耽誤我們一整天的時(shí)間?;蛘呤菙?shù)百行代碼里的一句話,或者是軟件的一個(gè)設(shè)置。在此不得不吐槽一下vivado和SDK都實(shí)在是太復(fù)雜太用戶不友好了,如果老師不多教教軟件的使用,告訴我們軟件各個(gè)部分各種功能都是做什么的,只靠我們自己摸索實(shí)在是太難了。其實(shí)除了玄學(xué)問(wèn)題我們真的沒辦法以外,大部分問(wèn)題我們最終發(fā)現(xiàn)都是很簡(jiǎn)單的小問(wèn)題,如果經(jīng)驗(yàn)豐富的話很快就能解決,可讓我們這些新手來(lái)自己解決的話往往無(wú)從下手,像無(wú)頭蒼蠅一樣浪費(fèi)非常多的時(shí)間。
整個(gè)小學(xué)期,我們可能只有5%的時(shí)間真正在寫代碼,70%以上的時(shí)間雙眼空洞地盯著電腦屏幕,仰天長(zhǎng)嘆乞求上蒼告訴自己究竟錯(cuò)在了哪里。當(dāng)然上天不會(huì)回應(yīng),助教也不會(huì)。當(dāng)我發(fā)現(xiàn)無(wú)論我問(wèn)什么助教都會(huì)回答:“講義上有自己好好看看吧”而我確定一定以及肯定我把講義上的每一個(gè)字都看過(guò)了而且確實(shí)沒有答案的時(shí)候,助教在我心中就已經(jīng)不存在了。
雖然我可以理解老師和助教希望我們自己解決問(wèn)題以提升能力積累經(jīng)驗(yàn)的苦心,但是我質(zhì)疑這樣是否有效率。讓高中生提前接觸微積分他或許會(huì)感受到數(shù)學(xué)的美和神奇進(jìn)而愛上數(shù)學(xué),而換成個(gè)小學(xué)生只會(huì)感到枯燥厭煩。適當(dāng)拔高確實(shí)可以考驗(yàn)打磨學(xué)生,拔得太高拔苗助長(zhǎng)只是種折磨。如果在好幾個(gè)關(guān)鍵時(shí)刻有過(guò)來(lái)人抬我們一手,稍微指點(diǎn)一下,我們的進(jìn)度起碼可以快一周,Phase5可能就做出來(lái)了,攀登到高峰看到最美的風(fēng)景,創(chuàng)新實(shí)驗(yàn)也能做得更好??蓪?shí)際上我們?cè)诤芏鄾]有意義的細(xì)節(jié)上浪費(fèi)時(shí)間,向著看不見的敵人揮拳,收不到任何正反饋,仿佛身體被掏空一般難受。
我并不怕苦怕累,畢竟能考進(jìn)浙江大學(xué),吃不得苦高考就被淘汰掉了??纱蠖鄶?shù)時(shí)候我知道自己吃苦能換來(lái)什么,知道自己忙得有意義能忙出成果,但在這門課里大多數(shù)時(shí)候是“窮忙”,結(jié)果每天在電腦前忙個(gè)不停,卻可能一整天都找不出bug原地踏步,沒有任何充實(shí)的感覺,反而覺得異??仗?。
或許是作學(xué)生太久了變得嬌慣了吧,覺得世間萬(wàn)事都該讓著自己。幸好在我最煩躁最憤怒的時(shí)候被老師澆了一盆冷水,現(xiàn)在還記得特別深刻:“以后工作的時(shí)候,沒人會(huì)問(wèn)你遇到了什么問(wèn)題,只會(huì)問(wèn)你做出來(lái)了沒有。”
這么一想大概也就釋懷了吧。這個(gè)世界就是這么殘酷啊,我確實(shí)可以找一萬(wàn)個(gè)理由來(lái)解釋我為什么做得這么差,可還是掩蓋不掉一個(gè)現(xiàn)實(shí)就是別人做出來(lái)了可我沒有。沒做出來(lái)就是沒做出來(lái),還是老實(shí)承認(rèn)自己太菜吧。其實(shí)世間所有的不如意,都是自己不給力。
畢竟學(xué)渣是原罪。
以下是具體的實(shí)驗(yàn)過(guò)程。
Phase1、基于 Xilinx Vivado 的嵌入式系統(tǒng)設(shè)計(jì)入門實(shí)驗(yàn)。
Phase1是整個(gè)實(shí)驗(yàn)的入門,與其他實(shí)驗(yàn)相比,實(shí)驗(yàn)很簡(jiǎn)單,不過(guò)因?yàn)闆]有指導(dǎo),需要自己摸索,所以,也是花了我們半天的時(shí)間。這次實(shí)驗(yàn)是對(duì)vivado軟件的初步認(rèn)識(shí),如建立project,IP,sdk等等。
Phase2、設(shè)計(jì) HDMI 控制器。
Phase2首先進(jìn)行的是HDMI控制器的硬件設(shè)計(jì),根據(jù)時(shí)序圖得到hsync,vsync等信號(hào)和clk信號(hào)的關(guān)系,實(shí)驗(yàn)需要進(jìn)行720p和1080p的設(shè)計(jì),程序編寫并不困難,但是由于對(duì)verilog語(yǔ)言的陌生,我和隊(duì)友在testbench的編寫上花費(fèi)了較多的時(shí)間,后來(lái)經(jīng)過(guò)上網(wǎng)找例子教程才明白,弄懂之后發(fā)現(xiàn)并不難,主要包括復(fù)位信號(hào),時(shí)鐘信號(hào)和輸入信號(hào),這些語(yǔ)句在不同的程序里大同小異,一次編寫成功后,基本就掌握了testbench的編寫。
下一節(jié)進(jìn)行的是I2C總線控制器設(shè)計(jì),以前曾經(jīng)學(xué)習(xí)過(guò)I2C,所以我先是找了以前的I2C協(xié)議的程序,然后參考程序?qū)懗鯥2C協(xié)議,先是將頻率轉(zhuǎn)化為CLK_100K_A和CLK_100K_B,再利用二者的 | 或者&得到CLK_100K_SDA和CLK_100K_SCL,在這兩個(gè)時(shí)鐘下進(jìn)行i2c_scl和i2c_sda的計(jì)算,最后經(jīng)過(guò)仿真觀察波形確定程序的正確性。
第三節(jié)是在前兩節(jié)的基礎(chǔ)上進(jìn)行HDMI 顯示測(cè)試圖硬件電路設(shè)計(jì)。首先接觸到的是yuv422編碼方式,在理解這種編碼方式上花費(fèi)了一些時(shí)間,盡管如此,在之后還是出現(xiàn)了反色的問(wèn)題。反色問(wèn)題的原因是因?yàn)榧夹g(shù)行數(shù)據(jù)寫入了偶數(shù)行,使得yuyv的排列變成了yvyu,解決方案是地址整體加1或者減1。實(shí)驗(yàn)還是分為720p和1080p兩部分,但是其實(shí)兩部分差不多,所以我們?yōu)榱斯?jié)省時(shí)間,只做了和后面實(shí)驗(yàn)有關(guān)系的1080p部分。顯示彩條和彩色磚塊都是對(duì)地址進(jìn)行劃分。之后的顯示小飛機(jī)需要從rom中讀取數(shù)據(jù),這一部分的步驟按照實(shí)驗(yàn)講義進(jìn)行,在rom的讀取語(yǔ)句中有些困惑,經(jīng)過(guò)詢問(wèn)同學(xué),知道輸入輸出對(duì)應(yīng)rom里用到的引腳便可。
在顯示小飛機(jī)的實(shí)驗(yàn)中,圖片出現(xiàn)了左右偏移的情況,最左側(cè)一列為綠色,按照我們的想法,將loc_x地址加2進(jìn)行調(diào)整,如果不夠,再加2,然而加到8后最右側(cè)一列已經(jīng)出現(xiàn)明顯偏移,而最左側(cè)一列仍然是綠色,這讓我們意識(shí)到,最左側(cè)一列可能根本沒有顯示信號(hào)。進(jìn)過(guò)檢查代碼,enable信號(hào)響應(yīng)需要時(shí)間,由于在讀取像素點(diǎn)信息時(shí)引入了enable信號(hào),當(dāng)掃到第一列的時(shí)候enable仍為0,導(dǎo)致第一列沒有獲得像素點(diǎn)信息。進(jìn)行相應(yīng)的更改,顯示器上得以在每一處均有顯示。最后經(jīng)過(guò)合適的調(diào)整,使得顯示不偏不倚。
Phase3、AXI-Lite 接口的設(shè)計(jì)。
Phase3 是從軟件給出的AXI-Lite協(xié)議修改得到自己要用的AXI-Lite協(xié)議,封裝成IP核添加到Block design中,利用cpu提供的150Mclk執(zhí)行。這是我第一次接觸到AXI協(xié)議,為了弄懂AXI-Lite協(xié)議,我閱讀了講義上提供的英文參考資料,因?yàn)閷?duì)AXI協(xié)議沒有基礎(chǔ),所以在閱讀過(guò)程中比較吃力。在通讀一遍后,對(duì)AXI協(xié)議有了簡(jiǎn)單的了解。從phase4.1中得到了zju_ip的AXI_Lite協(xié)議,嘗試著去理解這個(gè)協(xié)議。AXI_Lite協(xié)議包括端口定義,各種信號(hào)和對(duì)register或者rom的調(diào)用。我們主要做的內(nèi)容就是講zju_ip中的register調(diào)用改為rom調(diào)用。在調(diào)用之前的I2C程序時(shí),需要注意輸入輸出的匹配。
IP封裝時(shí),選擇package current resource,完成封裝后,就可以在Block design中直接調(diào)用創(chuàng)建的IP,選擇自動(dòng)連接,然后將輸入輸出引腳引出。Block design完成后,有時(shí)會(huì)發(fā)現(xiàn)IP核中的錯(cuò)誤,需要對(duì)IP進(jìn)行修改,可以直接找到IP的程序文件用記事本或其他閱讀軟件打開修改保存,然后在upgrade IP,然后generate outputs得到更新后的IP。直接在已創(chuàng)建好的IP上進(jìn)行修改更新,比重新封裝一個(gè)新的IP要簡(jiǎn)單快捷。
搭建好block design后,生成比特流文件并打開sdk,在sdk中編寫軟件,用cpu通過(guò)axi協(xié)議訪問(wèn)rom,對(duì)rom進(jìn)行讀寫的操作。
Phase4、AXI-Full 接口的設(shè)計(jì)。
Phase3中用到的是axi slave,在phase4中用到的是axi master,master的程序代碼與slave相比更加繁雜。在4.1提供了一份波形圖供參考,我們通過(guò)波形圖分析各個(gè)信號(hào)之間的關(guān)系。在信號(hào)的關(guān)系中,txn_request信號(hào)和axi總線的關(guān)系最為復(fù)雜,也最為重要。txn_request信號(hào)
sdk寫完后進(jìn)行燒錄,出現(xiàn)了綠屏的現(xiàn)象,這是因?yàn)闆]有在sdk中寫入elf文件,寫入elf文件后在顯示器上顯示花屏,這是因?yàn)閍irbus.h文件沒有正確的放入sdk中。在修改了一些錯(cuò)誤后,終于在顯示器上有了顯示。
示器上顯示出的大飛機(jī)圖片出現(xiàn)了左右偏移的情況,且偏移的幅度很大。我們又開始進(jìn)行漫長(zhǎng)的debug過(guò)程。先是修改了地址位,結(jié)果大飛機(jī)卻出現(xiàn)了雪花,急忙將地址為修改回來(lái)。后來(lái),聽從同學(xué)的意見,我們將fpga板子重啟,重新燒錄,在顯示器上得到了正確的顯示。
全高清數(shù)碼相框的實(shí)驗(yàn)中,短學(xué)期已經(jīng)將要結(jié)束,我們直接應(yīng)用了老師提供的bmp.c和main.c代碼,不過(guò)直接用這寫代碼在編譯時(shí)不通過(guò),問(wèn)題出現(xiàn)在“f_mount(0,&fs);”一句,報(bào)錯(cuò)的原因是因?yàn)閰?shù)不夠,打開“ff.h”文件查看f_mount的用法,并進(jìn)行修改,編譯得以通過(guò)。向sd卡里復(fù)制bmp圖片,然后查到板子上,燒錄后在顯示器上沒有顯示圖片,而在sdk中顯示“airbus1 open success”和“It is not a bmp file”,出現(xiàn)這個(gè)問(wèn)題的原因是因?yàn)閙ain.c中的“sprintf(filename,“0:/bmp1080p/airbus%d.bmp”,j);”語(yǔ)句與sd卡中的bmp文件名airbus_1不匹配所導(dǎo)致,修改語(yǔ)句為
“sprintf(filename,“0:/bmp1080p/airbus_%d.bmp”,j);”bmp文件能夠在顯示屏上正常顯示。這是出現(xiàn)的又一個(gè)問(wèn)題只能顯示前airbus_1.bmp至airbus_9.bmp這9張圖片,這是因?yàn)槲募荒艹^(guò)8個(gè)字符,我的解決辦法是直接刪掉airbus_9之后的圖片并修改main.c中的for循環(huán)語(yǔ)句的循環(huán)次數(shù),使得能夠在顯示器上循環(huán)顯示9張圖片。
Phase5 全高清攝像頭視頻采集
在完成phase4之后,已經(jīng)到了短學(xué)期的末尾,所以整個(gè)phase5我們只是進(jìn)行了GPIO口的實(shí)驗(yàn)部分。GPIO口在block design中添加,與scl和sda總線進(jìn)行連接。GPIO引出的引腳可以自己設(shè)定如FPGA板子上的開關(guān)按鈕,只要在xdc中進(jìn)行標(biāo)注,在sdk中說(shuō)明即可。這樣就可以實(shí)現(xiàn)硬件和軟件的綜合。
第四篇:嵌入式Linux實(shí)時(shí)操作系統(tǒng)習(xí)題總結(jié)
第1章
1.嵌入式系統(tǒng)是指操作系統(tǒng)和功能軟件集成于計(jì)算機(jī)硬件系統(tǒng)之中。嵌入式系統(tǒng)一般有3個(gè)主要的組成部分:硬件、實(shí)時(shí)操作系統(tǒng)以及應(yīng)用軟件。
2.嵌入式系統(tǒng)的三要素是嵌入、專用、計(jì)算機(jī);即以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ)、軟件硬件可裁剪、適應(yīng)應(yīng)用系統(tǒng)對(duì)功能、可靠性、成本、體積、功耗嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。
3.目前國(guó)際較為知名的有:VxWorks、NeutrinoRTOS、Nucleus Plus、OS/
9、VRTX、LynuxOS,RTLinux、BlueCat RT等。
4.嵌入式系統(tǒng)一般由硬件層、中間層、軟件層和功能層組成。其作用分別如下:
(1)硬件層 :由嵌入式微處理器、外圍電路和外設(shè)組成。操作系統(tǒng)和應(yīng)用程序都可以固化在ROM或者Flash中。為方便使用,有的模塊在此基礎(chǔ)上增加了LCD、鍵盤、USB接口,以及其他一些功能的擴(kuò)展電路。
(2)中間層 :硬件層與軟件層之間為中間層,其作用將系統(tǒng)軟件與底層硬件部分隔離,使得系統(tǒng)的底層設(shè)備驅(qū)動(dòng)程序與硬件無(wú)關(guān);
(3)軟件層 :主要是操作系統(tǒng),有的還包括文件系統(tǒng)、圖形用戶接口和網(wǎng)絡(luò)系統(tǒng)等。操作系統(tǒng)是一個(gè)標(biāo)準(zhǔn)的內(nèi)核,將中斷、I/O、定時(shí)器等資源都封裝起來(lái),以方便用戶使用。(4)功能層 :由基于操作系統(tǒng)開發(fā)的應(yīng)用程序組成,用來(lái)完成對(duì)被控對(duì)象的控制功能。5.非占先式調(diào)度法也稱作合作型多任務(wù)(cooperative multitasking),各個(gè)任務(wù)彼此合作共享一個(gè)CPU。中斷服務(wù)可以使一個(gè)高優(yōu)先級(jí)的任務(wù)由掛起狀態(tài)變?yōu)榫途w狀態(tài)。但中斷服務(wù)以后控制權(quán)還是回到原來(lái)被中斷了的那個(gè)任務(wù),直到該任務(wù)主動(dòng)放棄CPU的使用權(quán)時(shí),那個(gè)高優(yōu)先級(jí)的任務(wù)才能獲得CPU的使用權(quán)。當(dāng)系統(tǒng)響應(yīng)時(shí)間很重要時(shí),要使用占先式(preemptive)內(nèi)核。最高優(yōu)先級(jí)的任務(wù)一旦就緒,總能得到CPU的控制權(quán)。當(dāng)一個(gè)運(yùn)行著的任務(wù)使一個(gè)比它優(yōu)先級(jí)高的任務(wù)進(jìn)入了就緒態(tài),當(dāng)前任務(wù)的CPU使用權(quán)就被剝奪了。6.在實(shí)時(shí)系統(tǒng)中,如果系統(tǒng)在指定的時(shí)間內(nèi)未能實(shí)現(xiàn)某個(gè)確定的任務(wù),會(huì)導(dǎo)致系統(tǒng)的全面失敗,這樣的系統(tǒng)被稱硬實(shí)時(shí)系統(tǒng)。在弱實(shí)時(shí)系統(tǒng)中,超時(shí)卻不會(huì)發(fā)生致命的錯(cuò)誤。其實(shí)時(shí)性的要求比硬實(shí)時(shí)系統(tǒng)要差一些。
7.嵌入式系統(tǒng)的設(shè)計(jì)步驟及各部分的主要工作如下。(1)需求分析階段,羅列出用戶的需求;
(2)體系結(jié)構(gòu)設(shè)計(jì)階段,描述系統(tǒng)的功能如何實(shí)現(xiàn);
(3)詳細(xì)設(shè)計(jì)階段,進(jìn)行硬件系統(tǒng)與軟件系統(tǒng)的分類劃分,以決定哪些功能用硬件實(shí)現(xiàn),哪些用軟件實(shí)現(xiàn);
(4)系統(tǒng)集成,把系統(tǒng)的軟件、硬件和執(zhí)行裝置集成在一起,進(jìn)行調(diào)試,發(fā)現(xiàn)并改進(jìn)在設(shè)計(jì)過(guò)程中的錯(cuò)誤;
(5)系統(tǒng)測(cè)試,對(duì)設(shè)計(jì)好的系統(tǒng)進(jìn)行測(cè)試,看其是否滿足給定的要求。8.Linux作為嵌入式操作系統(tǒng)的優(yōu)勢(shì)主要有以下幾點(diǎn):
(1)可應(yīng)用于多種硬件平臺(tái)。
(2)Linux的高度模塊化使添加部件非常容易。
(3)Linux是一個(gè)和Unix相似、以內(nèi)核為基礎(chǔ)的、具有完全的內(nèi)存訪問(wèn)控制,支持大量硬件的一種通用操作系統(tǒng)。
(4)Linux可以隨意地配置,不需要任何的許可證或商家的合作關(guān)系。
(5)Linux帶有Unix用戶熟悉的完善的開發(fā)工具。其強(qiáng)大的語(yǔ)言編譯器GCC,C++等也可以很容易得到,不但成熟完善,而且使用方便。9. Linux執(zhí)行進(jìn)程調(diào)度一般是在以下情況發(fā)生的:(1)正在執(zhí)行的進(jìn)程運(yùn)行完畢;
(2)正在執(zhí)行的進(jìn)程調(diào)用阻塞原語(yǔ)將自己阻塞起來(lái)進(jìn)入等待狀態(tài);(3)正在執(zhí)行的進(jìn)程調(diào)用了P原語(yǔ)操作,從而因資源不足而被阻塞;(4)執(zhí)行中的進(jìn)程提出I/O請(qǐng)求后被阻塞;(5)系統(tǒng)分配的時(shí)間片已經(jīng)用完;
(6)就緒隊(duì)列中的某個(gè)進(jìn)程的優(yōu)先級(jí)變得高于當(dāng)前運(yùn)行進(jìn)程的優(yōu)先級(jí)。
第4章
1、Linux 內(nèi)核的編譯菜單有好幾個(gè)版本,運(yùn)行:
(1)make config:進(jìn)入命令行,可以一行一行的配置,但使用不十分方便。
(2)make menuconfig:大多數(shù)開發(fā)人員使用的Linux 內(nèi)核編譯菜單,使用方便。
(3)make xconfig:在2.4.X 以及以前版本中xconfig 菜單是基于TCL/TK 的圖形庫(kù)的。
2、在完成內(nèi)核的裁減之后,內(nèi)核的編譯就只要執(zhí)行以下幾條命令: make clean
編譯內(nèi)核之前先把環(huán)境給清理干凈。make dep
編譯相關(guān)依賴文件 make zImage
創(chuàng)建內(nèi)核鏡像文件 make modules 創(chuàng)建內(nèi)核模塊。
make install
把相關(guān)文件拷貝到默認(rèn)的目錄。
3、此命令是裝載壓縮映像文件zImage到flash存儲(chǔ)器中,地址是kernel分區(qū),并采用xmodem傳輸協(xié)議。
4、此命令是設(shè)置網(wǎng)卡1的地址192.168.1.1,掩碼為255.255.255.0,不寫netmask參數(shù)則默認(rèn)為255.255.255.0。
5、此命令將nfs服務(wù)的共享目錄sharedir加載到/mnt/nfs。
6、此命令是裝載根文件系統(tǒng)root.cramfs到flash存儲(chǔ)器中,地址是根文件系統(tǒng)分區(qū),并采用xmodem傳輸協(xié)議。
7、這個(gè)命令的操作同時(shí)進(jìn)行了分區(qū)和格式化,0~128K存放vivi,128K~192K存放VIVI控制臺(tái)指令,192K~1216K存放kernel,1216K~4288K存放root,其余部分存放應(yīng)用程序。
第6章
1.使用虛擬地址尋址整個(gè)系統(tǒng)的主存和輔存的方式在現(xiàn)代操作系統(tǒng)中被稱為虛擬內(nèi)存。虛擬內(nèi)存的管理方法使系統(tǒng)既可以運(yùn)行體積比物理內(nèi)存還要大的應(yīng)用程序,也可以實(shí)現(xiàn)“按需調(diào)頁(yè)”策略,既滿足了程序的運(yùn)行速度,又節(jié)約了物理內(nèi)存空間。2.進(jìn)程內(nèi)存區(qū)域涉及到5種數(shù)據(jù)段,即:
①代碼段:代碼段是用來(lái)存放可執(zhí)行文件的操作指令。
②數(shù)據(jù)段:數(shù)據(jù)段用來(lái)存放可執(zhí)行文件中已初始化全局變量。③BSS段:BSS段包含了程序中未初始化的全局變量。④堆(heap):用于存放進(jìn)程運(yùn)行中被動(dòng)態(tài)分配的內(nèi)存段,它的大小并不固定,可動(dòng)態(tài)擴(kuò)張或縮減。
⑤棧:棧是用戶存放程序臨時(shí)創(chuàng)建的局部變量。3.在Linux系統(tǒng)中,內(nèi)核在最高級(jí)執(zhí)行,也稱為“系統(tǒng)態(tài)”,在這一級(jí)任何操作都可以執(zhí)行。而應(yīng)用程序則執(zhí)行在最低級(jí),即所謂的“用戶態(tài)”。在這一級(jí)處理器禁止對(duì)硬件的直接訪問(wèn)和對(duì)內(nèi)存的未授權(quán)訪問(wèn)。模塊是在所謂的“內(nèi)核空間”中運(yùn)行的,而應(yīng)用程序則是在“用戶空間”中運(yùn)行的。它們分別引用不同的內(nèi)存映射,也就是程序代碼使用不同的“地址空間”。4.共享內(nèi)存區(qū)域是被多個(gè)進(jìn)程共享的一部分物理內(nèi)存。如果多個(gè)進(jìn)程都把該內(nèi)存區(qū)域映射到自己的虛擬地址空間,則這些進(jìn)程就都可以直接訪問(wèn)該共享內(nèi)存區(qū)域,從而可以通過(guò)該區(qū)域進(jìn)行通信。共享內(nèi)存是進(jìn)程間共享數(shù)據(jù)的一種最快的方法,一個(gè)進(jìn)程向共享內(nèi)存區(qū)域?qū)懭肓藬?shù)據(jù),共享這個(gè)內(nèi)存區(qū)域的所有進(jìn)程就可以立刻看到其中的內(nèi)容。5.內(nèi)存管理利用虛擬文件系統(tǒng)支持交換,交換進(jìn)程(swapd)定期由調(diào)度程序調(diào)度,這也是內(nèi)存管理依賴于進(jìn)程調(diào)度的唯一原因。當(dāng)一個(gè)進(jìn)程存取的內(nèi)存映射被換出時(shí),內(nèi)存管理向文件系統(tǒng)發(fā)出請(qǐng)求,同時(shí),掛起當(dāng)前正在運(yùn)行的進(jìn)程。
第9章
1.參考答案:
Mutex互斥量,用于操作某個(gè)臨界資源時(shí)對(duì)該資源上鎖,以實(shí)現(xiàn)互斥地對(duì)獨(dú)占資源的使用。Semophore信號(hào)燈,信號(hào)燈內(nèi)有一計(jì)數(shù)器,可以用于對(duì)多個(gè)同類資源的分配。
Condition條件變量,條件變量用于等待信號(hào)。當(dāng)一個(gè)線程需要等待某個(gè)信號(hào)時(shí),就可到條件變量上等待,當(dāng)信號(hào)具備時(shí),系統(tǒng)會(huì)喚醒該線程繼續(xù)運(yùn)行。2.參考答案:
本地:共享內(nèi)存+信號(hào)量,適合于大量數(shù)據(jù)傳輸。Linux支持系統(tǒng)V和POSIX的共享內(nèi)存和信號(hào)量。(5分)
遠(yuǎn)程:Socket+應(yīng)用協(xié)議。適合于跨網(wǎng)絡(luò)的(大量)數(shù)據(jù)傳輸。Linux支持BSD的socket。應(yīng)用層協(xié)議需要自行設(shè)計(jì)。(5分)
3.答案要點(diǎn):程序是編譯后形成的可執(zhí)行代碼,是靜止的。進(jìn)程是程序的一次執(zhí)行,是活動(dòng)的。線程是進(jìn)程的可執(zhí)行單元,同一進(jìn)程的不同線程共享進(jìn)程的資源和地址空間。4.兩種實(shí)現(xiàn)方法,一種是繼承Thread,另外一種是實(shí)現(xiàn)接口Runnable。
同步的實(shí)現(xiàn)方法有兩種,分別是synchronized, wait與notify。用synchronized可以對(duì)一段代碼、一個(gè)對(duì)象及一個(gè)方法進(jìn)行加鎖。用wait與notify可以使對(duì)象處于等待及喚醒方式導(dǎo)致同步,因?yàn)槊總€(gè)對(duì)象都直接或間接的繼承了Object類。
5、什么是BootLoader?主要有幾種工作模式及主要功能是什么? 答:
Bootloader就是操作系統(tǒng)內(nèi)核運(yùn)行的一段小程序,完成進(jìn)行初始化系統(tǒng)硬件設(shè)置的任務(wù),(2分)
分為啟動(dòng)加載模式和下載模式。(1啟動(dòng)加載模式
啟動(dòng)加載(Boot laoding)模式是指 Bootloader 從目標(biāo)機(jī)上的某個(gè)固態(tài)存儲(chǔ)設(shè)備上將操作系統(tǒng)加載到 RAM 中運(yùn)行,整個(gè)過(guò)程并沒有用戶的介入。(2分)(2)下載模式
在下載模式下,目標(biāo)機(jī)上的 Bootloader 將先通過(guò)串口連接或網(wǎng)絡(luò)連接等通信手段從宿主機(jī)下載文件。(2分)
6、簡(jiǎn)述Bootloader有何作用?
答案要點(diǎn):(1)首先,bootloader是在特定硬件平臺(tái)運(yùn)行的程序,嚴(yán)重依賴于硬件平臺(tái),需要移植;(2)是系統(tǒng)上電之后,第一個(gè)運(yùn)行的程序,系統(tǒng)在上電或復(fù)位時(shí)通常都從地址 0x0 處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的 Boot Loader 程序;(3)bootloader程序的設(shè)計(jì)目標(biāo)是啟動(dòng)嵌入式操作系統(tǒng),嵌入式操作系統(tǒng)的啟動(dòng)需要一定的條件,這些條件由bootloader來(lái)滿足;(4)Bootloader一般具有對(duì)存儲(chǔ)器和網(wǎng)絡(luò)接口操作的功能;如擦除、讀寫Flash,通過(guò)USB、串口下載文件等
第五篇:嵌入式實(shí)時(shí)操作系統(tǒng) 項(xiàng)目開發(fā)總結(jié)報(bào)告
項(xiàng)目開發(fā)總結(jié)報(bào)告
分 類:軟件項(xiàng)目計(jì)劃 使用者:E-fanciers
Version: 1.0
項(xiàng) 目 承 擔(dān) 隊(duì)伍:煙臺(tái)大學(xué)
計(jì)算機(jī)學(xué)院 E-fanciers小組撰 寫 人(簽名): 許超 于歌
完 成 日 期: 2009-7-16 本文檔使用小組: E-fanciers小組
評(píng)審負(fù)責(zé)人(簽名): 孝瑞
評(píng) 審 日 期: 2009-7-19
目 錄
一、引言.............................................3
1.1編寫目的.......................................3 1.2項(xiàng)目背景.......................................3 1.3定義...........................................3 1.4參考資料:.....................................3
二、開發(fā)結(jié)果........................錯(cuò)誤!未定義書簽。
2.1產(chǎn)品..........................錯(cuò)誤!未定義書簽。2.2主要功能......................錯(cuò)誤!未定義書簽。2.3所用工時(shí).......................................4 2.3所用機(jī)時(shí).......................................4 2.3進(jìn)度...........................................4
三、評(píng)價(jià)............................................4
3.1生產(chǎn)率評(píng)價(jià).....................................4 3.2技術(shù)方案評(píng)價(jià)...................................4 3.3產(chǎn)品質(zhì)量評(píng)價(jià)...................................4
四、經(jīng)驗(yàn)與教訓(xùn).......................................4
一.引言
1.編寫目的(闡明編寫總結(jié)報(bào)告的目的,指明讀者對(duì)象。)
詳細(xì)陳述項(xiàng)目開發(fā)過(guò)程,對(duì)項(xiàng)目開發(fā)做最后的總結(jié)完善,說(shuō)明項(xiàng)目開發(fā)過(guò)程中遇到的難題及解決方案。
2.項(xiàng)目背景(說(shuō)明項(xiàng)目的來(lái)源、委托單位、開發(fā)單位及主管部門。)
隨著微電子技術(shù)、計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)通信技術(shù)的發(fā)展,嵌入式系統(tǒng)已廣泛應(yīng)用在各個(gè)領(lǐng)域,包括消費(fèi)電子、汽車電子、網(wǎng)絡(luò)通信、工業(yè)設(shè)備、航空航天和國(guó)防軍事等。隨著嵌入式技術(shù)的發(fā)展,工業(yè)領(lǐng)域也一改過(guò)去傳統(tǒng)的單片機(jī)應(yīng)用模式,逐漸將一些新嵌入式技術(shù)引入到系統(tǒng)中。特別是作為軟件基礎(chǔ)的嵌入式操作系統(tǒng)已廣泛為業(yè)界所接受,借以提高系統(tǒng)的開發(fā)效率和運(yùn)行效率。是否采用嵌入式操作系統(tǒng),已成為工業(yè)設(shè)備品質(zhì)優(yōu)劣的標(biāo)志之一。
當(dāng)今的嵌入式操作系統(tǒng)領(lǐng)域呈現(xiàn)百家爭(zhēng)鳴的狀態(tài)。據(jù)最近的調(diào)查數(shù)據(jù)顯示,嵌入式操作系統(tǒng)有數(shù)十種之多的。這種多樣性存在是必然的,是由嵌入式系統(tǒng)的定制性所決定的,是針對(duì)各個(gè)領(lǐng)域和行業(yè)的不同需求的應(yīng)對(duì)。也就是說(shuō),各個(gè)嵌入式操作系統(tǒng)都有自己的應(yīng)用領(lǐng)域,針對(duì)不同的應(yīng)用沒有絕對(duì)的優(yōu)劣之分,不會(huì)出現(xiàn)一種操作系統(tǒng)壟斷的局面。自主開發(fā)嵌入式操作系統(tǒng)絕對(duì)不是多余的,也是是對(duì)這種多樣性的自然順應(yīng),應(yīng)該可擁有自己的用武之地。有些國(guó)內(nèi)嵌入式廠商將希望寄托在Linux之上,以為它可以幫助解決所面臨的版稅和安全等問(wèn)題。但事實(shí)并非完全如此,至少在嵌入式系統(tǒng)領(lǐng)域。首先,Linux還是泊來(lái)貨,國(guó)人并未掌握其核心技術(shù)和進(jìn)程,也并未解決對(duì)外依賴的問(wèn)題。其次,Linux是為桌面系統(tǒng)而設(shè)計(jì)的,并不能很好地滿足嵌入式系統(tǒng)高效性和靈活性的要求;再次,Linux的一統(tǒng)也違背了嵌入式系統(tǒng)應(yīng)用靈活定制的本質(zhì)特性。
3.定義(列出報(bào)告中用到的專門術(shù)語(yǔ)定義和縮寫詞的原意。)
int taskInit(void);
/*創(chuàng)建一個(gè)任務(wù), 返回: 返回任務(wù)編號(hào)tid, >0: 成功, 其他: 失敗.*/ /*name: 任務(wù)名稱, entryPtr : 任務(wù)函數(shù)入口, stack_size: 任務(wù)棧大小, priority: 任務(wù)優(yōu)先級(jí)*/ int taskCreate(char *name, void *entryPtr, int stack_size, int priority);/*啟動(dòng)一個(gè)任務(wù), 讓taskCreat創(chuàng)建的任務(wù)參加調(diào)度*/ int taskStart(unsigned char tid);/*tid: 任務(wù)編號(hào), 由taskCreate返回*/ int taskPriorityGet(unsigned char tid);int taskPrioritySet(unsigned char tid, int newPriority);/*獲取和設(shè)置任務(wù)優(yōu)先級(jí), 用于動(dòng)態(tài)調(diào)整*/ int taskSuspend(unsigned char tid);/*將任務(wù)掛起, 該任務(wù)退出調(diào)度*/ int taskDelete(unsigned char tid);/*將任務(wù)刪除 該任務(wù)退出調(diào)度且回收任務(wù)分配的資源*/ int semCreate(void);/*互斥信號(hào)量創(chuàng)建, 返回信號(hào)量標(biāo)識(shí)sid, <0: 失敗*/ int semTake(int sid);int semGive(int sid);/*互斥信號(hào)量獲取和釋放*/ int taskSleep(int ticks);/*任務(wù)睡眠(非忙等), 由任務(wù)自己調(diào)用, 主動(dòng)阻塞一段時(shí)間.時(shí)間單位為tick, 即10ms*/ 4.參考資料(列出這些資料的作者、標(biāo)題、編號(hào)、發(fā)表日期、出版單位或資料來(lái)源,可包括:(1)項(xiàng)目開發(fā)計(jì)劃;(2)需求規(guī)格說(shuō)明書;(3)概要設(shè)計(jì)說(shuō)明書;(4)詳細(xì)設(shè)計(jì)說(shuō)明書;(5)用戶操作手冊(cè);(6)測(cè)試計(jì)劃;(7)測(cè)試分析報(bào)告(8)本報(bào)告引用的其他資料、采用的開發(fā)標(biāo)準(zhǔn)或開發(fā)規(guī)范。)(1)軟件項(xiàng)目計(jì)劃(2)需求規(guī)格說(shuō)明(3)軟件編寫向?qū)?/p>
(4)國(guó)家軟件開發(fā)文檔標(biāo)準(zhǔn)模板
二.開發(fā)結(jié)果
1.產(chǎn)品(可包括:(1)列出各部分的程序名稱、源程序行數(shù)(包括注釋行)或目標(biāo)程序字節(jié)數(shù)及程序總計(jì)數(shù)量、存儲(chǔ)形式;產(chǎn)品文檔名稱等。)
2.主要功能及性能 基本功能
1.基于參考硬件平臺(tái),建立硬件抽象層,完成基本硬件初始化,建立時(shí)鐘中斷; 2.在硬件抽象層基礎(chǔ)上,建立多任務(wù)操作系統(tǒng)環(huán)境; 3.任務(wù)調(diào)度采用同級(jí)時(shí)間片輪詢機(jī)制;
4.實(shí)現(xiàn)任務(wù)間基本通訊機(jī)制:互斥信號(hào)量(共享內(nèi)存); 5.實(shí)現(xiàn)基本的時(shí)鐘管理機(jī)制:任務(wù)睡眠阻塞;
6.實(shí)現(xiàn)一個(gè)RS232串口驅(qū)動(dòng)?;诖隍?qū)動(dòng)實(shí)現(xiàn)一個(gè)命令行Shell(用一個(gè)獨(dú)立的任務(wù)實(shí)現(xiàn)),可在超級(jí)終端顯示信息和執(zhí)行命令。
擴(kuò)展功能
7.任務(wù)區(qū)分優(yōu)先級(jí),在同級(jí)輪詢調(diào)度基礎(chǔ)上添加優(yōu)先級(jí)調(diào)度機(jī)制; 8.不同優(yōu)先級(jí)任務(wù)之間實(shí)現(xiàn)搶占調(diào)度;
9.在搶占調(diào)度的基礎(chǔ)上實(shí)現(xiàn)優(yōu)先級(jí)逆轉(zhuǎn)保護(hù),避免邏輯死鎖問(wèn)題; 10.將代碼移植到另一個(gè)硬件平臺(tái)上運(yùn)行,驗(yàn)證代碼移植性。3.所用工時(shí)(按人員的不同層次分別計(jì)時(shí)。)
編碼成員工時(shí):60小時(shí)/周,共約400小時(shí);
編寫文檔成員:共約60小時(shí)。
4.所用機(jī)時(shí)
5小時(shí)/天,共約300小時(shí)的機(jī)時(shí)。
5.進(jìn)度(給出計(jì)劃進(jìn)度與實(shí)際進(jìn)度的對(duì)比。)
根據(jù)敏捷開發(fā)方法的指導(dǎo),每天查漏補(bǔ)缺,實(shí)際進(jìn)度基本和計(jì)劃進(jìn)度一致。三.評(píng)價(jià)
1.生產(chǎn)率評(píng)價(jià)(如平均每人每周源程序行數(shù)、文檔的字?jǐn)?shù)等。)
源程序:200行/周
文檔:1500字/周
2.技術(shù)方案評(píng)價(jià)
嚴(yán)格遵循開發(fā)流程,運(yùn)用科學(xué)開發(fā)方法。
3.產(chǎn)品質(zhì)量評(píng)價(jià)
按照大賽要求完成了應(yīng)有功能的基礎(chǔ)上有所添加自己小組的特色,譬如,設(shè)置相應(yīng)的出錯(cuò)處理機(jī)制,為加強(qiáng)該系統(tǒng)的安全性與穩(wěn)定性也做了相應(yīng)的措施,總體來(lái)說(shuō),我們小組開發(fā)的嵌入式實(shí)時(shí)操作系統(tǒng)功能良好,穩(wěn)定性強(qiáng)。
四.經(jīng)驗(yàn)與教訓(xùn)
經(jīng)過(guò)近兩個(gè)月的對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)的開發(fā),經(jīng)驗(yàn)學(xué)到了不少,當(dāng)然也得到了很多教訓(xùn),因?yàn)樾〗M的不注意,導(dǎo)致2138開發(fā)板沒法繼續(xù)工作,有的時(shí)候會(huì)很耽誤時(shí)間,有的時(shí)候進(jìn)度報(bào)告拖后一點(diǎn)才寫,也因此導(dǎo)致過(guò)進(jìn)度不明了,不過(guò),大多數(shù)時(shí)候,我們小組成員都認(rèn)真對(duì)待大賽,努力想把自己小組的作品做的更完美,最后終于成功交付任務(wù),完成大賽。