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