第一篇:嵌入式系統(tǒng)開發(fā)總結(jié)(uCCOS+uCGUI+uCFS)
嵌入式系統(tǒng)開發(fā)總結(jié)(uC/COS+uC/GUI+uC/FS)
今天終于把做了一個多月的嵌入式系統(tǒng)軟件交了上去。終于可以輕松一下了,但是期末臨近,看來沒得閑了?,F(xiàn)在總結(jié)一下整個開發(fā)過程,希望對想要入門嵌入式系統(tǒng)開發(fā)的朋友有所幫助。
首先要說的是,整個開發(fā)過程很艱苦,主要是因為第一次接觸嵌入式開發(fā),入門很難,同時由于大三有很多專業(yè)課,還有六級、實習(xí)面試等,在此對我的隊友陳、馬表示感謝,謝謝他們和我一直堅持到最后。
該系統(tǒng)實現(xiàn)基于uC/COS、uC/GUI、uC/FS的整合。首先要根據(jù)硬件配置三者。根據(jù)uC/GUI、uC/FS的文檔資料很容易移植到操作系統(tǒng)uC/COS。其文檔資料的下載地址請參見文章最后。
uC/COS是基于嵌入式的實時操作系統(tǒng),它管理任務(wù)、內(nèi)存、文件、電源等,為嵌入式系統(tǒng)提供多任務(wù)的開發(fā)環(huán)境。uC/GUI是一種用于嵌入式應(yīng)用的圖形支持軟件,本系統(tǒng)借用uC/GUI實現(xiàn)系統(tǒng)所需要的各種界面。uC/FS是一種文件系統(tǒng),本系統(tǒng)借用其來管理存儲器中的文件,在book、message中都用到文件的讀寫,可以說uC/FS是本系統(tǒng)實現(xiàn)的不可或缺的部分。
該系統(tǒng)所有界面由uC/GUI 實現(xiàn)。主界面一窗口(Frame)為容器,添加菜單欄(Menu)來控制整個系統(tǒng)。其他界面以Dialog為容器,在Dialog中添加按鈕(Button)、列表(ListView)、多行編輯框(MultiEdit)等。系統(tǒng)采用了“回調(diào)函數(shù)”機制,回調(diào)函數(shù)在用戶程序中定義,當一個指定的事件發(fā)生時,通知圖形系統(tǒng)調(diào)用指定的函數(shù)。通常應(yīng)用于一個窗口內(nèi)容改變時自動重繪的場合。該系統(tǒng)利用回調(diào)函數(shù)初始化窗口,當窗口內(nèi)容改變時重繪窗口,同時處理事件響應(yīng),例如當鼠標點擊“Read”按鈕是,通過回調(diào)函數(shù)調(diào)用txtTask()函數(shù)彈出電子書顯示對話框(Txt)。
總的來說,該設(shè)計結(jié)構(gòu)合理,邏輯嚴密,各個模塊相互協(xié)調(diào)實現(xiàn)了復(fù)雜的功能。系統(tǒng)界面小組力求簡單大方,各個模塊的功能實現(xiàn)都用到了不少精妙的算法。但是,由于小組能力有限,前期對嵌入式的了解淺薄,以及時間等各方面的限制,系統(tǒng)并沒有完全實現(xiàn)所預(yù)期的功能,也可以說僅實現(xiàn)了一些輔助功能。首先說message模塊,設(shè)計預(yù)期是用到紅外發(fā)送,實現(xiàn)與紅外手機的數(shù)據(jù)傳輸和操縱手機的短信發(fā)送,但是在實際操作中小組發(fā)現(xiàn)需要擴展外圍電路(紅外發(fā)送),由于資金問題,小組討論放棄該功能,僅實現(xiàn)了信息編輯和信息保存功能。其實該功能的實現(xiàn)小組也是有很清晰的思路的,如果有足夠的資金和時間,小組完全可以實現(xiàn)該功能,這里很有些遺憾。
然后是文件系統(tǒng),最后的幾天里,我們發(fā)現(xiàn)了一個嚴重的問題,也就是我們所用文件系統(tǒng)所管理的RAM是可揮發(fā)性的(一時沒有意識到),我們保存到其中的文件在系統(tǒng)下一次啟動的時候都會消失。小組發(fā)現(xiàn)norflash是不可揮發(fā)的存儲器,于是我們考慮將文件存儲到norflash中,但是在將norflash添加到uC/FS中的過程中,我們發(fā)現(xiàn)必須為其編寫驅(qū)動程序。經(jīng)過數(shù)天的努力,我們編輯出了norflash的uC/FS驅(qū)動,但是很遺憾,沒有成功,競賽舉辦方給出的norflash模塊的實驗太過簡單,無法編輯驅(qū)動程序的底層控制存儲器算法。(本小組編寫的norflash驅(qū)動將在附件中給出)
Music模塊,其實music僅僅實現(xiàn)了簡單的mp3播放功能,同時提供暫停、下一首等功能,但是經(jīng)過小組的不懈努力仍然沒有聲音。于是我們懷疑是硬件模塊(UCB1400、AC97CODEC)的問題。
系統(tǒng)整體功能也有待改進,比如開機,進行一段時間的操作后,系統(tǒng)就會不正常的死掉。雖然我們做了大量的性能改良功能,但這個問題依然存在。
小組在近期做了此次競賽的總結(jié),一直表示此次競賽給我們提供了一個很好的學(xué)習(xí)機會,大家都有了很大的提高,至少是對嵌入式有了切身的認識。大家對嵌入式系統(tǒng)設(shè)計也有了很大的興趣,同時表示將在以后對嵌入式進行更深層次的研究。
在此,我們對同類設(shè)計提供一些建議。前期應(yīng)該對資金、時間等做準確的估計,同時選擇最主要的功能模塊,這樣可以集中有限精力將單個模塊的功能實現(xiàn)的更加強大。在功能設(shè)計的階段應(yīng)盡量考慮到所有細節(jié),這樣可以避免在最后時刻發(fā)現(xiàn)關(guān)鍵因素致使系統(tǒng)功能大打折扣。系統(tǒng)的創(chuàng)新點:
1、使用uC/FS管理文件
電子書模塊和短信編輯模塊的Save功能都需要大量操作文件的代碼。由于實時操作系統(tǒng)uC/GUI沒有實現(xiàn)文件系統(tǒng),在參考了各種版本的文件系統(tǒng)后,小組決定選用uC/FS。uC/FS是一種FAT格式的文件系統(tǒng),它可以用于所有的存儲媒體,但你必須提供存儲媒體的底層接口函數(shù)。
引進uC/FS后,小組很方便地實現(xiàn)了系統(tǒng)的各種主要功能。
2、借用軟鍵盤代替手寫字體識別功能
當考慮到手寫字體識別功能的難度和時間的有限,小組討論果斷決定使用軟件盤實現(xiàn)字符的輸入功能。
首先,小鍵盤界面小巧簡潔。我們以woindow系統(tǒng)中的軟鍵盤為模板,刪除掉不需要的復(fù)雜按鍵,形成了獨具風格的嵌入式版軟鍵盤。
其次,由于界面大小限制,軟鍵盤進入了”shift”鍵,實現(xiàn)鍵盤按鍵的切換,實現(xiàn)了所有字符(包括數(shù)字、大小寫字母和各種操作符)的輸入功能。
3、系統(tǒng)內(nèi)容豐富多彩
這一點可以說是系統(tǒng)的壞處也可以說是系統(tǒng)的好處,壞處就是由于本次競賽時間有限,有些功能實現(xiàn)的也比較簡單,但是可惜的是該系統(tǒng)脈絡(luò)清晰,很合理地將各個模塊有機地結(jié)合到了一起。而且各個模塊并不是相互獨立的,而是相互約束、相互協(xié)作的。例如:message模塊的Save功能,將文本信息保存到存儲器中,保存的文件有可以在book中查閱;通訊錄協(xié)助message模塊中Send功能的手機號碼查詢。
這些都可以說是本系統(tǒng)的一大特色。
主界面:
(各個模塊的界面以及具體實現(xiàn)請參看后續(xù)文章)程序流程框圖:
uC/GUI中文手冊下載:http://download.csdn.net/source/466900
uC/FS正式版(內(nèi)含使用手冊)下載:http://download.csdn.net/source/466918 uC/COS中文手冊下載:http://download.csdn.net/source/466905 uC/GUI完整實例(超有用):http://download.csdn.net/source/467738
第二篇:學(xué)習(xí)嵌入式系統(tǒng)開發(fā)心得
你好,我是一名嵌入式開發(fā)愛好者.近來總是看到很多初學(xué)者(多數(shù)是在校大學(xué)生)由于沒有條件,想學(xué)習(xí)卻不知道如何下手。
本人絕對能體會到學(xué)習(xí)的艱辛,而且視任何對知識技術(shù)有強烈追求的人(不管目前水平高低)為同路人,所以整理短文一篇寫出一些學(xué)習(xí)感受,替所有渴望知識的人企盼高手指點學(xué)習(xí)之路,分享經(jīng)驗。
愛因斯坦說過,”我是站在巨人的肩膀上“
實踐當然是最鍛煉人的方式,但是我想在校生很少有這樣的機會,別說本科生,碩士生也未必有條件。所以我想學(xué)習(xí)嵌入式要從個人的知識背景和現(xiàn)實條件出發(fā)。訂立合適的階段目標,在允許的條件下多動手多思考。
一般情況下對于硬件設(shè)備是比較短缺的。但是可以從軟件方面和嵌入式系統(tǒng)開發(fā)模式上下功夫,提醒大家一點,嵌入式系統(tǒng)開發(fā)設(shè)計的內(nèi)容知識很多,所以大家不要亂,在了解嵌入式系統(tǒng)開發(fā)的體系結(jié)構(gòu)后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有開放源代碼),雖然可能無法在硬件上仿真,但也不必著急。wince,palmos上手都很容易。無論對于初學(xué)者還是自以為是高手的人來說,編程水平(這可不受硬件條件限制)絕對是沒有止境的,有了較高的編程水平(嵌入式主要是C,當然OO的幾種語言c++,java是發(fā)展趨勢),等到有機會的時候及時的補充硬件知識,會很快的成為高手。
還有,一定記住,學(xué)習(xí)嵌入式,”要想辦法,不要找理由“。當年在dos下用tc編程時的條件,現(xiàn)在回想起來建筑就是奇跡。
我推薦一條學(xué)習(xí)之路吧,僅供參考,1、C開發(fā)經(jīng)驗
條件:linux(這都有吧)
方法:隨便,主要是掌握ansiC編程(不包括gtk,qt等圖形可視化開發(fā))
2、網(wǎng)絡(luò)、操作系統(tǒng)、體系結(jié)構(gòu)
條件:linux,各種書,算法、例程。
方法:通過C編程實現(xiàn)簡單的網(wǎng)絡(luò)等知識的算法和過程。
3、嵌入式系統(tǒng)概念
條件:各個嵌入式網(wǎng)站,討論組,書籍
方法:少提問(尤其是等著天上掉餡餅,這主要是防止增長惰性,也解決不了實際問題),多思考。
4、嵌入式開發(fā)實踐
條件:各種嵌入式系統(tǒng)開發(fā)工具的demo版(或者D版,如果有的話),包括編譯器,仿真器??梢哉腋呤謧円?,也可以下載。
方法:這里有兩個分支,一個是基于mcu/dsp的嵌入式系統(tǒng)開發(fā),一個是象palmos,wince,ucos等rtos下的應(yīng)用軟件開發(fā)。對硬件感興趣,想成為真正高手的由第一個分支入手,以后進入第二個分支;如果十分厭煩硬件,只想停留在軟件開發(fā)上的,可以只由第二個分支入手,以后就和pc上的開發(fā)沒有什么本質(zhì)上的區(qū)別了,找份不錯的工作應(yīng)該沒問題,可以不用進行下面的步驟了,感興趣可以參考第6條。
5、硬件開發(fā)
條件:各種嵌入式芯片、存儲器等電路器件,protel99等電路設(shè)計軟件,電路板制作。
方法:這時候該有開發(fā)條件了,最起碼是51系列,這個比較方便。電路的設(shè)計內(nèi)容較多,不過看起來嚇人,實際上比軟件要簡單的多。只要下功夫,實踐會告訴你一切。
6、硬件工程/軟件工程/項目管理
條件: 各個芯片詳細資料和使用經(jīng)驗,軟件工程知識,項目管理知識,培訓(xùn),大型項目參與經(jīng)驗
方法:已經(jīng)是高手了,但是學(xué)無止境,沾沾自喜于已有的知識是致命的。那個下一步。。,你該是管理者了。
拋磚引玉,以上出自我的經(jīng)驗,歡迎各路高手們補一下 再告訴你一些我的收藏夾的網(wǎng)站
國內(nèi)有關(guān)嵌入式開發(fā)的論壇
電子產(chǎn)品世界的論壇
http://bbs.edw.com.cn/index.asp
恒頤高科論壇
http://004km.cn/
中國單片機公共實驗室
http://004km.cn/
北京科銀京成技術(shù)公司
http://004km.cn/
微芯力科技
http://004km.cn
驅(qū)動開發(fā)網(wǎng)之嵌入式版塊,挺綜合的一個網(wǎng)站
http://004km.cn/index.php
電子愛好者家園[2004年09月30日] http://home.ee521.com/main.asp
廣州友善之臂電子有限公司
http://www.arm9.net/index.asp
好了 兄弟 開始努力 我們一起加油哈...
第三篇:嵌入式Linux系統(tǒng)開發(fā)教程實驗報告
嵌入式Linux系統(tǒng)開發(fā)教程實驗報告
組員:武易 金鵬飛 周長升
實驗一 熟悉嵌入式系統(tǒng)開發(fā)環(huán)境
一實驗?zāi)康?/p>
1.熟悉嵌入式系統(tǒng)硬件實驗平臺 2.掌握超級終端配置方法。
3.掌握嵌入式系統(tǒng)開發(fā)環(huán)境配置,ARM-Linux下NFS服務(wù)器的配置方法 4.掌握常用的 Linux下shell命令
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
(1)掌握嵌入式系統(tǒng)實驗平臺上的各類借接口的位置;
(2)配置windows的超級終端,熟悉vivi的命令行,bootload、kernel、root和用戶程序的介紹;
(3)配置linux的終端,配置網(wǎng)絡(luò)服、Ip地址,開發(fā)目錄共享,掛載等。
四實驗結(jié)果
實驗二嵌入式Linux程序設(shè)計
一實驗?zāi)康?/p>
1.掌握嵌入式Linux軟件設(shè)計方法原理 2.掌握Makefile文件設(shè)計方法。
3.熟悉Linux下靜態(tài)庫和共享庫的設(shè)計
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
(1)編寫一個帶輸入、輸出的由5個文件組成的嵌入式軟件;(2)寫好makefile文件,并上機調(diào)試;(3)用變量指明兩種編譯器。
四實驗結(jié)果
實驗三
kernel與root的設(shè)計和燒寫
一實驗?zāi)康?/p>
1.掌握Linux內(nèi)核配置與裁剪的方法 2.理解根文件系統(tǒng)配置。
3.掌握嵌入式系統(tǒng)內(nèi)核和根文件系統(tǒng)的燒寫的過程
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
對嵌入式Linux系統(tǒng)進行裁剪、配置和編譯,生成自己需要的操作系統(tǒng)映像文件,并將其燒寫到flash中。
四實驗結(jié)果
實驗四搭建嵌入式系統(tǒng)開發(fā)環(huán)境
一實驗?zāi)康?/p>
1.掌握嵌入式開發(fā)環(huán)境的配置 2.掌握開發(fā)工具鏈的安裝與配置。
3.掌握嵌入式系統(tǒng)內(nèi)核和根文件系統(tǒng)的燒寫的過程
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
(1)安裝配置嵌入式開發(fā)環(huán)境;(2)安裝與配置工具鏈;(3)內(nèi)核和根文件系統(tǒng)的燒寫
四實驗結(jié)果
實驗五嵌入式驅(qū)動程序設(shè)計
一實驗?zāi)康?/p>
1.學(xué)習(xí)在LINUX 下進行驅(qū)動設(shè)計的原理
2.掌握使用模塊方式進行驅(qū)動開發(fā)調(diào)試的過程
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
在PC 機上編寫簡單的虛擬硬件驅(qū)動程序并進調(diào)試,實驗驅(qū)動的各個接口函數(shù)的實現(xiàn),分析并理解驅(qū)動與應(yīng)用程序的交互過程。
四實驗結(jié)果
實驗六
S3C2410處理器硬件電路設(shè)計
一實驗?zāi)康?/p>
1.熟悉硬件電路設(shè)計
2.掌握簡單的S3c2410處理器的電路設(shè)計。3.掌握protel軟件的使用
二實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境
三實驗內(nèi)容
使用protel 99se 做s3c2410處理器最小系統(tǒng)電路設(shè)計,A/D數(shù)據(jù)采集模塊電路設(shè)計。
四實驗結(jié)果
第四篇:嵌入式Linux系統(tǒng)開發(fā)教程實驗報告
嵌入式實驗報告
姓名: 學(xué)號: 學(xué)院: 日期:
實驗一 熟悉嵌入式系統(tǒng)開發(fā)環(huán)境
一、實驗?zāi)康?/p>
熟悉 Linux 開發(fā)環(huán)境,學(xué)會基于S3C2410 的Linux 開發(fā)環(huán)境的配置和使用。使用Linux的armv4l-unknown-linux-gcc 編譯,使用基于NFS 方式的下載調(diào)試,了解嵌入式開發(fā)的基本過程。
二、實驗內(nèi)容
本次實驗使用 Redhat Linux 9.0 操作系統(tǒng)環(huán)境,安裝ARM-Linux 的開發(fā)庫及編譯器。創(chuàng)建一個新目錄,并在其中編寫hello.c 和Makefile 文件。學(xué)習(xí)在Linux 下的編程和編譯過程,以及ARM 開發(fā)板的使用和開發(fā)環(huán)境的設(shè)置。下載已經(jīng)編譯好的文件到目標開發(fā)板上運行。
三、實驗設(shè)備及工具
硬件::UP-TECH S2410/P270 DVP 嵌入式實驗平臺、PC 機Pentium 500 以上, 硬盤10G 以上。
軟件:PC 機操作系統(tǒng)REDHAT LINUX 9.0+超級終端(或X-shell)+AMR-LINUX 開發(fā)環(huán)境。
四、實驗步驟
1、建立工作目錄
[root@localhost root]# mkdir hello [root@localhost root]# cd hello
2、編寫程序源代碼
我們可以是用下面的命令來編寫hello.c的源代碼,進入hello目錄使用vi命令來編輯代碼:
[root@localhost hello]# vi hello.c 按“i”或者“a”進入編輯模式,將上面的代碼錄入進去,完成后按Esc 鍵進入命令狀態(tài),再用命令“:wq!”保存并退出。這樣我們便在當前目錄下建立了一個名為hello.c的文件。hello.c源程序: #include
3、編寫Makefile
要使上面的hello.c程序能夠運行,我們必須要編寫一個Makefile文件,Makefile文件定義了一系列的規(guī)則,它指明了哪些文件需要編譯,哪些文件需要先編譯,哪些文件需要重新編譯等等更為復(fù)雜的命令。使用它帶來的好處就是自動編譯,你只需要敲一個“make”命令整個工程就可以實現(xiàn)自動編譯。Makefile源程序:
CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+= –static all: $(EXEC)$(EXEC): $(OBJS)$(CC)$(LDFLAGS)-o $@ $(OBJS)clean:-rm-f $(EXEC)*.elf *.gdb *.o 下面我們來簡單介紹這個Makefile 文件的幾個主要部分: CC 指明編譯器
EXEC 表示編譯后生成的執(zhí)行文件名稱 OBJS 目標文件列表 CFLAGS 編譯參數(shù) LDFLAGS 連接參數(shù) all: 編譯主入口
clean: 清除編譯結(jié)果
注意:“$(CC)$(LDFLAGS)-o $@ $(OBJS)”和“-rm-f $(EXEC)*.elf *.gdb *.o”前空白由一個Tab 制表符生成,不能單純由空格來代替。
與上面編寫 hello.c的過程類似,用vi來創(chuàng)建一個Makefile文件并將代碼錄入其中。
[root@localhost hello]# vi Makefile
4、編譯應(yīng)用程序
在上面的步驟完成后,我們就可以在hello 目錄下運行“make”來編譯我們的程序了。如果進行了修改,重新編譯則運行: [root@localhost hello]# make clean//編譯應(yīng)用程序 [root@localhost hello]# make//下載調(diào)試
注意:編譯、修改程序都是在宿主機(本地PC 機)上進行,不能在超級終端下進行。
5、下載調(diào)試
在宿主PC計算機上啟動NFS服務(wù),并設(shè)置好共享的目錄,(這里將剛生成的根目錄/arm2410cl作為共享目錄,以下實驗同理)具體配置請參照前面第一章第四節(jié)中關(guān)于嵌入式Linux 環(huán)境開發(fā)環(huán)境的建立。在建立好NFS共享目錄以后,我們就可以進入超級終端中建立開發(fā)板與宿主PC機之間的通訊了。
[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host //超級終端中執(zhí)行
如果不想使用我們提供的源碼的話,可以再建立一個NFS 共享文件夾。如/root/share,我們把我們自己編譯生成的可執(zhí)行文件復(fù)制到該文件夾下,并通過超級終端掛載到開發(fā)板上。
[root@localhost hello]# cp hello /root/share //虛擬機中
[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/root/share /host //超級終端中 再進入/host目錄運行剛剛編譯好的hello程序,查看運行結(jié)果。[/mnt/yaffs] cd /host //超級終端中 [/host]./hello hello world(1)在PC計算機上啟動NFS 服務(wù),并設(shè)置好共享的目錄。
啟動 Red Hat Linux –>點擊“主菜單”->選擇“系統(tǒng)設(shè)置”->“服務(wù)器設(shè)置”->“NFS服務(wù)器”->“增加”->“基本”下:點擊“瀏覽”選擇“/”下的“arm2410cl/”;“確定”;“主機:192.168.0.* ”;“基本權(quán)限”選擇“讀/寫”;“確定”。->“常規(guī)選項”下:選擇:“允許來自高于1024的端口的連接”,其他不選;確定。(2)在建立好NFS共享目錄以后,進入minicom 中建立開發(fā)板與宿主PC機之間的通訊
新建終端
[root@localhost root]# minicom//服務(wù)器 新建終端
[root@localhost root]#ifconfig eth0 192.168.0.10 //設(shè)置主機地址 [root@localhost root]#ifconfig //查看地址 在服務(wù)器下:
[/mnt/yaffs] mount-t nfs –o nolock 192.168.0.56:/arm2410cl /var 注意:開發(fā)板掛接宿主計算機目錄只需要掛接一次便可,只要開發(fā)板沒有重起,就可以一直保持連接。這樣可以反復(fù)修改、編譯、調(diào)試,不需要下載到開發(fā)板。
6、實驗截圖
7、測試結(jié)果
測試掛載成功,用mplayer xyz.avi命令播放視頻 [root@localhost /]#cd /mnt/yaffs/mm [root@localhost /]#mplayer xyz.avi
五、實驗心得
本次實驗比較簡單,旨在讓我們熟悉Linux開發(fā)環(huán)境,學(xué)會基于S3C2410的Linux開發(fā)環(huán)境的配置和使用。實驗中我們創(chuàng)建了一個新目錄,并在其中編寫hello.c和Makefile文件。我們學(xué)習(xí)在Linux下的編程和編譯過程,以及ARM開發(fā)板的使用和開發(fā)環(huán)境的設(shè)置,下載已經(jīng)編譯好的文件到目標開發(fā)板上運行。學(xué)會使用Linux的armv4l-unknown-linux-gcc編譯和基于NFS方式的下載調(diào)試,了解嵌入式開發(fā)的基本過程。實驗二 S3C2410處理器A/D模塊硬件設(shè)計
一、實驗?zāi)康?/p>
1.熟悉硬件電路設(shè)計
2.掌握簡單的S3c2410處理器的電路設(shè)計。3.掌握protel軟件的使用。
二、實驗內(nèi)容
使用protel 99se 做s3c2410處理器最小系統(tǒng)電路設(shè)計,A/D數(shù)據(jù)采集模塊電路設(shè)計。
三、實驗設(shè)備及工具
硬件:UP-TECH S2410/P270 DVP 嵌入式實驗平臺、PC 機Pentium 500 以上, 硬盤10G以上。
軟件:PC 機操作系統(tǒng)REDHAT LINUX 9.0、超級終端(或X-shell)、ARM-LINUX 開發(fā)環(huán)境
五、實驗原理
1、A/D 轉(zhuǎn)換器
A/D 轉(zhuǎn)換器是模擬信號源和CPU 之間聯(lián)系的接口,它的任務(wù)是將連續(xù)變化的模擬信號轉(zhuǎn)換為數(shù)字信號,以便計算機和數(shù)字系統(tǒng)進行處理、存儲、控制和顯示。在工業(yè)控制和數(shù)據(jù)采集及許多其他領(lǐng)域中,A/D 轉(zhuǎn)換是不可缺少的。
A/D 轉(zhuǎn)換器有以下類型:逐位比較型、積分型、計數(shù)型、并行比較型、電壓-頻率型,主要應(yīng)根據(jù)使用場合的具體要求,按照轉(zhuǎn)換速度、精度、價格、功能以及接口條件等因素來決定選擇何種類型。常用的有以下兩種:(1)雙積分型的 A/D 轉(zhuǎn)換器;(2)逐次逼近型的 A/D 轉(zhuǎn)換器。
2、A/D 轉(zhuǎn)換的重要指標(1)分辨率(Resolution)
(2)精度(Accuracy)
(3)ARM 自帶的十位A/D 轉(zhuǎn)換器(4)A/D 轉(zhuǎn)換器在擴展板的連接(A/D 轉(zhuǎn)換器在擴展板的接法如圖2.4.2 所示,前三路通過電位器接到3.3v 電源上。)
圖 2.4.2 A/D 轉(zhuǎn)換器在擴展板上的接法
六、實驗步驟
1、閱讀理解源碼
進入/arm2410cl/exp/basic/04_ad 目錄,使用vi 編輯器或其他編輯器閱讀理解源代碼。
2、編譯應(yīng)用程序
運行make產(chǎn)生ad可執(zhí)行文件
[root@localhost /]# cd /arm2410cl/exp/basic/04_ad/ [root@localhost 04_ad]# make armv4l-unknown-linux-gcc-c-o main.o main.c armv4l-unknown-linux-gcc-o../bin/ad main.o-lpthread armv4l-unknown-linux-gcc-o ad main.o-lpthread [root@localhost 04_ad]# ls ad hardware.h main.o Makefile.bak s3c2410-adc.h bin main.c Makefile readme.txt src
3、下載調(diào)試
到超級終端窗口,使用 NFS mount 開發(fā)主機的/arm2410cl 到/host 目錄。[/mnt/yaffs] mount-t nfs-o nolock 192.168.0.56:/arm2410cl /host [/mnt/yaffs]insmod ad/s3c2410-adc.o [/mnt/yaffs]cd /host/exp/basic/04_ad [/host/exp/basic/04_ad]./ad Press Enter key exit!a0= 0.0032 a1= 3.2968 a2= 3.2968 我們可以通過調(diào)節(jié)開發(fā)板上的三個黃色的電位器,來查看a0、a1、a2 的變化。
4、原理圖
5、實驗截圖
七、實驗心得
通過本次試驗,我學(xué)會了A/D接口原理,了解實現(xiàn)A/D系統(tǒng)對于硬件要求。閱讀ARM芯片文檔,掌握ARM的A/D相關(guān)寄存器的功能,熟悉ARM系統(tǒng)硬件的A/D相關(guān)接口,還了解在Linux環(huán)境下對S3C2410芯片的8通道10位A/D模塊的硬件設(shè)計。實驗三
Kernel與root的設(shè)計和燒寫
一、實驗?zāi)康?/p>
1.掌握Linux內(nèi)核配置與裁剪的方法 2.理解根文件系統(tǒng)配置。
3.掌握嵌入式系統(tǒng)內(nèi)核和根文件系統(tǒng)的燒寫的過程。
二、實驗內(nèi)容
對嵌入式Linux系統(tǒng)進行裁剪、配置和編譯,生成自己需要的操作系統(tǒng)映像文件,并將其燒寫到flash中。
三、實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境.四、實驗步驟
1、設(shè)計過程:
2、燒寫過程:
(一)、超級終端設(shè)置
1、運行Windows 系統(tǒng)下開始→所有程序→附件→通訊→超級終端(HyperTerminal),新建一個通信終端。如果要求輸入?yún)^(qū)號、電話號碼等信息請隨意輸入,出現(xiàn)如圖1.5.1 所示對話框時,為所建超級終端取名為arm,可以為其選一個圖標。單擊“確定”按鈕。
2、在接下來的對話框中選擇ARM 開發(fā)平臺實際連接的PC 機串口(如COM1),按確定后出現(xiàn)如圖1.5.2 所示的屬性對話框,設(shè)置通信的格式和協(xié)議。這里波特率為115200,數(shù)據(jù)位8,無奇偶校驗,停止位1,無數(shù)據(jù)流控制。按確定完成設(shè)置。
3、完成新建超級終端的設(shè)置以后,可以選擇超級終端文件菜單中的另存為,把設(shè)置好的超級終端保存在桌面上,以備后用。用串口線將PC 機串口和平臺UART0 正確連接后,就可以在超級終端上看到程序輸出的信息了。
(二)、串口下載燒寫
在 Windows xp平臺下通過超級終端燒寫vivi(bootloader)、內(nèi)核(Kernel)、根文件系
統(tǒng)(root)的步驟如下:
1、格式化flash 打開超級終端,先按住PC 機鍵盤的Back Space 鍵,然后啟動2410-S,進入vivi,按照以下命令格式化flash,重新分區(qū)。
vivi>bon part 0 128k 192k 1216k 4288k:m 64704k 回車
2、燒寫vivi 這時已格式化flash,運行的是SDRAM 中的vivi.vivi>load flash vivi x 回車 此時超級終端提示:
Ready for downloading using xmodem...Waiting...點擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇協(xié)議為Xmodem,選擇
鏡像文件vivi,點擊“發(fā)送”,10 秒左右vivi 就燒寫到flash 里了.這時要復(fù)位2410-S,重新進入vivi>來燒寫kernel,root.3、燒寫內(nèi)核映象zImage vivi>load flash kernel x 回車 出現(xiàn)提示:
Ready for downloading using xmodem...Waiting...點擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇鏡像文件zImage,協(xié)議
為Xmodem,點擊“發(fā)送”,4 分鐘左右zImage 傳輸完畢,zImage先傳輸?shù)絊DRAM中,再把數(shù)據(jù)從SDRAM 復(fù)制到flash 里,請等待這一過程結(jié)束到出現(xiàn)vivi>,再燒寫root,否則會導(dǎo)致燒寫kernel 失敗。
4、燒寫根文件系統(tǒng)(root)vivi>load flash root x 回車
Ready for downloading using xmodem...Waiting...點擊超級終端任務(wù)欄上“傳送”下拉菜單中的“發(fā)送文件”,選擇鏡像文件root.cramfs,協(xié)議為Xmodem,點擊“發(fā)送”,8 分鐘左右root.cramfs 燒寫完畢;
5、燒寫應(yīng)用程序
用2410-S 實驗箱配套網(wǎng)線連接好2410-S 的NIC-1 網(wǎng)口和PC 機的網(wǎng)口,重啟2410-S 進
入linux 操作系統(tǒng)的[/mnt/yaffs]下,注意配置IP 在同一網(wǎng)段,執(zhí)行以下指令: [/mnt/yaffs]ifconfig --查看IP [/mnt/yaffs]ifconfig eth0 192.168.0.111 --配置eth0 IP [/mnt/yaffs]inetd --啟動ftp
打開ftp 軟件FlashFXP(在光盤中/img/flashvivi 目錄中提供),點擊界面中上部黃色閃
電符號,建立快速連接,輸入地址192.168.0.111,用戶名:root,密碼:無。連接進入ftp 服務(wù),上傳“yaffs.tar.bz2”到2410-S 的/var 文件夾下,3 分鐘左右上傳完畢。
這時不能重啟2410-S,否則上傳過程白費。接下來在超級終端中輸入: [/mnt/yaffs]cd..--轉(zhuǎn)換到/mnt 下 [/mnt]rm-rf /yaffs/* --刪除/yaffs 下文件 [/mnt]cd /var --轉(zhuǎn)到var 目錄下
[/var]tar xjvf yaffs.tar.bz2 –C /mnt/yaffs --解壓yaffs.tar.bz2 到mnt/yaffs 目錄下
如圖1.5.9 所示,注意大小寫(C 為大寫),需5 分鐘左右
解壓縮結(jié)束,整個燒寫實驗就完成了。
五、實驗心得
了解了Linux內(nèi)核與root的知識,能夠利用串口通訊下載方式完成它們的燒寫過程。實驗四 嵌入式軟件設(shè)計與交叉編譯
一、實驗?zāi)康?/p>
1.掌握嵌入式Linux軟件設(shè)計方法原理 2.掌握Makefile文件設(shè)計方法。
3.熟悉Linux下靜態(tài)庫和共享庫的設(shè)計。
二、實驗內(nèi)容
(1)編寫一個帶輸入、輸出的由5個文件組成的嵌入式軟件;(2)寫好makefile文件,并上機調(diào)試;(3)用變量指明兩種編譯器。
三、實驗設(shè)備及工具
硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。
軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境.四、程序分析
input.h: #define N 10 void input(char *s);
input.c:
#include CC=armv4l-unknown-linux-gcc EXEC=zc OBJS=main.o input.o output.o $(EXEC):$(OBJS)$(CC)-o $(EXEC)$(OBJS)install: $(EXP_INSTALL)$(EXEC)$(INSTALL_DIR)clean:-rm-f $(EXEC)&.o 五、實驗結(jié)果 pc機上執(zhí)行時 # make //若已執(zhí)行過,則用# make clean 清除后再執(zhí)行# make #./zc 結(jié)果: [/mnt/yaffs]cd /host/exp/basic/zc/ [/host/exp/basic/zc]./zc input your name,please:zc hello zc!hello zc!hello zc!hello zc!hello zc! 六、實驗心得 初步了解了交叉編譯原理,GUN開發(fā)套件包括一系列開發(fā)測試工具,主要組件為Gcc。實驗詳細說明了基于ARM和Linux的嵌入式系統(tǒng)的交叉編譯環(huán)境的建立方法,并給出了具體的步驟。實驗結(jié)果表明,可以在x86平臺編譯調(diào)試ARM平臺上運行的程序。并通過實驗認識嵌入式系統(tǒng)上C語言編程與普通PC機上C語言編程的不同點,掌握使用交叉編譯環(huán)境編譯嵌入式系統(tǒng)程序的方法。實驗五 嵌入式驅(qū)動程序設(shè)計 一、實驗?zāi)康?/p> 1.學(xué)習(xí)在LINUX下進行驅(qū)動設(shè)計的原理。 2.掌握使用模塊方式進行驅(qū)動開發(fā)調(diào)試的過程。 二、實驗內(nèi)容 在PC 機上編寫簡單的虛擬硬件驅(qū)動程序并進調(diào)試,實驗驅(qū)動的各個接口函數(shù)的實現(xiàn),分析并理解驅(qū)動與應(yīng)用程序的交互過程。 三、實驗設(shè)備及工具 硬件:UP-NETARM2410-S嵌入式實驗儀、PC機pentumn500以上、硬盤40G以上、內(nèi)存大于256M。 軟件:PC機操作系統(tǒng)REDHAT LINUX 9.0、MINICOM、AMRLINUX開發(fā)環(huán)境 四、實驗步驟 1、在PC(宿主機)上編譯調(diào)試驅(qū)動程序。(1)閱讀和理解源代碼 進入/arm2410cl/exp/drivers/01_demo,使用vi 編輯器或其他編輯器閱讀理解源代碼。 (2)編譯驅(qū)動模塊及測試程序 上面介紹了在Makefile 中有兩種編譯方法,可以在本機上使用gcc 也可以使用交叉編 ? 確定 ? # KERNELDIR = /arm2410cl/kernel/linux-2.4.18-2410cl ? KERNELDIR = /usr/src/linux(3)測試驅(qū)動程序 如果使用gcc 編譯的話,需要通過下面的命令來建立設(shè)備節(jié)點,如果使用交叉編譯器的話,不需要建立設(shè)備節(jié)點。#mknod /dev/demo c 254 0 首先要插入驅(qū)動模塊demo.o,然后可以用lsmod 命令來查看模塊是否已經(jīng)被插入,在不使用該模塊的時候還可以用rmmod 命令來將模塊卸載。? insmod demo.o ? lsmod demo.o ?./test_demo 2、使用arm編譯器在實驗箱調(diào)試驅(qū)動程序。 五、實驗結(jié)果分析 1.編譯demo.c 為demo.o;編譯test_demo.c 為test_demo。 gcc-c demo.c gcc-o test_demo test_demo.c 2.若編譯器選擇的是gcc(請查看Makefile文件),需要用以下命令建立節(jié)點: #mknod /dev/demo c 254 0 若編譯器選擇的是armv4l-unknown-linux-gcc 則不需要mknod命令建立節(jié) 點。 3.使用insmod demo.o插入模塊,使用lsmod 列出所有插入的模塊。查看demo的插入情況: #insmod demo.o 6.運行test程序測試驅(qū)動的各個接口運行情況。 #./test_demo 結(jié)果: PC機上的運行結(jié)果: 實驗箱上的運行結(jié)果: 7.運行ad程序測試驅(qū)動的各個接口運行情況 六、實驗心得 掌握了在Linux下常用編譯器的使用,進一步掌握了Makefile的編寫和使用以及Linux下的程序編譯與交叉編譯的過程。實驗六 觸摸屏驅(qū)動程序設(shè)計 一、實驗?zāi)康?/p> 1、了解在 UP-TECH S2410/P270 DVP平臺上實現(xiàn)觸摸屏Linux 驅(qū)動程序的基本原理。 2、了解 Linux 驅(qū)動開發(fā)的基本過程。 二、實驗內(nèi)容 以一個簡單字符設(shè)備驅(qū)動程序為原型,剖析其基本結(jié)構(gòu)。進行部分改寫之后并編譯實現(xiàn)其相應(yīng)功能。 三、預(yù)備知識 1、掌握在 Linux 集成開發(fā)環(huán)境中編寫和調(diào)試程序的基本過程。 2、了解 ARM 芯片(本實驗是針對ARMS3C2410 系列)的基本結(jié)構(gòu)。 3、了解 Linux 內(nèi)核中關(guān)于設(shè)備控制的基本原理。 四、實驗設(shè)備及工具 硬件:UP-NETARM2410-S嵌入式實驗儀,PC機pentumn500以上, 硬盤40G以上,內(nèi)存大于128M。軟件::PC 機操作系統(tǒng)REDHAT LINUX 9.0 +超級終端(或X-shell)+ AMRLINUX 開發(fā)環(huán)境 五、實驗原理 1、Linux 設(shè)備驅(qū)動概述 Linux 設(shè)備驅(qū)動程序?qū)儆贚inux 內(nèi)核的一部分,并在Linux 內(nèi)核中扮演著十分重要的角色。它們像一個個“黑盒子”使某個特定的硬件響應(yīng)一個定義良好的內(nèi)部編程接口,同時完全隱蔽了設(shè)備的工作細節(jié)。用戶通過一組標準化的調(diào)用來完成相關(guān)操作,這些標準化的調(diào)用是和具體設(shè)備驅(qū)動無關(guān)的,而驅(qū)動程序的任務(wù)就是把這些調(diào)用映射到具體設(shè)備對于實際硬件的特定操作上。 我們可以把設(shè)備驅(qū)動作為內(nèi)核的一部分,直接編譯到內(nèi)核中,即靜態(tài)編譯,也可以單獨作為一個模塊(module)編譯,在需要它的時候再動態(tài)的把它插入到內(nèi)核中。在不需要時也可把它從內(nèi)核中刪除,即動態(tài)連接。顯然動態(tài)連接比靜態(tài)連接有更多的好處,但在嵌入式開發(fā)領(lǐng)域往往要求進行靜態(tài)連接,尤其是像S3C44B0 這種不帶MMU 的芯片。但在S3C2410等帶MMU 的ARM 芯片中我們依然可以使用動態(tài)連接。目前Linux 支持的設(shè)備驅(qū)動可分為三種:字符設(shè)備(character device),塊設(shè)備(blockdevice),網(wǎng)絡(luò)接口設(shè)備(network interface)。當然它們之間的也并不是要嚴格的加以區(qū)分。 2、Linux 關(guān)于字符設(shè)備的管理 驅(qū)動程序在 Linux 內(nèi)核中往往是以模塊形式出現(xiàn)的。與應(yīng)用程序的執(zhí)行過程不同,模塊通常只是預(yù)先向內(nèi)核注冊自己,當內(nèi)核需要時響應(yīng)請求。模塊中包含兩個重要的函數(shù):init_module 和cleanup_module。前者是模塊的入口,它為模塊調(diào)用做好準備工作,而后者則是在模塊即將卸載時被調(diào)用,做一些清掃工作。 驅(qū)動程序模塊通過函數(shù): int register_chrdev(unsigned int major, const char *name, struct file_operations *fops);來完成向內(nèi)核注冊的。其中unsigned int major 為主設(shè)備號,const char *name 為設(shè)備名,至于結(jié)構(gòu)指針struct file_operations *fops 它在驅(qū)動程序中十分重要。 在我們編寫好一個驅(qū)動程序模塊后,按傳統(tǒng)的主次設(shè)備號的方法來進行設(shè)備管理,則我們應(yīng)手工為該模塊建立一個設(shè)備節(jié)點。命令: mknod /dev/ts c 254 0 其中/dev/ts 表示我們的設(shè)備名是ts,“C”說明它是字符設(shè)備,“254”是主設(shè)備號,“0”是次設(shè)備號。一旦通過mknod 創(chuàng)建了設(shè)備文件,它就一直保留下來,除非我們手工刪除它。 3、觸摸屏的控制 本系統(tǒng)觸摸屏的控制是使用的 S3c2410 處理器自帶的觸摸屏控制器,這部分的開發(fā)主要參考S3c2410 處理器的芯片手冊的第416 頁到第419 頁,具體詳見流程圖。這部分的控制主要是設(shè)置觸摸屏的采樣模式,處理器提供的模式: 1.正常的轉(zhuǎn)換模式 2.手動的x/y 位置轉(zhuǎn)換模式 3.自動的x/y 位置轉(zhuǎn)換模式 我們這里使用的是第3 種轉(zhuǎn)換模式。需要注意的是在完成一次x/y 坐標采樣的過程中需要一次模式轉(zhuǎn)換即在點擊觸摸屏之前是等待中斷模式,當有觸摸動作產(chǎn)生觸摸屏中斷以后,在x/y 的坐標采集驅(qū)動中設(shè)置成自動的x/y 位置轉(zhuǎn)換模式,在完成采集以后再轉(zhuǎn)換回等待中斷。ADC控制寄存器 ADC觸摸屏控制寄存器 注意:在自動模式,ADC觸摸屏控制寄存器要在開始讀之前重新配置ADC開始延遲寄存器 ADC轉(zhuǎn)換數(shù)據(jù)寄存器(ADCDAT1) 4.觸摸屏相關(guān)電路圖 六、實驗步驟 1、改寫該驅(qū)動程序,在其基礎(chǔ)上實現(xiàn)一些你想要的簡單功能。由于驅(qū)動程序的復(fù)雜性,不容易上手且又容易出問題,所以建議你先只對其中的調(diào)試信息做一些改動,在運行該驅(qū)動程序時看看其在屏幕上的打印信息。在你對整個過程及相關(guān)硬件有較多的一些了解之后再動手做一些功能上的調(diào)整。 2、結(jié)合 ARM-Linux 的移植實驗中的相關(guān)內(nèi)容,把改動的驅(qū)動程序編譯進內(nèi)核,并下載內(nèi)核驗證結(jié)果。你只要把該驅(qū)動在必要地方修改后(注意修改前的代碼一定要做備份)保存代碼,回到內(nèi)核目錄,make bzImage 編譯內(nèi)核,然后下載編譯好的內(nèi)核。 進入expbasic