數(shù)碼相框畢業(yè)設(shè)計(jì)論文--基于arm和linux的嵌入式數(shù)碼相框系統(tǒng)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  畢業(yè)論文</b></p><p>  題目 基于ARM和Linux的嵌入式數(shù)碼相框系統(tǒng)設(shè)計(jì) </p><p><b>  一、背景</b></p><p>  隨著PC時(shí)代數(shù)碼技術(shù)的發(fā)展,數(shù)碼相機(jī)以其低廉的價(jià)格,方便的操作成為攝影器材未來(lái)的發(fā)展方向。目前,很多家庭都持有數(shù)碼相機(jī),一次拍攝下來(lái)的

2、照片往往會(huì)有上百?gòu)?,使用PC機(jī)來(lái)查看拍攝下來(lái)的圖片,操作繁瑣,而且依賴于PC機(jī)。</p><p>  作為數(shù)碼相機(jī)的一種附屬產(chǎn)品,數(shù)碼相框不僅具有傳統(tǒng)相框的特點(diǎn),而且可以直接從數(shù)碼相機(jī)中選擇心儀的照片,定時(shí)更新照片。數(shù)字相框可以擺放在家居顯眼之處,成為現(xiàn)代家庭一道靚麗的風(fēng)景線。</p><p>  數(shù)碼相框是展示數(shù)碼照片而非紙質(zhì)照片的相框。眾多的數(shù)碼攝影產(chǎn)生的相片保存起來(lái)后,查看過(guò)程繁瑣不

3、方便,大量打印出來(lái)又非常浪費(fèi),如果用數(shù)碼相框直接插上相機(jī)的存儲(chǔ)卡展示照片,就非??崃?。數(shù)碼攝影必然推動(dòng)數(shù)碼相框的發(fā)展,因?yàn)閾?jù)調(diào)查全世界打印的數(shù)碼相片不到35%。</p><p><b>  二、系統(tǒng)開發(fā)目標(biāo)</b></p><p>  根據(jù)實(shí)際應(yīng)用的特點(diǎn)對(duì)產(chǎn)品進(jìn)行完整的需求分析,形成比較完善的總體設(shè)計(jì)方案。同時(shí),達(dá)到能具備Linux操作系統(tǒng)下簡(jiǎn)單的設(shè)備驅(qū)動(dòng)程序開發(fā)、圖

4、形用戶接口設(shè)計(jì)的能力。此外,掌握基本的系統(tǒng)功能及性能測(cè)試技術(shù),從而具備比較全面的嵌入式應(yīng)用系統(tǒng)開發(fā)能力。另外,作為一個(gè)消費(fèi)類電子產(chǎn)品,數(shù)碼相框的設(shè)計(jì)必須考慮以下因素:</p><p> ?。?)用戶接口友好、操作方便。由于該產(chǎn)品的使用者大多是非專業(yè)人士,用戶接口是否清晰明了、操作是否簡(jiǎn)捷方便成為用戶是否能迅速的接受此產(chǎn)品的重要因素。</p><p> ?。?)系統(tǒng)兼容性強(qiáng)。數(shù)碼相框應(yīng)能識(shí)別

5、和處理當(dāng)前數(shù)碼相機(jī)主要的圖像格式,能訪問(wèn)主流的外部半導(dǎo)體存儲(chǔ)卡。</p><p>  (3)穩(wěn)定可靠。作為消費(fèi)類電子產(chǎn)品。必須通過(guò)比較嚴(yán)格的功能測(cè)試,以保證用戶在使用過(guò)程中,不會(huì)因?yàn)槌绦蝈e(cuò)誤而喪失對(duì)產(chǎn)品的信心。</p><p><b>  三、所需環(huán)境及設(shè)備</b></p><p> ?。?)以GEC2440開發(fā)板作為目標(biāo)機(jī),使用安裝了Wind

6、ows XP 的PC機(jī)作為宿主機(jī),并在宿主機(jī)上安裝虛擬機(jī)軟件,虛擬機(jī)里安裝的是Red Hat EnterpriseLinux5作為開發(fā)環(huán)境。</p><p> ?。?)硬件部分:GEC2440模仿三星smdk2440,以ARM920T為內(nèi)核,控制輔助設(shè)備。基本端口包括以太網(wǎng)接口,USB接口,還有兩個(gè)RS232的串口。A/D和D/A模塊主要用于現(xiàn)場(chǎng)數(shù)據(jù)的采集與控制信號(hào)的輸出。DC/DC模塊主要負(fù)責(zé)整個(gè)系統(tǒng)的供電。&

7、lt;/p><p><b>  四、系統(tǒng)概要設(shè)計(jì)</b></p><p><b>  硬件部分:</b></p><p>  系統(tǒng)的主要硬件包括嵌入式開發(fā)平臺(tái)GECC2440、LCD屏、人機(jī)交互界面、外部存儲(chǔ)介質(zhì)接口電路。大致可以分為三塊:</p><p> ?。?)LCD屏用來(lái)展示圖片、輸出信息。&l

8、t;/p><p>  (2)人機(jī)交互界面設(shè)定各個(gè)模式的播放形式、輸入信息。</p><p> ?。?)外部存儲(chǔ)介質(zhì)接口電路用來(lái)提供外部的存儲(chǔ)介質(zhì)的接口。</p><p><b>  軟件部分:</b></p><p> ?。?)交叉環(huán)境的搭建:用GNU工具鏈作為交叉編譯器。</p><p><b

9、> ?。?)超級(jí)終端。</b></p><p><b>  五、系統(tǒng)詳細(xì)設(shè)計(jì)</b></p><p> ?。?)嵌入式Linux開發(fā)環(huán)境的建立具體步驟過(guò)程:交叉環(huán)境的具體建立;Qt應(yīng)用界面代碼的編寫;環(huán)境的調(diào)試、仿真運(yùn)行、NFS的配置等。</p><p> ?。?)系統(tǒng)軟硬件的的連接工作:</p><p&g

10、t;  bootloader的移植、linux內(nèi)核配置移植、驅(qū)動(dòng)移植、根文件系統(tǒng)制作、帶庫(kù)的根文件系統(tǒng)的制作及各階段的調(diào)試、QT界面的設(shè)計(jì)。</p><p>  (3)運(yùn)用QT 及網(wǎng)絡(luò)編程實(shí)現(xiàn)系統(tǒng)設(shè)計(jì)界面的可視化,及網(wǎng)絡(luò)的連接問(wèn)題。</p><p> ?。?)對(duì)預(yù)期的目標(biāo)功能,編寫代碼,調(diào)試仿真、運(yùn)行。</p><p> ?。?)對(duì)應(yīng)用程序開發(fā)的代碼編寫與調(diào)試運(yùn)行。

11、</p><p><b>  六、調(diào)試分析及分工</b></p><p>  對(duì)開發(fā)過(guò)程中遇到的問(wèn)題,時(shí)時(shí)記錄,分析解決,保證階段任務(wù)能夠順完成。張軍委完成環(huán)境的搭建、bootloader的燒寫,usb驅(qū)動(dòng)的移植及調(diào)試。肖奇超完成內(nèi)核的裁剪與移植、Qt應(yīng)用程序的設(shè)計(jì)。</p><p><b>  測(cè)試記錄要細(xì)致。</b>&

12、lt;/p><p>  七、時(shí)間安排及所用到的參考資料</p><p>  第一二周前期資料調(diào)查整理,準(zhǔn)備開發(fā)板及有關(guān)環(huán)境的搭建與測(cè)試。第三周系統(tǒng)概要設(shè)計(jì),對(duì)硬件和軟件部分的分析,主要是對(duì)設(shè)計(jì)的目標(biāo)功能的預(yù)計(jì)需求,作好交叉編譯環(huán)境的建立與運(yùn)行等。第五六周完成詳細(xì)系統(tǒng)設(shè)計(jì)。包括具體的代碼的編寫,內(nèi)核驅(qū)動(dòng)和網(wǎng)絡(luò)驅(qū)動(dòng)的完成,以及應(yīng)用程序的開發(fā)等。第七周完成應(yīng)用程序代碼的編譯運(yùn)行仿真,測(cè)試等</

13、p><p><b>  參考資料: </b></p><p>  【1】張勇.ARM原理與C程序設(shè)計(jì).西安:西安電子科技大學(xué)出版社, 2009年4月</p><p>  【2】韋東山.嵌入式Linux應(yīng)用軟件開發(fā)完全手冊(cè).北京:人民郵電出版社,2008年8月</p><p>  【3】LUPA. Linux軟件工程師實(shí)用教程

14、.北京:科學(xué)出版社,2011年11月修訂版</p><p>  【4】成潔,盧紫毅.Linux窗口程序設(shè)計(jì).北京:清華大學(xué)出版社,2008年11月</p><p>  【5】粵嵌技術(shù)中心.GEC2440開發(fā)板說(shuō)明文檔,GEC開發(fā)板實(shí)驗(yàn)指導(dǎo)手冊(cè).</p><p>  【6】http:\\www.trolltech.com. qt開發(fā)白皮書,qt幫助文檔</p&g

15、t;<p>  【7】Daniel Solin著,袁鵬飛譯.24小時(shí)學(xué)通Qt編程.北京:人民郵電出版社2000年10月</p><p>  【8】百度文庫(kù),中國(guó)IT實(shí)驗(yàn)室網(wǎng)站,ChinaUnix網(wǎng)站</p><p><b>  摘 要</b></p><p>  嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可以配置,通常

16、對(duì)功能、可靠性、成本、體積、功耗有嚴(yán)格約束的一種專用計(jì)算機(jī)系統(tǒng)。當(dāng)前先進(jìn)的嵌入式系統(tǒng),通常由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及嵌入式應(yīng)用程序四個(gè)部分組成,實(shí)計(jì)算機(jī)基于ARM Linux的嵌入式數(shù)碼相框系統(tǒng)的研究和實(shí)現(xiàn)應(yīng)用系統(tǒng),稱為嵌入式系統(tǒng)、實(shí)時(shí)系統(tǒng)或者嵌入式實(shí)時(shí)系統(tǒng)。</p><p>  根據(jù)目前國(guó)內(nèi)外對(duì)嵌入式的研究和開發(fā),結(jié)合實(shí)際的實(shí)驗(yàn)條件,本項(xiàng)目使用硬件平臺(tái)廣東省嵌入式軟件公共技術(shù)中心開發(fā)的G

17、EC2440開發(fā)板作為目標(biāo)機(jī),使用安裝linux的PC機(jī)作為宿主機(jī),并在宿主機(jī)Windows平臺(tái)上安裝了一個(gè)虛擬機(jī)軟件,虛擬機(jī)里安裝的是Red Hat EnterpriseLinux 5作為開發(fā)環(huán)境。主要實(shí)現(xiàn)工作包括:在宿主機(jī)上安裝交叉編譯工具,建立交叉編譯環(huán)境,配置tftp、DNW(或超級(jí)終端)以建立嵌入式軟件平臺(tái)。進(jìn)行一個(gè)可以瀏覽與管理圖片功能,且能進(jìn)行幻燈片播放的課程設(shè)計(jì)。針對(duì)項(xiàng)目需求實(shí)現(xiàn)對(duì)驅(qū)動(dòng)程序的完善和移植,制作適合此開發(fā)板的

18、根文件系統(tǒng),最后將基于qt設(shè)計(jì)的應(yīng)用程序程植到開發(fā)板上,實(shí)現(xiàn)個(gè)人圖片的掌上管理。</p><p>  關(guān)鍵詞:嵌入式系統(tǒng);GEC2440開發(fā)板;linux環(huán)境;移植。</p><p><b>  Abstract</b></p><p>  Embedded system is used as the center, take the comp

19、uter technology as the foundation, software and hardware can be configured, usually to the function, reliability, cost, volume, power consumption have strict constraints of a kind of special computer system. The current

20、advanced Embedded system, usually by Embedded microcontroller processor,peripheral hardware equipment, Embedded operating system and Embedded application four parts, real computer based on ARM Linux and Qt/Embedded Embed

21、ded digi</p><p>  According to the current domestic and foreign research and development of embedded, combining with the condition of experiment, this project use hardware platform embedded software public t

22、echnology center of guangdong province the development of GEC2440 development board as the target machine, use linux install the PC as the host machine, and in the host machine Windows platform installed a linux machine

23、software, linux machine is installed, the Red Hat EnterpriseLinux 5 as a development enviro</p><p>  Keywords: embedded system;GEC2440 development board;linux machine environment;the transplant.</p>&

24、lt;p><b>  目 錄</b></p><p><b>  摘 要5</b></p><p>  Abstract6</p><p><b>  目 錄7</b></p><p><b>  第一章緒論9</b></p>

25、<p>  第二章 所需環(huán)境及設(shè)備10</p><p>  2.1硬件部分:10</p><p>  2.1.1 GEC2440開發(fā)板介紹10</p><p>  2.2軟件部分11</p><p>  2.2.1 Linux系統(tǒng)平臺(tái)介紹:11</p><p>  2.3實(shí)現(xiàn)思路11</

26、p><p>  第三章 嵌入式開發(fā)環(huán)境的搭建12</p><p>  3.1嵌入式交叉環(huán)境的概述12</p><p>  3.2 交叉編譯環(huán)境的搭建12</p><p>  3.3交叉調(diào)試環(huán)境的搭建13</p><p>  3.4交叉服務(wù)器的搭建13</p><p>  3.5關(guān)于交叉調(diào)試

27、13</p><p>  3.6關(guān)于網(wǎng)絡(luò)掛載的配置14</p><p>  第四章 U-boot的移植17</p><p>  4.1建立工作目錄17</p><p>  4.2設(shè)置環(huán)境17</p><p>  4.2.1stage1階段硬件初始化17</p><p>  4.2.2

28、修改時(shí)鐘17</p><p>  4.2.3重定位u-boot代碼19</p><p>  4.3進(jìn)入目錄配置編譯22</p><p>  4.4 bootloader的燒寫22</p><p>  第五章 Linux內(nèi)核的移植24</p><p>  5.1 準(zhǔn)備工作24</p><p

29、>  5.2 修改內(nèi)核源碼頂層24</p><p>  5.3 修改機(jī)器碼24</p><p>  5.4 設(shè)置 flash 分區(qū)25</p><p>  5.5 配置編譯內(nèi)核26</p><p>  5.6 Linux內(nèi)核編譯30</p><p>  5.7 使用minicon遠(yuǎn)程訪問(wèn)目標(biāo)板30&l

30、t;/p><p>  5.8下載到開發(fā)板中測(cè)試31</p><p>  第六章 驅(qū)動(dòng)的移植32</p><p>  6.1關(guān)于USB驅(qū)動(dòng)移植32</p><p>  6.2 關(guān)于LCD驅(qū)動(dòng)移植33</p><p>  6.3關(guān)于觸摸板驅(qū)動(dòng)移植35</p><p>  第七章 制作根文件系統(tǒng)

31、38</p><p>  7.1工作目錄38</p><p>  7.2創(chuàng)建節(jié)點(diǎn)38</p><p>  7.3拷貝動(dòng)態(tài)鏈接庫(kù)38</p><p>  7.4交叉編譯busybox39</p><p>  7.5交叉編譯bash(交互程序)39</p><p>  7.6建立系統(tǒng)配置

32、文件40</p><p>  7.7添加一個(gè)用戶程序41</p><p>  7.8手動(dòng)校準(zhǔn)43</p><p>  7.10根文件系統(tǒng)燒入44</p><p>  第八章 基于linux平臺(tái)的應(yīng)用程序45</p><p>  8.1函數(shù)主要源代碼46</p><p>  8.2在主

33、機(jī)上運(yùn)行57</p><p>  8.3交叉編譯生成目標(biāo)文件57</p><p>  第九章 結(jié)束語(yǔ)59</p><p><b>  致謝60</b></p><p><b>  參考文獻(xiàn)61</b></p><p><b>  附錄62</b&g

34、t;</p><p><b>  緒論</b></p><p>  根據(jù)實(shí)際應(yīng)用的特點(diǎn)對(duì)產(chǎn)品進(jìn)行完整的需求分析,形成比較完善的總體設(shè)計(jì)方案。同時(shí),達(dá)到能具備Linux操作系統(tǒng)下簡(jiǎn)單的設(shè)備驅(qū)動(dòng)程序開發(fā)、圖形用戶接口設(shè)計(jì)的能力。此外,掌握基本的系統(tǒng)功能及性能測(cè)試技術(shù),從而具備比較全面的嵌入式應(yīng)用系統(tǒng)開發(fā)能力。另外,作為一個(gè)消費(fèi)類電子產(chǎn)品,數(shù)碼相框的設(shè)計(jì)必須考慮以下因素:&

35、lt;/p><p>  1、用戶接口友好、操作方便。</p><p>  2、系統(tǒng)兼容性強(qiáng)。數(shù)碼相框應(yīng)能識(shí)別和處理當(dāng)前數(shù)碼相機(jī)主要的圖像格式,能訪問(wèn)主流的外部半導(dǎo)體存儲(chǔ)卡。</p><p><b>  3、穩(wěn)定可靠。</b></p><p>  隨著PC時(shí)代數(shù)碼技術(shù)的發(fā)展,數(shù)碼相機(jī)以其低廉的價(jià)格,方便的操作成為攝影器材未來(lái)的

36、發(fā)展方向。目前,很多家庭都持有數(shù)碼相機(jī),一次拍攝下來(lái)的照片往往會(huì)有上百?gòu)垼褂肞C機(jī)來(lái)查看拍攝下來(lái)的圖片,操作繁瑣,而且依賴于PC機(jī)。</p><p>  作為數(shù)碼相機(jī)的一種附屬產(chǎn)品,數(shù)碼相框不僅具有傳統(tǒng)相框的特點(diǎn),而且可以直接從數(shù)碼相機(jī)中選擇心儀的照片,定時(shí)更新照片。數(shù)字相框可以擺放在家居顯眼之處,成為現(xiàn)代家庭一道靚麗的風(fēng)景線。</p><p>  數(shù)碼相框是展示數(shù)碼照片而非紙質(zhì)照片的相

37、框。眾多的數(shù)碼攝影產(chǎn)生的相片保存起來(lái)后,查看過(guò)程繁瑣不方便,大量打印出來(lái)又非常浪費(fèi),如果用數(shù)碼相框直接插上相機(jī)的存儲(chǔ)卡展示照片,就非??崃?數(shù)碼攝影必然推動(dòng)數(shù)碼相框的發(fā)展,因?yàn)閾?jù)調(diào)查全世界打印的數(shù)碼相片不到35%。</p><p>  第二章 所需環(huán)境及設(shè)備</p><p><b>  2.1硬件部分:</b></p><p>  以GEC24

38、40開發(fā)板作為目標(biāo)機(jī),使用安裝了linux 的PC機(jī)作為宿主機(jī),并在宿主機(jī)上安裝虛擬機(jī)軟件,虛擬機(jī)里安裝的是Red Hat EnterpriseLinux5作為開發(fā)環(huán)境。GEC2440模仿三星smdk2440,以ARM920T為內(nèi)核,控制輔助設(shè)備?;径丝诎ㄒ蕴W(wǎng)接口,USB接口,還有兩個(gè)RS232的串口。A/D和D/A模塊主要用于現(xiàn)場(chǎng)數(shù)據(jù)的采集與控制信號(hào)的輸出。DC/DC模塊主要負(fù)責(zé)整個(gè)系統(tǒng)的供電。</p><p

39、>  系統(tǒng)的主要硬件包括嵌入式開發(fā)平臺(tái)GECC2440、LCD屏、人機(jī)交互界面、外部存儲(chǔ)介質(zhì)接口電路。大致可以分為三塊:</p><p>  (1)LCD屏用來(lái)展示圖片、輸出信息。</p><p> ?。?)人機(jī)交互界面設(shè)定各個(gè)模式的播放形式、輸入信息。</p><p> ?。?)外部存儲(chǔ)介質(zhì)接口電路用來(lái)提供外部的存儲(chǔ)介質(zhì)的接口.</p><

40、;p>  2.1.1 GEC2440開發(fā)板介紹</p><p>  使用硬件平臺(tái)廣東省嵌入式軟件公共技術(shù)中心開發(fā)的GEC2440開發(fā)板作為硬件平臺(tái),GEC2440是模仿廣為流行的三星smdk2440開發(fā)板而設(shè)計(jì)的低價(jià)位開發(fā)板,下面對(duì)GEC2440做一些簡(jiǎn)單介紹。</p><p>  GEC2440的設(shè)計(jì)以ARM920T為內(nèi)核的三星SC32440是控制核心,負(fù)責(zé)控制所有輔助設(shè)備。存儲(chǔ)器

41、采用SDRAM和FLASH兩種類型,能滿足系統(tǒng)運(yùn)行和調(diào)試的需要。基本端口包括以太網(wǎng)接口,USB接口,還有兩個(gè)RS232的串口。A/D和D/A模塊主要用于現(xiàn)場(chǎng)數(shù)據(jù)的采集與控制信號(hào)的輸出。DC/DC模塊主要負(fù)責(zé)整個(gè)系統(tǒng)的供電。擴(kuò)展接口考慮了系統(tǒng)的可擴(kuò)展性。開發(fā)板外觀布局如圖2.1</p><p>  圖2.1GEC2440開發(fā)板外觀圖</p><p><b>  2.2軟件部分<

42、;/b></p><p>  2.2.1 Linux系統(tǒng)平臺(tái)介紹:</p><p>  Linux是一種類UNIX操作系統(tǒng)。兼容POSIX 1003.1標(biāo)準(zhǔn),并包含了UNIX System V和BSD 4.3的大部分特征。它充分體現(xiàn)了操作系統(tǒng)的方展趨勢(shì),即開放、穩(wěn)定、標(biāo)準(zhǔn)。Linux具有如下的特征:</p><p>  (1)真正的多用戶、多任務(wù)操作系統(tǒng)。&l

43、t;/p><p>  (2)符合POSIX(可移植操作系統(tǒng)接口)標(biāo)準(zhǔn)。</p><p>  (3)采用頁(yè)式存儲(chǔ)管理。</p><p>  (4)支持動(dòng)態(tài)鏈接庫(kù)。</p><p>  (5)提供具有內(nèi)置安全措施的分層文件系統(tǒng)。</p><p>  (6)提供Shell命令解釋程序和編程語(yǔ)言。</p><p

44、>  (7)提供強(qiáng)大的管理功能,包括遠(yuǎn)程管理功能。</p><p>  (8)提供內(nèi)核編程接口。</p><p>  (9)具備圖形用戶接口。</p><p>  (10)具備大量的實(shí)用程序和通信、聯(lián)網(wǎng)工具。</p><p>  (11)大量高級(jí)程序設(shè)計(jì)語(yǔ)言已經(jīng)被移植到Linux系統(tǒng)上,因此它是理想的應(yīng)用程序開發(fā)平臺(tái)。</p>

45、;<p><b>  2.3實(shí)現(xiàn)思路</b></p><p>  首先在本地計(jì)算機(jī)上編寫程序;然后通過(guò)在本地進(jìn)行交叉編譯生成目標(biāo)平臺(tái)上可以運(yùn)行的二進(jìn)制代碼格式;最后再下載到目標(biāo)平臺(tái)上的特定位置上運(yùn)行。</p><p> ?。?)交叉環(huán)境的搭建:用GNU工具鏈作為交叉編譯調(diào)試器。</p><p>  (2)終端使用的是字符終端,ar

46、m- linux-gcc。</p><p>  第三章 嵌入式開發(fā)環(huán)境的搭建</p><p>  3.1嵌入式交叉環(huán)境的概述</p><p>  嵌入式系統(tǒng)通常是一個(gè)資源受限的系統(tǒng),因此直接在嵌入式系統(tǒng)的硬件平臺(tái)上編寫軟件比較困難,有時(shí)候甚至是不可能的。所以需要一個(gè)交叉環(huán)境來(lái)實(shí)現(xiàn):</p><p>  首先在通用計(jì)算機(jī)上編寫程序;</p

47、><p>  然后通本地編譯或者交叉編譯生成目標(biāo)浹臺(tái)上可以運(yùn)行的二進(jìn)制代碼格式;</p><p>  最后再下載到目標(biāo)平臺(tái)上的特定的位置上去運(yùn)行。</p><p>  3.2 交叉編譯環(huán)境的搭建</p><p>  在一種平臺(tái)上編譯出能在另一種平臺(tái)(體系結(jié)構(gòu)不同)上運(yùn)行的程序,在PC平臺(tái)(X86CPU)上編譯出能在arm平臺(tái)上的程序,編譯后的程序

48、在X86上是不能運(yùn)行的,必須放到arm上才能運(yùn)行,用來(lái)編譯這種程序的編譯器叫做交做編譯器。我們用到的是arm-linux-gcc。</p><p>  嵌入式軟件開發(fā)需要交叉開發(fā)環(huán)境,這是其開發(fā)的一顯著特點(diǎn),交叉編譯器只是交叉開發(fā)環(huán)境的一部分,我們說(shuō)的交叉開發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境,它與運(yùn)行嵌入式應(yīng)用軟件的環(huán)境有所不同,常采用宿主機(jī)----目標(biāo)機(jī)模式。</p><p>

49、;<b>  關(guān)于交叉工具鏈:</b></p><p>  它是交叉編譯環(huán)境所需工具的集合體,是所需軟件(binuntials、gcc與glibc等)的安裝載體,主要包括:交叉編譯器(arm-linux-gcc)、交叉匯編器(arm-linux-as)、交叉鏈接器(arm-linux-ld)、各種操作所依賴的庫(kù)及用于處理可執(zhí)行程序和庫(kù)的一些基本工具(如arm-linux-strip)。<

50、;/p><p><b>  交叉環(huán)境如圖所示:</b></p><p><b>  圖3.2 1</b></p><p>  安裝編譯器(交叉工具鏈)軟件:eabi-4.1.2.tar.bz2</p><p>  安裝準(zhǔn)備 #mkdir /usr/local/arm</p><p&g

51、t;  #cp eabi-4.1.2.tar.bz2 -C /usr/local/arm</p><p>  #mv eabi 4.1.2</p><p><b>  添加環(huán)境變量:</b></p><p>  #vi /etc/bashrc</p><p>  在文件結(jié)尾添加 export PATH= /usr/l

52、ocal/arm/4.1.2/bin:$PATH</p><p><b>  使配置生效:</b></p><p>  #source /etc/bashrc</p><p>  3.3交叉調(diào)試環(huán)境的搭建</p><p>  源碼包gdb-6.5.tar.bz2的安裝cd.</p><p>  (

53、1)新建編譯目錄 </p><p>  #mkdir /home/build_gdb</p><p>  #cd /home/build_gdb</p><p>  將gdb-6.5.tar.bz2拷貝到/home/build_gdb</p><p> ?。?)解壓gdb-6.5.tar.bz2</p><p>  #

54、tar jxf gdb-6.5.tar.bz2c</p><p><b> ?。?)配置 </b></p><p>  #cd gdb-6.5</p><p>  #./configure --target=arm-linux --prefix=/usr/local/arm/4.1.2/</p><p>  此步遇到

55、的問(wèn)題是:./configure—target =arm-linux沒(méi)有那個(gè)文件或目錄,是因?yàn)閏onfigure的權(quán)限問(wèn)題,在運(yùn)行configure前chmod 755 configure)</p><p><b> ?。?)編譯 </b></p><p><b>  #make</b></p><p><b>

56、 ?。?)安裝</b></p><p>  #make install (在/usr/local/arm/4.1.2/bin/目錄下已生成arm-linux-gdb工具)。</p><p>  3.4交叉服務(wù)器的搭建</p><p>  源碼包:gdb-6.5/gdb/gdbserver</p><p><b>  

57、(1)進(jìn)入</b></p><p>  #cd gdb-6.5/gdb/gdbserver</p><p><b> ?。?)配置 </b></p><p>  #chmod u+x configure</p><p>  #./configure --host=arm-linux </p&

58、gt;<p><b> ?。?)編譯 </b></p><p>  #make CC=/usr/local/arm/4.1.2/bin/arm-linux-gcc (完了在當(dāng)前目錄生成gdbserver、gdbreplay等)</p><p>  這里遇到的問(wèn)題是:沒(méi)有使用絕對(duì)路徑,導(dǎo)致了無(wú)法生成</p><p>  (4)下載安

59、裝到目標(biāo)板(gdbserver)</p><p>  gdbserver放到目標(biāo)板的/bin目錄下。</p><p><b>  3.5關(guān)于交叉調(diào)試</b></p><p><b> ?。?)新建測(cè)試目錄</b></p><p>  #mkdir /root/test</p><

60、p>  #cd /root/test</p><p><b> ?。?)編輯文件</b></p><p>  #vim debug.c</p><p><b> ?。?)交叉編譯</b></p><p>  #arm-linux-gcc -g debug.c -o debug (加上-g選項(xiàng)

61、)</p><p> ?。?)下載到目標(biāo)板(將整個(gè)代碼目錄)</p><p>  #mkdir arm_debug </p><p>  #cd arm_debug //將目標(biāo)程序放進(jìn)arm_debug</p><p>  (5)啟動(dòng)調(diào)試服務(wù)器(目標(biāo)板上進(jìn)行)</p><p>  成功后便開始偵聽本地調(diào)試端口,可以看到

62、如下信息:</p><p>  bash-4.0# gdbserver 172.22.60.222:1234 debug</p><p>  Process try created; pid = 992</p><p>  Listening on port 1234</p><p> ?。?72.22.60.222是目標(biāo)板的IP)</

63、p><p> ?。?)啟動(dòng)交叉調(diào)試器(在宿主機(jī)上進(jìn)行)</p><p>  #/root/test (一定要進(jìn)去代碼目錄下)</p><p>  #arm-linux-gdb debug</p><p>  #target remote 172.22.60.222:1234 </p><p><b> 

64、 成功后打印如下:</b></p><p>  (gdb) target remote 172.22.60.223:1234</p><p>  Remote debugging using 172.22.60.223:1234</p><p>  Remote communication error: Connection reset by peer&

65、lt;/p><p><b>  然后進(jìn)行調(diào)試。</b></p><p>  3.6關(guān)于網(wǎng)絡(luò)掛載的配置</p><p>  使用NFS服務(wù),將宿主機(jī)的一個(gè)目錄通過(guò)網(wǎng)絡(luò)可以掛載到其他計(jì)算機(jī)上,并作為它的一個(gè)目錄,在嵌入式開發(fā)中通過(guò)NFS可以很方便的將修改的文件通過(guò)NFS傳輸?shù)介_發(fā)板中去,不用以復(fù)的燒寫鏡像文件。</p><p>

66、<b>  圖3.6 1</b></p><p><b>  修改配置文件:</b></p><p>  #vim /etc/exports </p><p>  配置內(nèi)容為 /root/rootfs 192.168.1.* ()rw.sync,no_root_squash)</p><p>

67、  [共享的目錄](méi)[主機(jī)名或IP][參數(shù)1 參數(shù)2 ……]</p><p>  [共享的目錄](méi)[IP1(參數(shù)1,參數(shù)2)][IP2(參數(shù)3,參數(shù)4)]</p><p>  rw 對(duì)共享文件夾可讀可寫。</p><p>  sync 所有數(shù)據(jù)在請(qǐng)求時(shí)寫入共享。</p><p>  no_root_squash 使遠(yuǎn)程用戶具備本地ro

68、ot用戶所具有的讀寫權(quán)限。</p><p>  /root/rootfs:是宿主機(jī)上共享的文件夾。</p><p>  192.168.1.*:是所支持的目標(biāo)板的IP地址,用的*表示該網(wǎng)段的地址都可以訪問(wèn)。</p><p>  備注:NFS的使有分服務(wù)器端和客戶端:</p><p>  服務(wù)器端提供要共享的文件,客戶端通掛載(mount)

69、實(shí)現(xiàn)對(duì)共享文件平的訪問(wèn),例如:</p><p>  mount 192.168.1.1:/home/nfs/tmp/test</p><p>  本地NFS服務(wù)器端通過(guò)讀取配置文件/etc/exprots決定對(duì)外所共享的文件目錄,在客戶端的終端中通過(guò)NFS方式掛載宿主機(jī)目錄,例如:</p><p>  mount -o nolock 192.168.1.1:/h

70、ome/nfs/tmp/test</p><p>  客戶端卸載所掛載的NFS文件系統(tǒng),umount命令不能在掛載目錄執(zhí)行,需要離開執(zhí)行。</p><p>  umount /tmp/test</p><p>  宿主機(jī)#ifconfig eth0 192.168.1.132</p><p>  ping 192.168.1.1(ping網(wǎng)

71、關(guān))</p><p>  #service nfs restart</p><p>  #showmount –e localhost(查看當(dāng)前對(duì)外共享目錄)</p><p>  #mount 192.168.1.132:/root/rootfs/ /tmp(本地測(cè)試)</p><p>  客戶端ifconfig eth0 192.168.

72、1.132.xxx(與服務(wù)器在同一網(wǎng)段):</p><p>  ping 192.168.1.132 –c 5(與服務(wù)器聯(lián)網(wǎng)通連測(cè)試)</p><p>  mount -o nolock 192.168.1.132:/root/rootfs /tmp</p><p>  第四章 U-boot的移植</p><p><b>  4

73、.1建立工作目錄</b></p><p>  下載源碼Uboot的源碼:u-boot-2009.11.tar.bz2</p><p>  #mkdir /root/build_uboot</p><p>  #cd /root/build_uboot</p><p>  把下載的源碼拷貝到該目錄,解壓;并把解壓后目錄更名為u-bo

74、ot。</p><p>  #tar jxvf u-boot-2009.11.tar.bz2</p><p>  #mv u-boot-2009.11 u-boot</p><p>  創(chuàng)建主代碼 復(fù)制board/samsung/smdk2410目錄為board/sansung/gec2440</p><p>  #cp –arf board

75、/samsung/smdk2410 board/samsung/gec2440/</p><p>  并修改目錄下的Makefile將COBJS:=smdk2410.o.flash.o修改為COBJS:=GEC2440.o.flash.o</p><p>  復(fù)制include/configs/smdk2410.h為include/configs/gec2440.h</p>

76、<p>  #cp include/configs/smdk2410.h include/configs/gec2440.h</p><p>  修改頂層Makefile:</p><p>  創(chuàng)建目標(biāo)板信息,在smdk2410_config:unconfig</p><p>  @$(MKCONFIG)$(@:_config=)arm arm920

77、t smdk2410 NULL s3c24x0后面添加gec2440_config:unconfig</p><p>  @$(MKCONFIG)$(@:_config=)amr amr920t gec2440 samsung s3c24x0</p><p>  修改Makefile規(guī)則,將_LIBS:=$(subst$(obj),,$(LIBS))$(subst$(obj),,$

78、(LIBBOARD))改為:</p><p>  _LIBS:=$(subst$(obj),,$(LIBBOARD))$(subst$(obj),,$(LIBS)</p><p><b>  4.2設(shè)置環(huán)境</b></p><p>  4.2.1stage1階段硬件初始化</p><p>  在include/conf

79、igs/gec2440.h頭文件中添加CONFIG_S3C2440宏。</p><p>  #define CONFIG_S3C2440 1</p><p><b>  4.2.2修改時(shí)鐘</b></p><p>  由于s3c2410與s3c2440的時(shí)鐘及Nand ,SDRAM等配置不同,故需要修改相關(guān)配置:</p><

80、;p>  (1)修改cpu/arm920t/start.S</p><p>  #if defined(CONFIG_S3C2400)||defined(CONFIG_S3C2410)||defined (CONFIG_S3C2440)</p><p>  #if defined(CONFIG_S3C2440) //添加中斷禁止部分</p><p>  1dr

81、 r1, =0x7fff</p><p>  1dr r0,=INTSUBMSK</p><p>  str r1,[r0]</p><p><b>  #endif</b></p><p>  #if defined (CONFIG_S3C2440)//添加時(shí)鐘部分</p><p>  #def

82、ined MLLCON 0x4C000004//系統(tǒng)主頻配置寄存器基地址</p><p>  #defined UPLLCON 0x4C000008//USB時(shí)鐘頻率配置寄存器基地址</p><p>  1dr r0, =CLKDIVN//設(shè)置分頻系數(shù)</p><p>  mov r1 ,#5</p><p>  str r1,[r0]<

83、;/p><p>  1dr r0,=MPLLCON</p><p>  1dr r1,=0x7F021</p><p>  str r1,[r0]</p><p>  1dr r0 ,=UPLLCON//設(shè)置USB時(shí)鐘頻率為48MHz</p><p>  1dr r1,=0x38022</p><p&g

84、t;  str r1,[r0]</p><p><b>  #else</b></p><p> ?。?)修改board/samsung/gec2440/gec2440.c,設(shè)置主頻和USB時(shí)鐘頻率參數(shù)與start.S中的一致</p><p>  #define FCLK_SPEED 2//設(shè)置默認(rèn)等于2,即下面代碼有效</p>

85、<p>  #elif FCLK_SPEED == 2</p><p>  #define M_MDIV 0x7F</p><p>  #define M_PDIV 0x2</p><p>  #define M_SDIV 0x1</p><p>  #define USB_CLOCK 2 //設(shè)置默認(rèn)等于2,即下面代碼有效&l

86、t;/p><p>  #elif USB_CLOCK == 2</p><p>  #define U_M_MDIV 0x38 </p><p>  #define U_M_PDIV 0x2</p><p>  #define U_M_SDIV 0x2</p><p>  (3)修改cpu/arm920t/s3c24x0/

87、speed.c</p><p>  static ulong get_PLLCLK(int pllreg){</p><p>  S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();</p><p>  ulong r, m, p, s;</p><p>

88、  if (pllreg == MPLL)</p><p>  r = clk_power->MPLLCON;</p><p>  else if (pllreg == UPLL)</p><p>  r = clk_power->UPLLCON;</p><p><b>  else</b></p&g

89、t;<p><b>  hang();</b></p><p>  m = ((r & 0xFF000) >> 12) + 8;</p><p>  p = ((r & 0x003F0) >> 4) + 2;</p><p>  s = r & 0x3;</p><

90、;p>  #if defined(CONFIG_S3C2440)</p><p>  if(pllreg == MPLL)</p><p>  { //參考S3C2440 芯片手冊(cè)上的公式:PLL=(2 * m * Fin)/(p * 2s)</p><p>  return((CONFIG_SYS_CLK_FREQ * m * 2) / (p <<

91、; s));</p><p><b>  }</b></p><p><b>  #endif</b></p><p>  return((CONFIG_SYS_CLK_FREQ * m) / (p << s));</p><p>  /* return HCLK frequency *

92、/</p><p>  ulong get_HCLK(void)</p><p><b>  {</b></p><p>  S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();</p><p>  #if defined(CONFI

93、G_S3C2440)</p><p>  return(get_FCLK()/4);</p><p><b>  #endif</b></p><p>  return((clk_power->CLKDIVN & 0x2) ? get_FCLK()/2 : get_FCLK());</p><p><

94、b>  }</b></p><p>  4.2.3重定位u-boot代碼</p><p> ?。?)在include/configs/gec2440.h 頭文件中定義Nand 要用到的宏和寄存器,在文件末尾加入以下Nand Flash 相關(guān)定義(在最后一句#endif /* __CONFIG_H */之前):</p><p>  /* Nand f

95、lash register and envionment variables*/</p><p>  #define CONFIG_S3C2440_NAND_BOOT 1</p><p>  #define NAND_CTL_BASE 0x4E000000</p><p>  #define STACK_BASE 0x33F00000</p><

96、p>  #define STACK_SIZE 0x8000</p><p>  #define oNFCONF 0x00</p><p>  #define oNFCONT 0x04</p><p>  #define oNFADDR 0x0c</p><p>  #define oNFDATA 0x10</p><

97、p>  #define oNFCMD 0x08</p><p>  #define oNFSTAT 0x20</p><p>  #define oNFECC 0x2c</p><p> ?。?)修改cpu/arm920t/start.S</p><p><b>  #if 0</b></p><

98、;p>  #ifndef CONFIG_SKIP_RELOCATE_UBOOT</p><p>  relocate: </p><p>  adr r0, _start </p><p>  ldr r1, _TEXT_BASE </p><p>  cmp r0, r1 </p><p>  beq stac

99、k_setup</p><p>  ldr r2, _armboot_start</p><p>  ldr r3, _bss_start</p><p>  sub r2, r3, r2</p><p>  add r2, r0, r2 </p><p>  ldmia r0!, {r3-r10} </p>

100、;<p>  stmia r1!, {r3-r10}</p><p>  cmp r0, r2 </p><p>  ble copy_loop</p><p><b>  #endif </b></p><p><b>  #endif</b></p><p>

101、;  添加u-boot從Nand Flash 啟動(dòng)</p><p>  #ifdef CONFIG_S3C2440_NAND_BOOT</p><p>  mov r1, #NAND_CTL_BASE //復(fù)位Nand Flash</p><p>  ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<&

102、lt;0) )</p><p>  str r2, [r1, #oNFCONF] //設(shè)置配置寄存器的初始值,參考s3c2440 手冊(cè)</p><p>  ldr r2, [r1, #oNFCONF]</p><p>  ldr r2, =( (1<<4)|(0<<1)|(1<<0) )</p><p> 

103、 str r2, [r1, #oNFCONT] //設(shè)置控制寄存器</p><p>  ldr r2, [r1, #oNFCONT]</p><p>  ldr r2, =(0x6) //RnB Clear</p><p>  str r2, [r1, #oNFSTAT]</p><p>  ldr r2, [r1, #oNFSTAT]<

104、;/p><p>  mov r2, #0xff //復(fù)位command</p><p>  strb r2, [r1, #oNFCMD]</p><p>  mov r3, #0 //等待</p><p><b>  nand1:</b></p><p>  add r3, r3, #0x1</

105、p><p>  cmp r3, #0xa</p><p><b>  blt nand1</b></p><p><b>  nand2:</b></p><p>  ldr r2, [r1, #oNFSTAT] //等待就緒</p><p>  tst r2, #0x4<

106、/p><p><b>  beq nand2</b></p><p>  ldr r2, [r1, #oNFCONT]</p><p>  orr r2, r2, #0x2 //取消片選</p><p>  str r2, [r1, #oNFCONT]</p><p>  //get read to

107、call C functions (for nand_read())</p><p>  ldr sp, DW_STACK_START //為C 代碼準(zhǔn)備堆棧,DW_STACK_START 定義在下面</p><p>  mov fp, #0 // no previous frame, so fp=0 R11 幀指針寄存器</p><p>  //copy U-Bo

108、ot to RAM</p><p>  ldr r0, =TEXT_BASE//傳遞給C 代碼的第一個(gè)參數(shù):u-boot 在RAM 中的起始地址</p><p>  mov r1, #0x0 //傳遞給C 代碼的第二個(gè)參數(shù):Nand Flash 的起始地址</p><p>  mov r2, #0x30000 //傳遞給C 代碼的第三個(gè)參數(shù):u-boot 的長(zhǎng)度大小

109、(128k)</p><p>  bl nand_read_ll//調(diào)用啟動(dòng)函數(shù)</p><p>  tst r0, #0x0</p><p>  beq ok_nand_read</p><p>  bad_nand_read:</p><p>  loop2: b loop2 //infinite loop<

110、/p><p>  ok_nand_read:</p><p>  //檢查搬移后的數(shù)據(jù),如果前4k 完全相同,表示搬移成功</p><p>  mov r0, #0</p><p>  ldr r1, =TEXT_BASE</p><p>  mov r2, #0x400</p><p><b

111、>  go_next:</b></p><p>  ldr r3, [r0], #4</p><p>  ldr r4, [r1], #4</p><p>  teq r3, r4</p><p>  bne notmatch</p><p>  subs r2, r2, #4</p>

112、<p>  beq stack_setup</p><p>  bne go_next</p><p><b>  notmatch:</b></p><p>  loop3: b loop3</p><p>  #endif //CONFIG_S3C2440_NAND_BOOT</p><

113、p>  _start_armboot: .word start_armboot //在這一句的下面加上DW_STACK_START 的定義。</p><p><b>  .align 2</b></p><p>  DW_STACK_START: .word STACK_BASE+STACK_SIZE-4</p><p> ?。?)在bo

114、ard/samsung/gec2440/目錄下新建一個(gè)nand_read.c 文件。</p><p>  在該文件中來(lái)實(shí)現(xiàn)上面匯編中要調(diào)用的nand_read_ll 函數(shù),代碼如下:</p><p>  #include <config.h></p><p>  #define NF_BASE 0x4E000000</p><p>

115、;  #define __REGb(x) (*(volatile unsigned char *)(x))</p><p>  #define __REGi(x) (*(volatile unsigned int *)(x))</p><p>  #define NFCONF __REGi(NF_BASE + 0x0 ) //通過(guò)偏移量還是得到配置寄存器基地址</p><

116、;p>  #define NFCONT __REGi(NF_BASE + 0x4 ) //通過(guò)偏移量得到控制寄存器基地址</p><p>  #define NFCMD __REGb(NF_BASE + 0x8 ) //通過(guò)偏移量得到指令寄存器基地址</p><p>  #define NFADDR __REGb(NF_BASE + 0xC ) //通過(guò)偏移量得到地址寄存器基地址&l

117、t;/p><p>  #define NFDATA __REGb(NF_BASE + 0x10) //通過(guò)偏移量得到數(shù)據(jù)寄存器基地址</p><p>  #define NFSTAT __REGb(NF_BASE + 0x20) //通過(guò)偏移量得到狀態(tài)寄存器基地址</p><p>  #define NAND_CHIP_ENABLE (NFCONT &= ~(1

118、<<1)) //Nand 片選使能</p><p>  #define NAND_CHIP_DISABLE (NFCONT |= (1<<1)) //取消Nand 片選</p><p>  #define NAND_CLEAR_RB (NFSTAT |= (1<<2))</p><p>  #define NAND_DETECT_

119、RB { while(! (NFSTAT&(1<<2)) );} //判斷是否就緒</p><p>  #define NAND_SECTOR_SIZE 512</p><p>  #define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)</p><p>  /* low level nand read fun

120、ction */</p><p>  int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)</p><p><b>  {</b></p><p><b>  int i, j;</b></p><p>  

121、if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK))</p><p><b>  {</b></p><p>  return -1; //地址或長(zhǎng)度不對(duì)齊</p><p><b>  }</b></p><p&g

122、t;  NAND_CHIP_ENABLE; //選中Nand 片選</p><p>  for(i=start_addr; i < (start_addr + size);)</p><p><b>  {</b></p><p>  //發(fā)出READ0 指令</p><p>  NAND_CLEAR_RB;<

溫馨提示

  • 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論