2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩47頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

3、方便,大量打印出來又非常浪費,如果用數碼相框直接插上相機的存儲卡展示照片,就非常酷了。數碼攝影必然推動數碼相框的發(fā)展,因為據調查全世界打印的數碼相片不到35%。</p><p><b>  二、系統(tǒng)開發(fā)目標</b></p><p>  根據實際應用的特點對產品進行完整的需求分析,形成比較完善的總體設計方案。同時,達到能具備Linux操作系統(tǒng)下簡單的設備驅動程序開發(fā)、圖

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

5、和處理當前數碼相機主要的圖像格式,能訪問主流的外部半導體存儲卡。</p><p> ?。?)穩(wěn)定可靠。作為消費類電子產品。必須通過比較嚴格的功能測試,以保證用戶在使用過程中,不會因為程序錯誤而喪失對產品的信心。</p><p><b>  三、所需環(huán)境及設備</b></p><p>  (1)以GEC2440開發(fā)板作為目標機,使用安裝了Wind

6、ows XP 的PC機作為宿主機,并在宿主機上安裝虛擬機軟件,虛擬機里安裝的是Red Hat EnterpriseLinux5作為開發(fā)環(huán)境。</p><p> ?。?)硬件部分:GEC2440模仿三星smdk2440,以ARM920T為內核,控制輔助設備?;径丝诎ㄒ蕴W接口,USB接口,還有兩個RS232的串口。A/D和D/A模塊主要用于現場數據的采集與控制信號的輸出。DC/DC模塊主要負責整個系統(tǒng)的供電。&

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

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

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

10、t;  bootloader的移植、linux內核配置移植、驅動移植、根文件系統(tǒng)制作、帶庫的根文件系統(tǒng)的制作及各階段的調試、QT界面的設計。</p><p> ?。?)運用QT 及網絡編程實現系統(tǒng)設計界面的可視化,及網絡的連接問題。</p><p> ?。?)對預期的目標功能,編寫代碼,調試仿真、運行。</p><p> ?。?)對應用程序開發(fā)的代碼編寫與調試運行。

11、</p><p><b>  六、調試分析及分工</b></p><p>  對開發(fā)過程中遇到的問題,時時記錄,分析解決,保證階段任務能夠順完成。張軍委完成環(huán)境的搭建、bootloader的燒寫,usb驅動的移植及調試。肖奇超完成內核的裁剪與移植、Qt應用程序的設計。</p><p><b>  測試記錄要細致。</b>&

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

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

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

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

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

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

18、根文件系統(tǒng),最后將基于qt設計的應用程序程植到開發(fā)板上,實現個人圖片的掌上管理。</p><p>  關鍵詞:嵌入式系統(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)境及設備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)平臺介紹:11</p><p>  2.3實現思路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交叉調試環(huán)境的搭建13</p><p>  3.4交叉服務器的搭建13</p><p>  3.5關于交叉調試

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

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

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

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

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

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

33、機上運行57</p><p>  8.3交叉編譯生成目標文件57</p><p>  第九章 結束語59</p><p><b>  致謝60</b></p><p><b>  參考文獻61</b></p><p><b>  附錄62</b&g

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

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

36、發(fā)展方向。目前,很多家庭都持有數碼相機,一次拍攝下來的照片往往會有上百張,使用PC機來查看拍攝下來的圖片,操作繁瑣,而且依賴于PC機。</p><p>  作為數碼相機的一種附屬產品,數碼相框不僅具有傳統(tǒng)相框的特點,而且可以直接從數碼相機中選擇心儀的照片,定時更新照片。數字相框可以擺放在家居顯眼之處,成為現代家庭一道靚麗的風景線。</p><p>  數碼相框是展示數碼照片而非紙質照片的相

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

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

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

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

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

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

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

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

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

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

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

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

49、;<b>  關于交叉工具鏈:</b></p><p>  它是交叉編譯環(huán)境所需工具的集合體,是所需軟件(binuntials、gcc與glibc等)的安裝載體,主要包括:交叉編譯器(arm-linux-gcc)、交叉匯編器(arm-linux-as)、交叉鏈接器(arm-linux-ld)、各種操作所依賴的庫及用于處理可執(zhí)行程序和庫的一些基本工具(如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>  安裝準備 #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>  在文件結尾添加 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交叉調試環(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>  (3)配置 </b></p><p>  #cd gdb-6.5</p><p>  #./configure --target=arm-linux --prefix=/usr/local/arm/4.1.2/</p><p>  此步遇到

55、的問題是:./configure—target =arm-linux沒有那個文件或目錄,是因為configure的權限問題,在運行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交叉服務器的搭建</p><p>  源碼包:gdb-6.5/gdb/gdbserver</p><p><b>  

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

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

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

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

61、)</p><p> ?。?)下載到目標板(將整個代碼目錄)</p><p>  #mkdir arm_debug </p><p>  #cd arm_debug //將目標程序放進arm_debug</p><p> ?。?)啟動調試服務器(目標板上進行)</p><p>  成功后便開始偵聽本地調試端口,可以看到

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是目標板的IP)</

63、p><p> ?。?)啟動交叉調試器(在宿主機上進行)</p><p>  #/root/test (一定要進去代碼目錄下)</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>  然后進行調試。</b></p><p>  3.6關于網絡掛載的配置</p><p>  使用NFS服務,將宿主機的一個目錄通過網絡可以掛載到其他計算機上,并作為它的一個目錄,在嵌入式開發(fā)中通過NFS可以很方便的將修改的文件通過NFS傳輸到開發(fā)板中去,不用以復的燒寫鏡像文件。</p><p>

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

67、  [共享的目錄][主機名或IP][參數1 參數2 ……]</p><p>  [共享的目錄][IP1(參數1,參數2)][IP2(參數3,參數4)]</p><p>  rw 對共享文件夾可讀可寫。</p><p>  sync 所有數據在請求時寫入共享。</p><p>  no_root_squash 使遠程用戶具備本地ro

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

69、實現對共享文件平的訪問,例如:</p><p>  mount 192.168.1.1:/home/nfs/tmp/test</p><p>  本地NFS服務器端通過讀取配置文件/etc/exprots決定對外所共享的文件目錄,在客戶端的終端中通過NFS方式掛載宿主機目錄,例如:</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>  宿主機#ifconfig eth0 192.168.1.132</p><p>  ping 192.168.1.1(ping網

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

72、1.132.xxx(與服務器在同一網段):</p><p>  ping 192.168.1.132 –c 5(與服務器聯(lián)網通連測試)</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)建主代碼 復制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>  復制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)建目標板信息,在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設置環(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修改時鐘</b></p><p>  由于s3c2410與s3c2440的時鐘及Nand ,SDRAM等配置不同,故需要修改相關配置:</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)//添加時鐘部分</p><p>  #def

82、ined MLLCON 0x4C000004//系統(tǒng)主頻配置寄存器基地址</p><p>  #defined UPLLCON 0x4C000008//USB時鐘頻率配置寄存器基地址</p><p>  1dr r0, =CLKDIVN//設置分頻系數</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//設置USB時鐘頻率為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,設置主頻和USB時鐘頻率參數與start.S中的一致</p><p>  #define FCLK_SPEED 2//設置默認等于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 //設置默認等于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 芯片手冊上的公式: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 相關定義(在最后一句#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 啟動</p><p>  #ifdef CONFIG_S3C2440_NAND_BOOT</p><p>  mov r1, #NAND_CTL_BASE //復位Nand Flash</p><p>  ldr r2, =( (7<<12)|(7<<8)|(7<<4)|(0<&

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

103、 str r2, [r1, #oNFCONT] //設置控制寄存器</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 //復位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 代碼準備堆棧,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 代碼的第一個參數:u-boot 在RAM 中的起始地址</p><p>  mov r1, #0x0 //傳遞給C 代碼的第二個參數:Nand Flash 的起始地址</p><p>  mov r2, #0x30000 //傳遞給C 代碼的第三個參數:u-boot 的長度大小

109、(128k)</p><p>  bl nand_read_ll//調用啟動函數</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>  //檢查搬移后的數據,如果前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/目錄下新建一個nand_read.c 文件。</p><p>  在該文件中來實現上面匯編中要調用的nand_read_ll 函數,代碼如下:</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 ) //通過偏移量還是得到配置寄存器基地址</p><

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

117、t;/p><p>  #define NFDATA __REGb(NF_BASE + 0x10) //通過偏移量得到數據寄存器基地址</p><p>  #define NFSTAT __REGb(NF_BASE + 0x20) //通過偏移量得到狀態(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; //地址或長度不對齊</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論