




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
嵌入式實驗心得體味學期開始,我們開始學習《嵌入式系統(tǒng)及應(yīng)用》,由于初次接觸嵌入式系統(tǒng),感覺蠻難的,所以收獲不是很大,不少的概念都比較含糊,等到學期完畢開始做嵌入式課程設(shè)計時,真是茫然無從下手,自從拿到設(shè)計主題后,我就像熱鍋上的螞蟻,一個字“急”。最后實在沒有方法,逼著自己去學習,查資料,總算對嵌入式有了淺層理解。嵌入式系統(tǒng)本身是一個相對含糊的定義,一個手持的MP3和一個PC104的微型工業(yè)控制計算機都可以認為是嵌入式系統(tǒng)??傮w來說,嵌入式系統(tǒng)是“用于控制,監(jiān)視或者輔助操作機器和設(shè)備的裝備”。一個典型的桌面Linux系統(tǒng)包括3個主要的軟件層——linux內(nèi)核、C庫和應(yīng)用程序代碼。內(nèi)核是惟一可以徹底控制硬件的層,內(nèi)核驅(qū)動程序代表應(yīng)用程序與硬件之間發(fā)展會話。內(nèi)核之上是C庫,負責把POSIXAPI轉(zhuǎn)換為內(nèi)核可以識別的形式,然后調(diào)用內(nèi)核,從應(yīng)用程序向內(nèi)核傳遞參數(shù)。應(yīng)用程序依靠驅(qū)動內(nèi)核來完成特定的任務(wù)。在了解了根抵知識之后,我開始發(fā)展上機操作,固然,其中遇到不少的難題,不少東西都是第一次接觸,又沒有別人在旁邊指導操作,徹底憑借自己去摸索練習。其中的艱難可想而知。然而堅持就是勝利,牙一咬眼一閉堅持做下去,而通過本次實驗,我感覺收獲還是蠻多的。可能我對于嵌入式的知識學習的還是不太多,但是這之外的東西收獲頗豐。它讓我學會了如何通過自己的努力去認知一個新事物,更重要的是端正自己的學習態(tài)度,惟獨真正下功夫去學習,才干有收獲,里面大牛們的恭敬。嵌入式的調(diào)試是非常麻煩的,很耗時。雖然有g(shù)dbserver這種工具,但是你用的開辟工具鏈中不一定包括它,而且就算用上了調(diào)試仍然是很花時間的。所以要是不想天天通宵調(diào)程序呢,那就要時時以編寫無錯程序為目標。.了解一點編譯知識。這對編寫高性能程序很有匡助。.學習設(shè)計模式。設(shè)計模式普通在高級語言中討論較多,但是好東西應(yīng)該大家一起分享。學習設(shè)計模式對提高我們的設(shè)計能力非常有匡助。用C語言也可以實現(xiàn)一些模式思想,例如我們常用的回調(diào)函數(shù),就可看做是Command模式的C語言版本。.要有前瞻性,要積極學習新技術(shù)。目前的嵌入式開辟普通都是將PC應(yīng)用加以剪裁,移植到嵌入式系統(tǒng)中。但是隨著通信技術(shù)的開展,IPv6的廣泛應(yīng)用,設(shè)備上網(wǎng)是大勢所趨。許多新技術(shù)有可能在嵌入式領(lǐng)域率先應(yīng)用。把握住這個趨勢,嵌入式程序員大有可為。現(xiàn)在不少公司招程序員要求有嵌入式開辟經(jīng)歷,其實本質(zhì)上嵌入式開辟和我們尋常的開辟沒什么不同,只是要求嚴格一點。我寫下這些希翼對學習嵌入式開辟的朋友們有所匡助。正所謂“一份耕耘,一份收獲。”沒有付出,何談回報呢?再者,通過本次實驗,我也學會了如何去分析問題,如何找出自己設(shè)計中的缺乏,繼而去排除解決問題,這就是一個自我學習的過程。當我們通過實驗去學習理論知識時,自己動手得出的結(jié)論,不僅能加深我們對嵌入式的理解,更能加深我們對此的記憶。固然,在這其中,我也發(fā)現(xiàn)自己的許多缺乏之處,由于學期伊始我沒有好好學習,才落到如此地步,這也可以說是一個教訓吧!我相信在以后的學習工作中,我一定會端正自己的學習態(tài)度,一絲不茍的去對待每一件事。惟獨做好足夠的準備,才干事半功倍!Uboot是1999年由德國DENX軟件工程中心的WolfgangDenk發(fā)起的,全稱UniversalBootloadero具有如下特點:★支持多種硬件構(gòu)架:包括ARM、x86、PPC、MIPS、m68k>NIOS、Blackfin★支持多種操作系統(tǒng):包括Linux、VxWorks.NETBSD、QNX、RTEMS>ARTOS>LynxOS★支持多達216種以上的開辟板★開放源代碼,遵循GPL條款★易于移植、調(diào)試1、進一步了解Uboot的啟動流程2、進一步分析Uboot的啟動過程3、實現(xiàn)Uboot的移植分析Uboot的啟動流程,實現(xiàn)Uboot的移植1、Uboot的啟動流程、分析U-Boot的啟動過程可以分成3個階段。首先在Flash中運行匯編程序,將Flash中的啟動代碼部份復制到SDRAM中,同時創(chuàng)造環(huán)境準備運行C程序;然后在SDRAM中執(zhí)行,對硬件發(fā)展初始化;最后設(shè)置內(nèi)核參數(shù)的標記列表,復制鏡像文件,進入內(nèi)核的入口函數(shù)。1)程序首先在Flash中運行CPU入口函數(shù)/cpu/arm920t/start.so詳細工作包括:設(shè)置異常的入口地址和異常處理函數(shù);配置PLLCON存放器,確定系統(tǒng)的主頻;屏蔽看門狗和中斷;初始化I/O存放器;關(guān)閉MMU功能;初始化存儲器空間,設(shè)置刷新頻率;將U-Boot的內(nèi)容復制到SDRAM中;設(shè)置堆棧的大小,Idrpc,startarmbootoboard/yqliu2410中config,mk文件(TEXTBASE=0x31F00000)用于設(shè)置程序編譯連接的起始地址,在程序中要特殊注意與地址相關(guān)指令的使用。當程序在Flash中運行時,執(zhí)行程序跳轉(zhuǎn)時必須要使用跳轉(zhuǎn)指令,而不能使用絕對地址的跳轉(zhuǎn)(即直接對PC操作)。如果使用絕對地址,那末,程序的取指是相對于當前PC位置向前或者向后的32MB空間內(nèi),而不會跳入SDRAM中。2)程序跳轉(zhuǎn)到SDRAM中執(zhí)行/libarm/board.c中的startarmboot()函數(shù)。該函數(shù)將完成如下工作:設(shè)置通用端口;設(shè)置處理器類型;設(shè)置啟動參數(shù)地址;envinit:設(shè)置環(huán)境變量,初始化環(huán)境;initbaudrate:設(shè)置串口的波特率;serialinit:設(shè)置串口的工作方式;flashinit:設(shè)置ID號、每一個分頁的起始地址等信息,將信息送到相應(yīng)的構(gòu)造體中;draminit:設(shè)置SDRAM的起始地址和大??;envrelocate:將環(huán)境變量的地址送到全局變量構(gòu)造體中;enableinterrupts:開啟中斷;*mainloop:該函數(shù)主要用于設(shè)置延時等待,從而確定目標板是進入下載操作模式還是下載鏡像文件啟動內(nèi)核。在設(shè)定的延時時間范圍內(nèi),目標板將在串口等待輸入命令,當目標板接到正確的命令后,系統(tǒng)進入下載模式。在延時時間到達后,如果沒有接收到相關(guān)命令系統(tǒng)將自動進入裝載模式。3)裝載模式下系統(tǒng)將執(zhí)行dobootmlinux()函數(shù),0x30008000是內(nèi)核在SDRAM中的起始地址;0x30800000是ramdisk在SDRAM中的起始地址;0x40000是內(nèi)核在Flash中的位置,0x100000是數(shù)據(jù)塊的大小;0x140000是ramdisk在FLASH中的位置,0x440000是數(shù)據(jù)塊的大小。系統(tǒng)調(diào)用memcpyO函數(shù)將內(nèi)核從flash和ramdisk復制到SDRAM中,詳細如下:memcpy((void*)0x30008000,(void*)0x40000,0x100000);〃復制數(shù)據(jù)塊memcpy((void*)0x30800000,(void*)0x140000,0x440000);〃復制數(shù)據(jù)塊通常,將內(nèi)核參數(shù)傳遞給Linux操作系統(tǒng)有兩種方法:采用structparamstruct構(gòu)造體或者標記列表。一個合法的標記列表開始于ATAGC0RE,完畢于ATAGNONE。ATAGCORE可以為空,一個空的ATAGCORE的size字段設(shè)為“2”(0x00000002)。ATAGNONE的size字段必須設(shè)為“0”o標記列表可以有任意多的標記(tag)。在嵌入式Linux系統(tǒng)中,通常由U-Boot設(shè)置的啟動參數(shù)有:ATAGCORE、ATAGMEM、ATAGCMDLINE、ATAGRAMDISK.ATAGINITRD等。在本系統(tǒng)中,傳遞參數(shù)時分別調(diào)用了以下tag:setupstarttag(bd);〃標記列表開始setupmemorytags(bd);〃設(shè)置內(nèi)存的起始位置和大小setupmandlinetag(bd,mandline);/*Linux內(nèi)核在啟動時可以命令行參數(shù)的形式來接收信息,利用這一點可以向內(nèi)核提供那些內(nèi)核不能檢測的硬件參數(shù)信息,或者重載(override)內(nèi)核檢測到的信息。setupramdisktag(bd);〃表示內(nèi)核解壓后ramdisk的大小setupinitrdtag(bd,initrdstart,initrdend);〃設(shè)置ramdisk的大小和物理起始地址setupendtag(bd);〃標記列表完畢其中bdt*bd=gd->bd是指向bdt構(gòu)造體的指針,在該構(gòu)造體中存放了關(guān)于開辟板配置的根本信息。系統(tǒng)采用以下代碼來進入內(nèi)核函數(shù):theKernel=(void(*)(int,int))ntohl(hdr->ihep);hdr是imageheadert類型的構(gòu)造體,hdr-〉ihep指向內(nèi)核的第一條指令地址,即Linux操作系統(tǒng)下的/kernel/arch/arm/boot/pressed/head.S匯編程序。theKernel()函數(shù)調(diào)用應(yīng)該不會返回,如果該調(diào)用返回,那末說明出錯。2、Uboot的移植步驟1)建立板級支持包根據(jù)S3C2410處理器,在board目錄下依照smdk2410目錄配置,創(chuàng)立自己開辟板的板級資源目錄,相應(yīng)的在include/configs目錄下創(chuàng)立頭文件。修改規(guī)那末文件Makfile,添加開辟板編譯參數(shù)支持2)添加外設(shè)支持添加存儲設(shè)備支持:NANDFLASH啟動支持添加網(wǎng)絡(luò)設(shè)備支持:DM9000A添加USB接口支持添加文件系統(tǒng)支持3)設(shè)置環(huán)境變量U-Boot中提供了豐富的命令,smdk2410開辟板配置了一部份命令,我們需要通過相應(yīng)的環(huán)境變量為自己的開辟板增加一些命令:?#defineCONFIGCMDNAND?#defineCONFIGCMDPING?ttdefineCONFIGCMDDLF?ttdefineCONFIGCMDENV?ttdefineCONFIGCMDNET?ftdefineCONFIGBOOTDELAY3?ttdefineCFGLOADADDR0x30008000?ttdefineCFGTFTPLOADADDR0x300080009 4)編譯U-boot配置開辟板:#makeuptech2410classconfigConfiguringforuptech2410classboard.從實習到現(xiàn)在搞嵌入式開辟快一年了,驀然回首好似一年過得挺快,挺順利的。細細品味,發(fā)現(xiàn)這一年還是有不少值得回顧和的東西。至少這一年看書挺多,大概二十幾本,固然和那些一年看一百多本書的人沒法比,但是我已經(jīng)超越了自己。這是我大學畢業(yè)的第一年,初次走上社會,很想一展身手,可是.....其實也不用可是了,和不少朋友一樣碰了不少釘子,現(xiàn)在我和老板的關(guān)系就挺普通的,只是我性格還不錯。呵呵”,做優(yōu)秀員工看來還得慢慢學。今年最大的收獲就是做了一個半工程,是在uClinux下面跑的。半個是SNMP-Agent的實現(xiàn),因為我去的時候snmpd已經(jīng)跑起來了,我只是實現(xiàn)部份管理功能;一個是基于Web的管理系統(tǒng),使公司的主打產(chǎn)品微波通信設(shè)備上網(wǎng)。這個工程是我一手籌畫,一手實現(xiàn)(界面設(shè)計是一位女同事,很優(yōu)秀的程序員),從中學到的東西也最多,感情不可謂不深。SNMP即簡單網(wǎng)絡(luò)管理協(xié)議,其實一點都不簡單。在我所知的網(wǎng)絡(luò)協(xié)議里面,它僅僅比0SI的CMIP簡單一點,而CMIP直到現(xiàn)在還沒得到廣泛應(yīng)用。我們能夠?qū)崿F(xiàn)SNMP-Agent不能不感謝CarnegieMellon大學的ucd-snmp軟件包。它使得開辟人員專注于實現(xiàn)對特定設(shè)備的管理功能。我在工程中的工作主要是擴展MIB,實現(xiàn)相應(yīng)的管理功能以及網(wǎng)絡(luò)功能的擴展。我們公司的MIB庫比較龐大,但是程序運行還是挺快的。因為ucd-snmp軟件包中大量使用回調(diào)函數(shù),而且它將MIB樹以二叉樹形式表示,但是每一個結(jié)點不是單個的MIB結(jié)點,而是一個表,包括了多個結(jié)點?;卣{(diào)函數(shù)和兩層表示法的使用是操作快速的主要因素?;赪eb的管理系統(tǒng)我原本是打算在設(shè)備外實現(xiàn)SNMP-Manager的功能,因為設(shè)備中已經(jīng)嵌入了Agento這樣管理人員可以在世界各地通過公司的管理平臺,實現(xiàn)對所有設(shè)備的管理。但是老板想在設(shè)備中嵌入一個管理系統(tǒng),可以通過管理單個設(shè)備就行。呵呵??,這樣工作又輕松了一點,就按老板的意思做了。我用的效勞器是BOA,它比現(xiàn)在市場占有率第一的Apache速度要快。目前還只支持CGI,我就用C寫CGI程序,古老了點。但是在開辟過程中感覺用CGI比用現(xiàn)在流行的ASP,JSP要爽,可以隨心所欲,哈哈而且這也是用 語言的優(yōu)點。CGI程序很簡單,它的輸入就是標準輸入,它的輸出就是標準輸出。BOA在uClinux上面跑總要出點問題的,出問題好,出了問題我就能找到問題,一來一往,我對socket編程,I/O多路等編程技術(shù)了解也就越來越深了。在Linux下面搞了一年,不愛上Linux都難,個人認為軟件開發(fā)人員在Linux下面進步是最快的。那末多優(yōu)秀的開源代碼供我們研究,宛如每天與世界上最優(yōu)秀的程序員打交道,進步于不經(jīng)意間。哈哈正所謂“熟讀唐詩三百首,不會作詩也會吟”。GCC編譯器的優(yōu)秀不用多說,我覺得寫Makefile也是很件開心的事。不推薦程序員搞開辟都用IDE,隔靴捎癢很不爽。但是Linux缺點也很明顯,聽歌、看碟、玩游戲不如Windowso恰巧公司的電腦沒音箱,干脆我就懶得用Windows了。用Linux而不講開源是不道德的,我們程序員享受著開源的好處,自然也要為開源做點奉獻。我開辟的所有軟件都開源,但是我也有個“怪癖”:不喜歡別人在我代碼未完成的時候問我要源代碼。.不要玩Linuxo這一點主要是對像我這樣在Linux下面開辟的程序員來說的。因為Linux對程序員的吸引力很大,但它下面可以直接用的軟件還是比較少。于是我們總想到網(wǎng)上找一些開源的軟件裝到我們的機器上,從無到有讓人很有成就感的,呵呵?二要是裝上
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包出租屋合同協(xié)議書
- 三方物流運輸合同
- 數(shù)據(jù)記錄表-產(chǎn)品性能評測
- 集體“建立”用地使用權(quán)出租合同8篇
- 2025年烏魯木齊貨運從業(yè)資格證考試模擬試題及答案大全解析
- 單元房租賃合同書范本5篇
- 醫(yī)療器械運輸合同
- 公司網(wǎng)絡(luò)線路維護合同8篇
- 委托運輸合同樣本8篇
- 【合同范文】賣方信貸合同7篇
- 2024年家庭教育指導師考試(重點)題庫及答案(含各題型)
- 2024年儀表工程師崗位職責(20篇)
- 直腸癌術(shù)后的康復護理
- 性商老師課程培訓課件
- 拆除鍋爐可行性報告
- 二級精神病醫(yī)院評審標準實施細則
- 全套ISO45001職業(yè)健康安全管理體系文件(手冊及程序文件)
- tdp燙傷處理應(yīng)急預案
- MQL4命令中文詳解手冊
- 水利工程危險源辨識清單全
- ISO20000:2018版標準培訓教材
評論
0/150
提交評論