久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于嵌入式系統的圖形界面應用設計范文

時間:2019-05-12 06:55:50下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于嵌入式系統的圖形界面應用設計范文》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于嵌入式系統的圖形界面應用設計范文》。

第一篇:基于嵌入式系統的圖形界面應用設計范文

目錄 嵌入式系統概述...................................................................................................................4

1.1 嵌入式系統簡介.......................................................................................................4 1.2 嵌入式系統的組成...................................................................................................5 1.3 本課題的背景和意義...............................................................................................5 2 硬件平臺及ARM體系結構................................................................................................7

2.1 處理器選擇...............................................................................................................7 2.2 ARM體系結構............................................................................................................7 3 軟件平臺...............................................................................................................................9

3.1嵌入式操作系統選擇................................................................................................9 3.2 交叉編譯環境的建立.............................................................................................10 3.2.1 上位機的軟硬件配置.........................................................................................10 3.2.2 硬件連接與調試.............................................................................................11 3.2.3 配置TFTP及NFS服務...................................................................................13 3.2.4 安裝交叉編譯工具.........................................................................................15 4 移植 Bootloader.................................................................................................................16 4.1 Bootloader 概述.................................................................................................16 U-boot 簡介...................................................................................................................17 4.2.1 U-boot 的獲取.................................................................................................17 4.2.2 U-boot 目錄結構.............................................................................................17 U-boot 的啟動過程及工作原理...................................................................................18 4.3.1 啟動模式介紹...................................................................................................18 4.3.2 啟動階段1分析...............................................................................................19 4.3.3 啟動階段2分析...............................................................................................20 U-boot的移植過程........................................................................................................20 4.4.1 準備工作...........................................................................................................20 4.4.2 添加支持 NAND Flash 啟動功能...................................................................21 4.4.3 添加 NAND Flash 讀寫功能.......................................................................22 4.4.4 修改 U-boot環境變量保存方式....................................................................22 4.4.5 加入 NAND Flash 閃存型號支持...............................................................23 4.5 U-boot 的燒寫及測試.........................................................................................23 4.6 設置U-boot環境變量..................................................................................................24 5 Linux 內核的移植.............................................................................................................25 Linux 內核的結構.........................................................................................................25 Linux 啟動過程簡析.....................................................................................................26 Linux內核的移植過程..................................................................................................26 5.3.1 選擇參考板.......................................................................................................26 5.3.2 修改 NAND Flash 分區信息...........................................................................26 5.3.3 關閉 ECC 校驗.................................................................................................27 5.4 CS8900a網卡的移植過程....................................................................................28 5.4.1 修改硬件地址映射...........................................................................................28 5.4.2 添加 CS8900A 內核編譯項.............................................................................28 5.5 Linux 內核的剪裁配置.......................................................................................29 5.5.1 使用配置菜單...........................................................................................................29 5.5.2 基本配置選項...................................................................................................30 5.5.3 驅動程序配置選項...................................................................................................31 5.5.4 保存配置文件...................................................................................................31 5.5.5 編譯 Linux 內核.............................................................................................31 5.6 內核的下載及啟動...............................................................................................32 5.6.1 將引導信息加入內核映像...............................................................................32 5.6.2 內核映像的下載及運行...................................................................................32 6 建立根文件系統.................................................................................................................33 6.1 根文件系統概述...................................................................................................33 6.1.1 根文件系統簡介...........................................................................................33 6.1.2 NFS 文件系統與Cramfs文件系統...................................................................33 6.2 建立Linux根文件系統目錄...............................................................................33 7 心得體會.............................................................................................................................34 基于嵌入式系統的圖形界面應用設計 嵌入式系統概述

1.1 嵌入式系統簡介

嵌入式系統是一種以應用為目的,軟硬件可裁減,適應應用系統對功能、成本、體積、功耗嚴格要求的專用計算機系統。隨著計算機的發展和應用的普及,嵌入式系統取得了迅猛的發展,嵌入式產品已經滲透到社會經濟、軍事、交通、通信等相關行業,而且深入到家電、娛樂等各個領域,掀起了一場數字化革命。嵌入式圖形用戶界面系統是嵌入式系統的一個重要組成部分,它將極大的促進嵌入式技術的發展和應用。

嵌入式系統是當前最熱門、最有發展前途的IT應用技術之一。一方面,嵌入式系統廣泛的應用于智能家電、手持終端、工業控制等專用設備上,通常這些設備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應要求很高;另一方面,隨著計算機技術的發展,越來越多的嵌入式系統設備需要良好的人機交互界面,這需要一個高性能、高可靠、占用系統資源少的用戶圖形界面的支持。為了適應嵌入式設備對人機交互界面的要求,本論文對基于嵌入式Linux圖形用戶界面的設計實現進行了研究。

一方面,嵌入式硬件性能不斷提升,使得嵌入式設備上運行精美的圖形用戶界面成為可能;另一方面,嵌入式手持式消費電子產品的普及,例如PDA(個人數字助理)、智能手機、PMP(便攜式多媒體播放器),一個完善的嵌入式圖形用戶界面成為不可缺少的組成部分,嵌入式GUI(圖形用戶界面:Graphical User Interface)為嵌入式系統提供了一種應用于特殊場合的人機交互接口。

縱觀國際相關產業在圖形用戶界面方面的發展現狀,許多國際知名公司早已認識到GUI在嵌入式產品方面產生的強大增值功能,以及帶動的巨大市場價值,因此在公司內部成立了專門從事GUI研究與設計的部門。

圖形用戶界面(GUI)是一種結合計算機科學、美學、心理學、行為學,以及商業領域需求分析的人機系統工程。這種面向用戶的系統工程設計目的是優化產品性能,使操作更人性化,減輕使用者的認知負擔,使其更適合用戶的操作需要,直接提升產品的市場競爭力。

圖形用戶界面的廣泛流行是當今計算機技術的重大成就之一,它極大的方便了非專業用戶的使用,可以通過窗口、菜單方便的進行操作。一個圖形用戶界面通常由三個基本層次組成,也就是顯示模型、窗口模型和用戶模型。用戶模型包含了顯示和交互的主要特征,因此用戶圖形界面有時也僅指用戶模型。

然而,對于嵌入式系統來說,由于其固有的體積、功耗以及價格的限制,使得傳統的圖形用戶界面并不能直接應用于嵌入式系統[41,在嵌入式系統上實現GUI是一個具有挑戰性的課題。總的來說,嵌入式GUI要求簡單、直觀、可靠、占用資源小且反應速度快,以適應系統硬件資源有限的條件嘲。另外,由于嵌入式系統硬件本身的特殊性,嵌入式GUI應具備高度可移植性與可裁減性,以適應不同的硬件條件和使用需求。具體的嵌入式GUI一般具備如下特點: 1.體積小

2.運行時耗用系統資源小

3.上層接口與硬件無關,高度可移植 4.高可靠性

5.在某些應用場合應具備實時性

目前,嵌入式GUI的開發正處于起步階段,有許多技術難題尚待解決,因此對嵌入式圖形系統的研究成為嵌入式系統研究及發展中的一個重要內容。

可以預見,隨著電子、計算機等行業的高速發展,嵌入式系統將以它專用化,效率高的特性深入實際應用的各個領域,因而開發與改進嵌入式圖形用戶界面有著長遠的意義。

1.2 嵌入式系統的組成

嵌入式系統一般可以分為四個部分:嵌入式處理器、嵌入式外圍設備、嵌入式操作系統和嵌入式應用軟件,如圖1-1所示。

圖1-1 嵌入式系統的組成

1.3 本課題的背景和意義

嵌入式導航計算機是飛機,車輛,導彈和船舶等運載體上的重要設備,主要任務是按照原定的計劃和任務,以要求的精度,在一定時間內將載體引 導至目的地。嵌入式導航計算機主要分為兩部分:硬件電路,嵌入式操作系 統。本課題的目的就是針對其硬件環境,搭建起一個高效、穩定的嵌入式操 作系統的平臺。它具有通用操作系統的基本特點,能夠有效管理復雜的系統 資源;能夠快速的處理大量的信息;能夠提供庫函數、驅動程序、工具集以 及部分應用程序。在這個系統平臺上可以運行導航程序,接受傳感器的數據 經處理后得到任務所需要的信息,從而實施導航任務。

嵌入式Linux有著嵌入式導航計算機操作系統需要的很多特色:支持多 任務處理、中斷處理及任務間通信,性能穩定,剪裁性好,開發與使用都很 方便。因此,本設計選用嵌入式Linux作為嵌入式導航計算機的操作系統,這對于實現導航計算機的高效率、低功耗具有現實意義。

圖1-2 嵌入式導航計算機硬件平臺結構圖

1.4 本課題的主要工作和研究內容

本課題的最重目標是為嵌入式導航計算機移植Linux操作系統。通過參 閱大量文獻,學習嵌入式Linux系統和 ARM 體系微處理芯片S3C2410的相 關知識,研究啟動下載程序 Bootloader 和 Linux內核的基本工作原理,并且 搭建交叉編譯平臺,重點是移植Bootloader和內核,以及制作根文件系統。具體工作內容包括:

(1)學習Linux操作系統的知識。

(2)了解 ARM的體系結構和S3C2410芯片硬件結構。(3)完成交叉編譯環境的建立。(4)修改并移植U-boot 1.2.0。

(5)修改和裁剪Linux 2.6.24.4內核,移植網卡驅動程序。(6)制作根文件系統。(7)編寫應用程序進行測試。

(8)將內核和根文件系統部署到開發板。2 硬件平臺及ARM體系結構

2.1 處理器選擇

本設計的處理器選擇高性能、低功耗的ARM9微處理器Samsung S3c2410。S3c2410 是著名半導體公司 Samsung 推出的一款 32 位 RISC 處理器。S3c2410的內核基于 ARM920T,帶有MMU功能,主頻高達203MHz,可以支持 Linux、WinCE 等主流嵌入式操作系統。同時它還采用了一種叫做Advanced Microcontroller Bus Architecture(AMBA)的新型總線結構。

此外S3c2410還集成了以下片上功能:

(1)16KB指令 Cache和16KB的數據Cache;(2)LCD控制器(支持STN和TFT);

(3)4通道DMA;

(4)3通道UART;

(5)2通道USB;

(6)4路PWM和 1個內部時鐘控制器;

(7)117個通用IO,24路外部中斷;

(8)16位看門狗定時器;(9)RTC(實時時鐘);

(10)1通道IIC/IIS控制器;

(11)NAND Flash控制器;

(12)PLL數字鎖相環。

S3c2410 將系統的存儲空間分為 8 組(bank),每組大小是 128MB,共1GB。Bank0 到 Bank6 都采用固定 Bank 起始尋址,用于 ROM 或 SRAM。Bank7具有可編程的 Bank的起始地址和大小,用于ROM、RAM或SDRAM。S3c2410還支持從NAND Flash啟動,NAND Flash具有容量大、比NOR Flash價格低等特點。系統采用NAND Flash與SDRAM相結合的方式,可以獲得非常高的性價比。

2.2 ARM體系結構

ARM微處理器基本架構:

ARM9微處理器采用RISC體系結構:優先選取使用頻最高的簡單指令,避免復雜指令

RISC體系結構應具有如下特點:

1.采用固定長度的指令格式,指令歸整、簡單、基本尋址方式有2~3種。2.使用單周期指令,便于流水線操作執行。3.大量使用寄存器,數據處理指令只對寄存器進行操作,只有加載/ 存儲指令可以訪問存儲器,以提高指令的執行效率。

4.除此以外,ARM體系結構還采用了一些特別的技術,在保證高性能的前提下盡量縮小芯片的面積,并降低功耗:

5.所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率。

6.可用加載/存儲指令批量傳輸數據,以提高數據的傳輸效率。7.可在一條數據處理指令中同時完成邏輯處理和移位處理。8.在循環處理中使用地址的自動增減來提高運行效率。ARM微處理器的寄存器結構:

1.ARM處理器共有37個寄存器,被分為若干個組(BANK),這些寄存器包括:

2.31個通用寄存器,包括程序計數器(PC指針),均為32位的寄存器。3.6個狀態寄存器,用以標識CPU的工作狀態及程序的運行狀態,均為32位,目前只使用了其中的一部分。

4.同時,ARM處理器又有7種不同的處理器模式,在每一種處理器模式下均有一組相應的寄存器與 之對應。即在任意一種處理器模式下,可訪問的寄存器包括15個通用寄存器(R0~R14)、一至二個狀態寄存器和程序計數器。在所有的寄存器中,有些是在 7種處理器模式下共用的同一個物理寄存器,而有些寄存器則是在不同的處理器模式下有不同的物理寄存器。

ARM微處理器的指令結構:

ARM微處理器的在較新的體系結構中支持兩種指令集:ARM指令集和Thumb指令集。其 中,ARM指令為32位的長度,Thumb指令為16位長度。Thumb指令集為ARM指令集的功能子集,但與等價的ARM代碼相比較,可節省30% ~40%以上的存儲空間,同時具備32位代碼的所有優點。

ARM9系列微處理器具有以下特點: 1.5級整數流水線,指令執行效率更高。2.提供1.1MIPS/MHz的哈佛結構。

3.支持32位ARM指令集和16位Thumb指令集。4.支持32位的高速AMBA總線接口。

5.全性能的MMU,支持Windows CE、Linux、Palm OS等多種主流嵌入式操作系統。

6.MPU支持實時操作系統。

7.支持數據Cache和指令Cache,具有更高的指令和數據處理能力。大小都為16K。8.ARM9系列微處理器主要應用于無線設備、儀器儀表、安全系統、機頂盒、高端打印機、數字照相機和數字攝像機等。

9.ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三種類型,以適用于不同的應用場合。軟件平臺

3.1嵌入式操作系統選擇

本設計的嵌入式操作系統選擇嵌入式Linux操作系統。

嵌入式操作系統是一種支持嵌入式系統應用的操作系統軟件,它是嵌入式系統(包括硬、軟件系統)極為重要的組成部分,通常包括與硬件相關的底層驅動軟件、系統內核、設備驅動接口、通信協議、圖形界面、標準化瀏覽器等Browser。

一般情況下,嵌入式操作系統可以分為兩類,一類是面向控制、通信等領域的實時操作系統,如 WindRiver 公司的 VxWorks、ISI 的 pSOS、QNX系統軟件公司的QNX、ATI的 Nucleus等;另一類是面向消費電子產品的非實時操作系統,這類產品包括個人數字助理(PDA)、移動電話、機頂盒等。嵌入式 Linux 操作系統

Linux 的嵌入式改造主要圍繞體積和實時性展開,目前已經有很多公司在進行這方面的工作,其中包括 RT-Linux,uClinux,Embedix,Xlinux,MidoriLinux和紅旗嵌入式 Linux等等。

與目前市場上的眾多商業的實時系統相比,嵌入式Linux除具有內核穩定,功能強大,支持多種硬件平臺,兼容性好的優勢外,還擁有以下的特點:(1)完全開放源代碼

嵌入式 Linux完全開放其源代碼,這使得修改,裁剪 Linux成為可能,開發者可以根據實際需要優化操作系統代碼,降低整個系統的開銷與能耗。(2)成本低

GPL協議保證了源自Linux的嵌入式Linux也是開放源代碼的自由軟件。而大多數嵌入式Linux使用的開發工具也是遵守GPL協議的,同樣也可以免費獲得。

(3)豐富的實用軟件支持

Linux 提供了大量的實用程序和各種應用軟件。這些軟件的正確性和有效性都經過了實際檢驗,可以根據需要合理利用他們迅速構建嵌入式應用的軟件環境。這樣可以極大地減小嵌入式軟件開發的時間和費用,提高系統可靠性。而商用的實時操作系統也試圖提供各種常用軟件工具包,但其數量是無法和Linux操作系統匹敵的。由此可見,選擇嵌入式Linux操作系統,就有了豐富的資源保障,在節省成本的同時,提高了開發效率。

3.2 交叉編譯環境的建立

采用交叉開發環境(Cross Development Environment)是嵌入式應用軟

件開發時的一個顯著特點,通常在通用計算機上編寫程序,然后通過交叉編 譯生成目標平臺上可運行的二進制代碼格式,最后再下載到目標平臺上的特 定位置運行,交叉開發環境是指編譯、鏈接和調試嵌入式應用軟件的環境,它與運行嵌入式應用軟件的環境有所不同,通常采用主機/目標及模式。交叉開發模型如圖2-1所示:

圖3-1 交叉開發模型

3.2.1 上位機的軟硬件配置

硬件:

本課題用到一臺通用PC機和一臺筆記本電腦,其硬件配置如下:

PC機:

CPU:P IV 2.0G RAM:256MB 串口:RS-232 并口:25針母頭 筆記本電腦: CPU:PM 705 RAM:768MB 網卡:10/100MBps自適應網卡 軟件:

PC機的操作系統為Windows XP,裝有DNW串口調試工具以及SJF2410 三星Flash燒寫工具。前者用于串口調試,后者用于燒寫Bootloader。

筆記本電腦的操作系統為 Ubuntu7.10,裝有 GCC 等編譯工具以及arm-linux-gcc交叉編譯工具,并開啟TFTP和 NFS服務。用于 Linux內核編 譯和軟件開發,并作為TFTP服務器和NFS主機。其中,Ubuntu7.10 是 Linux 的桌面發行版之一,是當今最為流行的桌面Linux 系統。使用 Linux 操作系統及其自帶的工具,是目前最權威的嵌入式Linux系統開發方式,但是許多操作都是基于命令行的,所以需要扎實的Linux基礎知識。

在 Ubuntu 中建立 arm用戶,專門用于 ARM 開發。在 home 目錄中建立下列幾個子目錄:

Boot:用于存放bootloader相關程序。Kernel:用于存放 Linux內核源碼。FS:用于存放根文件系統相關的程序。Program:用于存放用戶程序。

3.2.2 硬件連接與調試

硬件連接方式:

圖3-2 硬件連接圖

(1)開發板串口UART0通過交叉串口線與PC主機的 COM1口相連。

(2)開發板的JTAG口通過20PIN排線與SUPER JTAG調試頭相連,再通過25PIN并口線連接到主機的LPT1口。

(3)開發板的網卡接口通過以太網線連接到路由器的LAN1口。

(4)筆記本的網卡接口通過以太網線連接到路由器的LAN2口。

(5)路由器的 WAN口連接到INTERNET。串口調試:

在本課題嵌入式系統中的目標開發板,采用串口調試的方法,即把串口當作目標開發板的顯示終端,無論是打印輸出,還是管理配置輸入,都使用串口,這就需要主機系統裝有串口調試工具。PC機中安裝有DNW串口調試工具,在使用DNW之前,應當對PC機的串口進行設置。方法如下:

(1)XP系統中,右鍵單擊“我的電腦”,選擇“屬性”。

(2)選擇“硬件”——“設備管理器。

(3)選擇“端口”——“串口(COM1)”,打開的對話框按圖2-3設置。

圖3-3 串口屬性設置

運行 DNW 工具,選擇菜單“Configuration”——“Options”,按圖 2-4所示進行設置。

圖 3-4

DNW 設置

每次使用DNW之前,應當設置DNW連接到串口。點擊菜單中的 “Serial Port”——“Connect”,當DNW的標題欄出現[COM1,115200bps]的提示后,表明已經連接好,此時才可以使用DNW工具。

3.2.3 配置TFTP及NFS服務

TFTP 服務簡介:

TFTP(Trivial File Transfer Protocol)協議即簡單文件傳輸協議,是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,提供不復雜、開銷不大的文件傳輸服務。TFTP承載在UDP上,提供不可靠的數據流傳輸服務,不提供存取授權與認證機制,使用超時重傳方式來保證數據的到達。

TFTP 服務在 Linux 系統中有客戶端和服務器兩個軟件包。配置 TFTP服務,必須都安裝好。

TFTP 服務安裝與配置:

(1)Ubuntu中安裝tftp工具只需在終端中鍵入命令: $ sudo apt-get install tftp tftpd 其中,前者是客戶端,后者是服務器。

(2)Ubuntu是debian類的系統,默認是沒有安裝 inetd的,安裝命令如下: $ sudo apt-get install netkit-inetd(3)在home目錄里建立tftpboot 文件夾,命令如下: $ cd ~ $ sudo mkdir tftpboot $ sudo chmod 777 tftpboot 其中,參數 777 的意義是:根管理員、組和其他用戶對 tftpboot 文件夾 的權限均為“可讀、可寫、可以執行”(4)修改/etc/inetd.conf,添加如下語句:

tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /home/arm/tftpboot 目的是指定 tftp 服務的根目錄為/home/arm/tftpboot,修改/etc/inetd.conf 文件后應當重啟 inted進程,命令如下: $ sudo /etc/init.d/inetd reload(5)重啟 inted 進程后,配置即可生效,在 tftpboot 中建立文件 test 后,用

下列命令可以進行測試: $ cd ~ $ tftp 127.0.0.1 Tftp> get test 若可下載test 文件,則證明TFTP服務配置正確。NFS 服務簡介:

NFS 就是 Network File System 的縮寫,最早之前是由 Sun 這家公司所開發的。最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案(share files)。所以,可以簡單的將它看做是一個文件服務器(file server)。通過 NFS 服務器可以讓開發板將網絡遠端的 NFS 主機分享的目錄,掛載到開發板當中,在開發板看起來,那個遠端主機的目錄就好像是自己的根目錄一樣,可以方便的進行開發調試。NFS 服務安裝與配置:

(1)Ubuntu上默認是沒有安裝NFS服務器的,首先要安裝NFS服務程序: $ sudo apt-get install nfs-kernel-server 在安裝nfs-kernel-server時,apt 會自動安裝nfs-common和portmap。這樣,宿主機就相當于NFS Server。(2)配置/etc/exports:

NFS 掛載目錄及權限由/etc/exports 文件定義。本課題要將 home 目錄中 的/home/zp/share 目錄讓 192.168.0.*的 IP 共享, 則在該文件末尾添加下列語句:

/home/arm/FS/myrootfs 192.168.0.2/10(rw,sync,no_root_squash)配置參數說明: rw:具有可擦寫的權限。

sync:文件同步寫入到內存和硬盤當中。

no_root_squash:若登陸共享目錄的使用者是 root 的話,則他的權限將被限 制為匿名使用者,通常他的UID和GID都會變為nobody。(3)本地測試NFS:

輸入以下命令可以將NFS根目錄掛載到本地的/mnt 目錄中: $ sudo mount 192.168.0.2:/home/arm/FS/myroot /mnt 此時/mnt 中的內容應當與NFS根目錄中的內容一致。

3.2.4 安裝交叉編譯工具

交叉編譯簡介:

所謂交叉編譯,簡單的說,就是在一個平臺上生成另一個平臺上的可執行代碼,比如在 PC平臺上(X86 CPU)編譯出能運行在以 ARM 為內核的CPU平臺上的程序,一般選擇GNU開發工具 gcc。GNU的開發工具都是免費的,遵循 GPL協議,任何人可以從網上獲取。GNU 提供的編譯工具包括匯編器as、c編譯器gcc、c++編譯器g++、連接器ld和二進制轉換工具objcopy。出于兼容性和穩定性考慮,本課題選擇目前比較穩定的版本 Cross-3.3.2 和Cross-3.4.1。

交叉編譯器的安裝及配置:

(1)獲取arm-linux交叉編譯工具:

登陸arm-linux項目組的FTP服務器:

ftp.arm.linux.org.uk/pub/armlinux/toolchain/

下載cross-3.3.2.tar.bz2和cross-3.4.1.tar.bz2。

(2)通過下列命令可以安裝arm-linux交叉編譯工具:

$ cp cross-3.4.1.tar.bz2 /

$ cd /

$ tar jxvf cross-3.4.1.tar.bz2

這樣,交叉編譯工具就被安裝到了/usr/local/arm/3.4.1中。用同樣的方法 可以安裝cross-3.3.2版的交叉編譯工具。

(3)設置環境變量:

修改home目錄下的profile文件,加入如下代碼,指明交叉編譯工具的 目錄。

# User specific environment and startup programs

export TARGET=arm-linux

export PRJROOT=/home/arm

export

PATH=$PATH:$HOME/bin:$PREFIX/bin:/usr/local/arm/3.4.1/bin:/sbin:/usr/ sbin:/usr/local/sbin

測試交叉編譯器:

可以通過一個簡單的程序測試安裝好的交叉編譯工具,看其能否正常工作。編寫一個 hello.c源文件,通過以下命令進行編譯,編譯后生成名為Hello的可執行文件,通過 file 命令可以查看文件的類型。當顯示以下信息是表明交叉編譯工具正常安裝了,通過編譯生成了ARM體系可執行的文件。注意,通過該交叉編譯器編譯的可執行文件只能在 ARM 體系下執行,不能在基于X86的普通PC上執行。

$ arm-linux-gcc –o Hello hello.c

$ file Hello

Hello:ELF 32-bit LSB executable ,ARM, version 1(ARM), for GNU/Linux 2.4.3, dynamically linked(uses shared libs), not stripped 4 移植 Bootloader 4.1 Bootloader 概述

簡單地說,Bootloader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核準備好正確的環境。

通常,Bootloader是嚴重地依賴于硬件而實現的,特別是在嵌入式世界。因此,在嵌入式世界里建立一個通用的Bootloader幾乎是不可能的,不同處理器構架都有不同的 Bootloader。Bootloader 不但依賴于 CPU 的體系結構,而且依賴于嵌入式板級設備的配置。對于不同的嵌入式板而言,即使它們使用同一種處理器,要想讓運行在一塊板子上的Bootloader運行在另一塊板子上,一般也要修改其源代碼。

目前常用的Bootloader程序有以下幾種: U-boot、VIVI、Blob和RedBoot。其中,U-boot 功能豐富,且對于ARM體系支持良好,事實上,它已成為ARM平臺上標準Bootloader。因此,本課題選用U-boot 作為移植對象。U-boot 簡介

U-boot 是德國 DENX 小組的開發用于多種嵌入式 CPU 的 Bootloader 程序,U-boot 不僅僅支持嵌入式Linux系統的引導,還支NetBSD,VxWorks,QNX,ARTOS,LynxOS 等嵌入式操作系統。U-boot 除了支持 ARM 系列的處理器外,還能支持 MIPS、x86、PowerPC、NIOS、XScale 等諸多常用系列的處理器。

4.2.1 U-boot 的獲取

U-boot 的源碼可以從sourceforge網站下載,網址為:

http://sourceforge.net/project/u-boot。

下載的文件為u-boot-1.2.0.tar.bz2,用以下命令將其解壓。

$ tar jcvf u-boot-1.2.0.tar.bz2 /home/arm/boot/ 4.2.2 U-boot 目錄結構

解壓后,在 U-boot 頂層目錄下有 18 個子目錄,分別存放和管理不同的源碼。這些目錄中所要存放的文件有其規則,可以分為3類,如表3-1所示:

第一類目錄與處理器體系結構或開發板硬件直接相關。第二類目錄是一些通用的函數或者驅動程序。第三類目錄是U-boot 的應用程序、工具或者文檔。

表4-1 U-boot頂層目錄下部分目錄的存放規則 U-boot 的啟動過程及工作原理

4.3.1 啟動模式介紹

Bootloader 都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式,這種區別僅對于開發人員才有意義。但從最終用戶的角度看,Boot Loader 的作用就是用來加載操作系統,而并不存在所謂的啟動加載模式與下載工作模式的區別。

啟動加載(Bootloading)模式:這種模式也稱為“自主”(Autonomous)模式。也即 Bootloader 從目標機上的某個固態存儲設備上將操作系統加載 到 RAM中運行,整個過程并沒有用戶的介入。這種模式是 Boot Loader 的

正常工作模式,因此在嵌入式產品發布的時侯,Bootloader 顯然必須工作在這種模式下。

下載(Downloading)模式:在這種模式下,目標機上的 Boot Loader 將通過串口連接或網絡連接等通信手段從主機(Host)下載文件,比如:下載內核映像和根文件系統映像等。從主機下載的文件通常首先被 Bootloader保存到目標機的 RAM 中,然后再被 Bootloader 寫到目標機上的 FLASH 類固態存儲設備中。Bootloader 的這種模式通常在第一次安裝內核與根文件系統時被使用; 此外,以后的系統更新也會使Bootloader的這種工作模式。工作于這種模式下的 Bootloader 通常都會向它的終端用戶提供一個簡單的命令行接口。

U-boot 這樣功能強大的Bootloader 同時支持這兩種工作模式,而且允許用戶在這兩種工作模式之間進行切換。

大多數Bootloader都分為階段1(stage1)和階段2(stage2)兩大部分,U-boot也不例外。依賴于CPU體系結構的代碼(如CPU初始化代碼等)通常都放在階段1中且通常用匯編語言實現,而階段 2 則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。

圖 4-1 U-boot啟動代碼流程圖

4.3.2 啟動階段1分析

如果 S3C2410 被配置成從 NAND 閃存啟動,上電后,S3C2410 的 NAND 閃存控制器會自動把 NAND 閃存中的前 4K 數據搬移到內部 RAM中,并把 0x00000000 設置為內部 RAM 的起始地址,CPU 從內部 RAM 的0x00000000 位置開始啟動。因此要把最核心的啟動程序放在 NAND 閃存的前4K中。由于NAND閃存控制器從NAND閃存中搬移到內部RAM的代碼是有限的,所以,在啟動代碼的前 4K里,必須完成 S3C2410 的核心配置,并把啟動代碼的剩余部分搬到 RAM 中運行。這前4K完成的主要工作就是 U-boot 啟動的第一個階段(stage1)。

U-boot 的stage1代碼通常放在start.s文件中,它用匯編語言寫成。此階段要完成的主要工作如下:

(1)設置異常向量,當發生異常時,執行 cpu/arm920t/interrupts.c 中定義的中斷處理函數。

(2)設置CPU的模式為SVC(管理模式,操作系統使用的保護模式)(3)關閉看門狗。(4)禁掉所有中斷。

(5)設置 cpu 頻率,默認頻率比為 FCLK:HCLK:PCLK = 1:2:4,默認FCLK的值為120 Mhz,該值為S3C2410手冊的推薦值。(6)調用cpu初始化函數cpu_init_crit。其中一個功能是設置CP15寄存 器,失效指令(I)Cache和數據(D)Cache后,禁止MMU與 Cache。(7)重定向,將 NAND Flash代碼復制到 RAM,其中有以下兩個個步 驟:

(a)通過copy_myself子程序,把數據從Nand Flash中拷貝到RAM。

(b)配置棧空間,配置代碼段的開始地址、動態內存區長度、全局數據 大小以及分配IRQ 和FRQ的棧空間。

(8)BSS(Block Started by Symbol)段清零。(9)進入C代碼:

ldr pc, _start_armboot _start_armboot:.word start_armboot 其中 start_armboot 是 U-boot 運行的第一個 C 程序,在 lib_arm/board.c 文件中定義。隨后進入第二階段。

4.3.3 啟動階段2分析

lib_arm/board.c 中的 start armboot 是 C 語言開始的函數,也是整個啟動代碼中C語言的主函數,同時還是整個 U-boot(armboot)的主函數,該函數主要完成如下操作:(1)定義初始化函數表。

(2)NAND Flash初始化,利用 nand_init()函數實現。(3)環境變量初始化,利用env_relocate()函數實現。(4)外圍設備初始化,利用 devices_init()函數實現。(5)使能中斷,利用enable_interrupts()函數實現。(6)初始化網絡設備。

(7)進入U-boot 的命令循環,接受用戶輸入的命令,執行相應的工作。

U-boot的移植過程

移植U-boot 的主要工作就是添加開發板硬件相關的文件、配置選項,然后進行編譯。

4.4.1 準備工作

(1)建立開發板編譯項,在頂層Makefile中加入如下兩行: LJD2410_config : unconfig @$(MKCONFIG)$(@:_config=)arm arm920t LJD2410 NULL s3c24x0 各項意義如下:

arm:CPU 的架構(ARCH)arm920t:CPU 的類型(CPU),其對應于 cpu/arm920t 子目錄。LJD2410:開發板的型號(BOARD),對應于 board/crane2410 目錄。NULL:開發者/或經銷商(vender)。s3c24x0:片上系統(SOC)。

(2)在 board 子目錄中建立 LJD2410開發板目錄: $ cp rf board/smdk2410 board/LJD2410 $ cd board/LJD2410 $ mv smdk2410.c LJD2410.c(3)在 include/configs/中建立配置頭文件:

$ cp include/configs/smdk2410.h include/configs/LJD2410.h(4)測試編譯能否成功: $ make distclean $ make LJD2410_config $ make CROSS_COMPILE=arm-linux-如果編譯成功,證明已經建立好了LJD2410的編譯項,但是還要進行進一步的修改,因為現在的代碼是完全拷貝 smdk2410 開發板的,還不能工作在LJD2410板上。接下來要按照 LJD2410板的硬件配置來進一步移植。(5)調整SDRAM的刷新率,修改 lowlevel_init.S: #define REFCNT 1268 在smdk2410.c中調整 HCLK為 100MHz: /*Fout = 200MHz */ #define M_MDIV 0x5C #define M_PDIV 0x4 #define M_SDIV 0x0 4.4.2 添加支持 NAND Flash 啟動功能

由于U-boot 不支持從NAND Flash啟動,所以將程序復制到RAM里面去需要新加代碼實現,一般通過 copy_myself 函數實現。這可以參考 VIVI的copy_muself代碼將其添加到Start.S中,詳見附錄 A-1。

在Start.S中調用了nand_reak_ll函數,該函數用于NAND Flash讀操作,在U-boot 中沒有定義,需要新加代碼實現,該函數的實現可以參考VIVI源代碼。將VIVI/s3c2410/nand_read.c 復制到LJD2410目錄內即可。

由于使用了新的 Flash 讀函數,在編譯時需要重新鏈接,修改 LJD2410目錄中的Makefile文件,將原先的OBJS := myboard.o flash.o 改為:OBJS := myboard.o nand_read.o。

S3c2410處理器帶有NAND Flash控制器,但是U-boot 沒有定義其寄存器地址,修改 include/s3c2410.h文件,加入如下代碼: #define oNFCONF 0x00 #define oNFCMD 0x04 #define oNFADDR 0x08 #define oNFDATA 0x0C #define oNFSTAT 0x10 #define oNFECC 0x14 4.4.3 添加 NAND Flash 讀寫功能

U-boot 運行至第二階段進入 start_armboot()函數。其中 nand_init()函數是對 NAND Flash 的最初初始化函數。其調用與CFG_NAND_LEGACY 宏有關,如果沒定義

CFG_NAND_LEGACY 這個宏,就按照 start_armboot()調用 drivers/nand/nand.c 中的 nand_init 函數(該函數在 1.2.0 已經被實現)默認規定,但還有個 board_nand_init()函數沒實現,需自己添加。如果定義CFG_NAND_LEGACY,就不使用默認的nand_init,而調用自己寫的nand_init函數了,本課題選擇第二種方式。

在/drivers/nand_legacy/nand_legacy.c 中添加 NAND Flash 初始化函數nand_init,詳見附錄 A-2。

可以看到 nand_init()調用 NF_Init()函數,使能 NAND Flash 控制器和 NAND Flash;調用 NF_Reset()函數置位,NF_WaitRB()查詢 NAND Flash 的狀態,最后再調用 nand_probe((ulong)nand)函數探測 NAND Flash。

在 include/configs/smdk2410.h 文件的后半部原先有 Flash 的參數,刪除它,并加入NAND Flash的參數,并且開啟一些命令宏。

4.4.4 修改 U-boot環境變量保存方式

由于本課題使用NAND Flash作為外存儲器,所以U-boot 的參數存儲函數應當進行適當的修改。

在/common/env_common.c里添加default_env函數,此函數的作用是對環境變量保存方式的簡單初始化。這個文件中還定義了U-boot 保存環境變量的底層函數。其中/* Environment not changable */行下面的部分應當用 default_env 函數代替。這樣,就可以在 U-boot 命令行中實現對環境變量的設置與保存。文件 /common/env_nand.c 中 包 含 了 Flash 擦 寫 函 數,結合 CFG_NAND_LEGACY這個宏,添加代碼實現 NAND Flash的擦寫功能。初 始化環境仍用 default_env函數替換。

4.4.5 加入 NAND Flash 閃存型號支持

在/include/linux/mtd/

nand_ids.h

nand_flash_dev nand_flash_ids結構體的賦值進行修改,加入下列代碼:

{“Samsung K9F1208U0B”, NAND_MFR_SAMSUNG, 0x76, 26, 0, 3, 0x4000, 0}, 這樣,U-boot 就可以正確識別此款NAND Flash芯片。

4.5 U-boot 的燒寫及測試

若開發板中沒有任何程序,則不能啟動,需要先將 U-boot 燒寫到 Flash中。常用的燒寫方法有如下幾種:(1)將Flash取下,用編程器燒寫。(2)通過串口線燒寫。(3)通過JTAG調試接口燒寫。

本課題采用第三種方法。通過JTAG接口燒寫的優點是操作簡單,但是燒寫速度較慢,總體來說是一種非常經濟實用的方法。具體操作如下:(1)連接好開發板和PC主機,主機安裝并口設備驅動程序。

(2)將 u-boot.bin 拷貝至 sjf2410 目錄下,用以下命令運行 sjf2410:

sjf2410 /f:u-boot.bin(3)sjf2410程序啟動后,會有三個選項,依次為:

(a)選擇Flash芯片型號,(b)選擇程序類型,(c)選擇燒寫起始地址。

本課題全部選擇“0”即可。

(4)燒寫完畢后選擇“2”退出sjf2410。

燒寫完成后,斷開JTAG線,PC機運行DNW串口調試軟件。重啟開發板后,DNW中會輸出以下信息,表明U-boot可以正常啟動:

其中,“LJD2410 >”即系統提示符,在此可以輸入 U-boot 的命令并執行。U-boot 提供了幾十個常用的命令,通過這些命令,可以對開發板進行調試,可以引導Linux內核,還可以擦寫 Flash 完成系統部署等功能。

輸入“help”命令,可以看到U-boot 當前的所有命令列表,如表3-2所示,每一條命令后面是簡單的說明。

表4-2 U-boot中幾個常用命令及其說明

4.6 設置U-boot環境變量

U-boot的環境變量存儲在NAND Flash中U-boot程序映像后面的128Kb字節中,這部分被稱為“變量區”。

本課題中,設置U-boot 環境變量共有兩種方法:(1)在板級頭文件LJD2410.h中定義有相關的環境變量宏。

這類的宏名稱中以“CONFIG_”開頭,區別于以“CFG_”開頭的內部變量宏。以開發板的IP地址為例,LJD2410.h中有如下代碼:

#define CONFIG_IPADDR 192.168.0.10 這種方法定義簡便,但是每次更改環境變量必須重新編譯、燒寫U-boot程序,操作復雜,不方便調試。(2)使用命令設置環境變量。

這種方法得益于先前所做的移植工作,優點是操作簡便,可以在線設置,重啟開發板即可生效。還是以設置開發板 IP 地址為例,U-boot 提示符下輸入以下命令:

LJD2410 > setenv ipaddr 192.168.0.10 LJD2410 > saveenv 系統顯示:

Saving Environment to NAND...Erasing Nand...Writing to Nand...done 表明新設置的環境變量已保存至Flash中的變量區。5 Linux 內核的移植

Linux 內核的結構

在對Linux內核移植之前,首先要明確內核源碼的基本組織情況,只有了解了各目錄級代碼的功能才能準確找到需要修改和改進的地方。

Linux 內核主要由 5 個子系統組成:進程調度、內存管理、虛擬文件系 統、網絡接口、進程間通信。

Linux內核源碼中幾個主要的目錄說明如下:

(1)/arch包含了所有硬件結構特定的內核代碼。

Linux 系統能支持如此多平臺的部分原因是因為內核把原程序代碼清晰的劃分為體系結構無關部分和體系結構相關部分。對于任何平臺,都必須包含以下幾個目錄:

(a)boot:包括啟動內核所使用的部分或全部平臺特有代碼。

(b)kernel:存放支持體系結構特有的(如信號處理和SMP)特征的實現。

(c)

lib:存放高速體系結構特有的(如strlen和 memcpy)通用函數的實現。

(d)mm:存放體系結構特有的內存管理程序的實現。

(e)math-emu:模擬 FPU 的代碼。對于 ARM 處理器來說,此目錄用mach-xxx代替。

(2)/drivers包含了內核中所有的設備驅動程序。

(3)/fs包含了所有的文件系統的代碼。

(4)/include包含了建立內核代碼時所需的大部分庫文件。

該目錄也包含了不同平臺需要的庫文件。比如,asm-arm是 arm平臺需要的庫文件。

(5)/init 包含了內核的初始化代碼,內核從此處工作。這是研究核心如何工作的好起點。

(6)/ipc包含了進程間通信代碼。

(7)/kernel包含了主內核代碼。

(8)/mm包含了所有內存管理代碼。

(9)/net 包含了和網絡相關的代碼。

(10)/documents包含了內核源碼各個部分的說明文件。

通常,在每個目錄下,都有一個 Kconfig 文件和一個Makefile文件,這兩個文件都是編譯時使用的輔助文件,仔細閱讀這兩個文件對弄清各個文件之間的聯系和依托關系很有幫助;而且在有的目錄下還有 Readme 文件,它是對該目錄下的文件的一些說明,同樣有利于我們對內核源碼的理解。

顯然,移植工作的重點就是移植arch目錄下的文件。Linux 啟動過程簡析

Linux 內核啟動就是引導內核映像啟動的過程。典型的內核映像是zImage,包含自引導程序和壓縮的vmlinux兩部分。

啟動過程從內核映像入口開始執行,解壓 vmlinux并轉到虛擬地址空間;再調用統一的內核啟動函數 start_kernel(),完成一系列基本初始化;隨后啟動一個叫做 init 的內核線程,完成掛載文件系統、初始化設備驅動和啟動用戶空間 init 進程等工作。

Linux內核的移植過程

5.3.1 選擇參考板

內核的移植工作主要是修改跟硬件平臺相關的代碼,一般不涉及 Linux內核通用程序。移植的難度也取決于兩種硬件平臺的差異。Linux 對于特定硬件平臺的軟件叫做BSP(Board Support Package).Linux 內核已經支持了各種體系的多種開發板,我們很容易從中找到與本課題類似的目標板,參考該目標板并做一定的修改,即可完成移植工作。選擇參考板的原則如下:

(1)參考板與開發板具有相同的處理器,至少類似的處理器;

(2)參考板與開發板具有相同的外圍接口電路,至少基本接口相同;

(3)Linux內核已經支持參考板,至少有非官方的補丁或者BSP;

(4)參考板Linux設備驅動工作正常,至少已經驅動基本接口。

根據以上原則,本課題選擇SMDK2410作為參考板。修改頂層Makefile文件,指定體系結構和編譯器地址:

ARCH := arm

CROSS_COMPILE := /usr/local/arm/3.4.1/bin/arm-linux-

5.3.2 修改 NAND Flash 分區信息

本課題中,NAND Flash應按照功能分為 4個分區,如圖4-1所示:

圖5-1 NAND Flash分區示意圖 Linux 內核對于 Flash分區由 arch/arm/plat-s3c24xx/common-smdk.c 文件中的 mtd_partition smdk_default_nand_part 結構體定義,默認已經分為了8個區。按照圖4-1的分區信息,修改該結構體為:

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

.name = “U-boot”,.size = 0x00100000,.offset = 0x0,},[1] = {

.name = “Kernel”,.offset = 0x00100000,.size = 0x00300000,},[2] = {

.name = “RootFS”,.offset = 0x00400000,.size = 0x02800000,},[3] = {

.name = “User”,.offset = 0x02d00000,.size = 0x00f00000,},同時還應根據CPU手冊修改NAND Flash的讀寫時序:

static struct s3c2410_platform_nand smdk_nand_info = {

.tacls

= 0,.twrph0

= 30,.twrph1

= 0,};5.3.3 關閉 ECC 校驗

本設計中,內核都是通過 U-boot 寫到

Nand Flash 的,U-boot 通過的軟件ECC算法產生ECC校驗碼,這與內核校驗的ECC碼不一樣,而內核中的 ECC 碼是由

S3C2410 中

Nand Flash 控制器產生的。所以,我們在這里選擇禁止內核

ECC 校驗.,具體操作如下: 文件drivers/mtd/nand/s3c2410.c中,找到s3c2410_nand_init_chip()函數,將最后一行的

chip-->eccmode

= NAND_ECC_SOFT 改為:

chip-->eccmode

= NAND_ECC_NONE

5.4 CS8900a網卡的移植過程

本課題中使用的LJD2410開發板帶有 CS8900A網卡芯片,并提供RJ-45網絡接口。Linux內核中并沒有為 ARM體系配置CS8900A的網卡驅動,需要自己添加。CS8900A的驅動文件有兩個:CS8900A.h 和CS8900A.c,這兩個文件可以由網絡獲得,將其拷貝至 drivers/net/arm 文件夾下,但這樣并不能使驅動程序正常工作,還應對內核源文件做些修改。

5.4.1 修改硬件地址映射

(1)在/arch/arm/mach-s2410文件夾里建立文件smdk2410.h,添加如下代碼:

#define pSMDK2410_ETH_IO

__phys_to_pfn(0x19000000)

#define vSMDK2410_ETH_IO

0xE0000000

#define SMDK2410_EHT_IRQ

IRQ_EINT9

這三個宏分別定義了網卡的物理地址、虛擬地址和占用的中斷號。

(2)修改/arch/arm/mach-s2410/mach-smdk2410.c,添加如下代碼:

#include

(3)在 map_desc smdk2410_iodesc[]結構題中添加CS8900A對于的 io 空間映射:

static struct map_desc smdk2410_iodesc[] __initdata = {

{ vSMDK2410_ETH_IO , pSMDK2410_ETH_IO, SZ_, MT_DEVICE }, };

5.4.2 添加 CS8900A 內核編譯項

Kconfig 文件是 Linux2.6 內核引入的配置文件,是內核配置選項的源文件。只有在這個文件里加入相應代碼,才能在編譯選項中出現菜單項。

在/drivers/net/arm/Kconfig中增加CS8900A的編譯項代碼:

config

ARM_CS8900

tristate “CS8900 support”

depends on NET_ETHERNET && ARM && ARCH_SMDK2410

help …

最后應在/drivers/net/arm/Makefile 中添加:

obj-$(CONFIG_ARM_CS8900)

+= cs8900.o

以上工作完成后,新移植的CS8900A驅動就可以編譯進內核里了。

5.5 Linux 內核的剪裁配置

配置內核選項是整個移植過程中很重要的一步,本設計使用SMDK2410作為參考開發板,所以可以參考內核中 SMDK2410 開發板的配置文件,通過以下命令將其復制到內核根文件夾下:

$ cp arch/arm/config/smdk2410_defconfig.config 在此基礎上,根據本課題的實際需求進行配置增減。

5.5.1 使用配置菜單

配置內核可以選擇不同的配置界面,圖形界面或者光標界面。由于光標菜單運行時不依賴于X11圖形軟件環境,可以運行在字符終端上,所以光標菜單界面比較通用。圖4-2所示就是執行 make menuconfig出現的配置菜單。

在各級子菜單中,選擇相應的配置時,有 3種選擇,它們代表的含義分別如下:

Y—將該功能編譯進內核。

N—不將該功能編譯進內核。

M—將該功能編譯成可以在需要時動態插入到內核中的模塊。

圖5-2 內核配置主菜單 內核配置原則是:將與內核其他部分關系較遠且不經常且不經常使用的部分功能代碼編譯成可加載模塊,有利于減少內核長度,減小內核消耗的內存,簡化該功能相應的環境改變時對內核的影響;不需要的功能就不選;與內核關系緊密而且經常使用的部分功能代碼直接編譯到內核中。

5.5.2 基本配置選項

Linux內核的各個版本配置餐單各不相同,下面以本課題使用的2.6.24.4版為例,結合本課題的實際需求,簡介下內核的基本配置選項。

(1)General setup:包含通用的一些配置選項,保持默認即可。

(2)Enable loadable module supple:包含支持動態模塊的配置選項,保持默認。

(3)System Type:包含系統平臺列表及其相關的配置,去掉SMDK2410以外所有開發板的支持、開啟s3c2410 DMA支持。

(4)Bus support:包含各種總線配置選項,全部去掉。

(5)Kernel Features:包含內核特性相關選項,保持默認。

(6)Boot options:包含內核啟動相關選項,其中內核啟動參數設置為:

“noinitrd console=ttySAC0,115200 root=/dev/nfs init=linuxrc nfsroot=192.168.0.2:/home/arm/FS/myrootfs mem=64M

ip=192.168.0.10:192.168.0.2:192.168.0.1:255.255.255.0:LJD2410:eth0:off”,支持NFS文件系統。

(7)Floating point emulation:包含浮點數運算仿真功能,需要開啟“NWFPE”選項。

(8)Userapace binary formats:包含支持的應用程序格式,僅保留“ELF”格式支持,去掉其它。

(9)Power management options:包含電源管理功能,保持默認。

(10)Networking:包含網絡功能:需要開啟基本功能選項。

(11)Device Drivers:包含設備驅動選項,下一小節將詳細介紹。

(12)File systems:包含各種文件系統的支持選項,去掉“EX2”等選項,僅保留 ROM 文件系統支持,在“Miscellaneous filesystems”子菜單中近保留“cramfs”文件系統支持,并且開啟NFS文件系統支持,去掉其它選項。

(13)Kernel hacking:包含各種內核調試選項,保持默認。

(14)Security options:包含安全性有關選項,保持默認。

(15)Cryptographic API:包含加密算法,保持默認。

(16)Library routines:包含幾種壓縮和校驗函數,保持默認。5.5.3 驅動程序配置選項

幾乎所有Linux的設備驅動都在“Device Drivers”菜單下,它對設備驅動程序加以歸類,放在子菜單下。本課題對于設備驅動的裁剪較多,具體如下:

(1)MTD support:MTD設備驅動,應添選NAND Flash驅動支持。

(2)Network debice support:網絡設備支持,在子菜單“Ethernet(10 or 100Mbits)”中可以看到CS8900A網卡的配置項,這正是4.4節工作的結果。

(3)Real Time Clock:時鐘驅動選項,應選上“Samsung S3C series SoC RTC”,這樣系統時鐘才能正常運行。

(4)由于嵌入式導航計算機只使用串口作為輸入輸出接口,所以應該剪裁掉那些無用的驅動,包括:并口、ATA及SATA驅動、RAID驅動、ISDN支持、輸入設備驅動、多媒體設備支持、USB 支持以及MMC/SD卡支持。(5)其它驅動支持保持默認即可。

5.5.4 保存配置文件

內核配置主菜單中選擇“Save an Alternate Configuration File”即可將目前的配置狀態保存成文件。程序默認保存為“.config”,此文件位于內核根目錄內,可以直接修改。

5.5.5 編譯 Linux 內核

正式編譯Linux內核之前,應當清理一下內核樹,命令如下:

$ make mrproper

此命令會清除掉.config 文件,所以應當在配置內核之前做。

Linux 2.6 版本的編譯已經簡化,使用一個 make 命令就可以完成諸如建 立文件依賴、生成zImage、編譯模塊、安裝模塊等一系列功能。內核編譯完 成后,將在/arch/arm/boot 目錄中生成 image 和 zIamge 兩個內核映像文件,其中 image 為正常大小的映像文件,而 zImage 為壓縮后的映像文件。此時 編譯好的可加載模塊也被安裝到預定位置,默認為/lib/modules。5.6 內核的下載及啟動

5.6.1 將引導信息加入內核映像

U-boot 引導內核時需要檢查一個 64byte 的頭信息,其中包含了入口地址、映像類型等基本信息。這個引導頭可以用 U-boot 附帶的 mkimage 工具生成,命令如下:

$ mkimage-n 'linux-2.6.24'-A arm-O linux-T kernel-C none-a 0x30008000-e 0x30008040-d zImage zImage.img 各個參數的含義:

-n:設置映像名

-A:設置體系信息

-O:設置操作系統信息

-T:設置映像類型

-c:壓縮類型

-a:讀入地址

-e:入口地址

-d:源映像文件

該命令生成的zImage.img文件就可以下載到開發板運行了。

5.6.2 內核映像的下載及運行

將上一小節中生成的zImage.img文件拷貝到主機tftpboot 文件夾內。啟動開發板,進入U-boot 提示符。使用tftp命令將內核映像下載到開發板內存中:

LJD2410> tftp 0x30008000 zImage.img

TFTP from server 192.168.0.2;our IP is 192.168.0.10

Filename ‘zImage.img’

Load address : 0x30008000

Loading:

####

Done

其中 0x30008000 為指定的下載到內存的地址,zImge.img 就是帶有引導頭的內核映像。當內核下載完成后,可以通過bootm命令啟動內核:

LJD2410> bootm 0x30008000 6 建立根文件系統

6.1 根文件系統概述

6.1.1 根文件系統簡介

對于嵌入式操作系統而言,僅包含內核是不夠的,還必須有文件系統的支持。跟文件系統(root filesystem)是 Linux系統的核心部分,包含系統使用的軟件和庫,以及無偶有用來為用戶提供支持架構和用戶使用的應用軟件,并作為存儲數據讀寫結果的區域。在Linux系統啟動時,首先完成內核安裝及環境初始化,最后會尋找一個文件系統作為根文件系統被加載。Linux系統中使用“/”來唯一表示根文件系統的安裝路徑。嵌入式系統中通常可以選擇的根文件系統有:Romfs, CRAMFS, RAMFS,JFFS2, EXT2等,甚至還可以使用NFS(網絡文件系統)作為根文件系統。

6.1.2 NFS 文件系統與Cramfs文件系統

NFS(Network File System)是由SUN公司發展,并于1984年推出的一種文件系統。它可以讓開發者通過網絡連接,使開發板可以直接掛載主機的某一個指定文件夾作為根文件系統。在嵌入式開發過程中,通常使用這種文件系統搭建交叉編譯環境。

cramfs(Compressed ROM File System)是Linux創始人Linus Torvalds開發的一個適用于嵌入式系統的文件系統。cramfs是一個只讀文件系統,采用了zlib壓縮,壓縮比一般可以達到1:2,但仍可以做到高效的隨機讀取。Linux系統中,通常把不需要經常修改的目錄壓縮存放,并在系統引導的時候再將壓縮文件解開。因為 cramfs 不會影響系統讀取文件的速度,而且是一個高度壓縮的文件系統,因此本課題最終選用cramfs作為根文件系統部署到開發板。

6.2 建立Linux根文件系統目錄

嵌入式Linux根文件系統必須包含一些必須的目錄,比如設備目錄/dev、命令目錄/bin、庫目錄/lib等等。

本課題構建根文件系統的工作目錄是 myrootfs,通過下列命令可以在myrootfs中創建所需的子目錄:

$ mkdir bin dev etc lib proc sbin sys usr $ mkdir usr/bin usr/lib usr/sbin lib/modules $ mkdir mnt tmp var $ chmod 1777 tmp $ mkdir var/lib var/lock var/log var/run var/tmp $ chmod 1777 var/tmp $ mkdir home root boot 這樣,一個基本的根文件系統就建立起來了,但是各個目錄都是空的,缺少各種程序和命令工具,需要進一步完善。心得體會

本課題的目標是為基于ARM9處理器的導航計算機移植Linux操作系統。研究過程中,使用了 LJD2410 型開發板,此開發板的處理器是基于 ARM920T的 Samsung S3c2410,能夠滿足嵌入式導航計算機的硬件需求。本課題所做的工作簡要總結如下:

首先,本文對嵌入式系統、嵌入式Linux操作系統和ARM體系處理器做了簡單介紹,并且分析了嵌入式導航計算機的操作系統需求。

其次,介紹了交叉開發環境的建立。本課題兩臺主機連接開發板的方法,主機分別安裝不同的操作系統,在開發過程中完成不同的工作。通過 TFTP和NFS等網絡服務,實現高效連接,有利于提高開發效率。這部分是整個課題的基礎,之后的所有工作都是在這個基礎上完成的。

第三,本文重點介紹了 Linux 系統的移植過程。Linux 系統移植包括三個方面:啟動加載程序(Bootloader)的移植,Linux 內核的移植和根文件系統的建立。本課題選用功能強大的 U-boot 作為啟動加載程序,通過對其源代碼進行修改,使其可以正常運行于開發板,并且實現下載、燒寫等功能。內核則采用了2008年 4月發布的2.6.24.4版本,移植了網卡驅動,并針對課題需求,進行了修改和裁剪,使得內核加載更快,運行更穩定。根文件系統選用了Cramfs文件系統,這種文件系統采用壓縮格式,存儲空間需求小,但是不影響讀取速度,非常適合與嵌入式Linux系統。這三個方面的工作有前后繼承關系,但是又有一定獨立性,移植過程中應多調試,多實驗。

最后,簡單介紹了系統部署的方法。將Linux 內核和根文件系統部署到開發板后,開發板就可以脫離交叉開發環境而獨立運行,最終達到設計需求。

本課題充分利用前人積累的經驗,結合最新的軟件版本進行移植工作。在移植過程中遇到了許多困難和問題,主要靠查閱文獻和自己的試探性試驗來研究問題,通過多次的實踐,最終得到明確的解決方法。雖然移植后的Linux系統可以正常運行在開發板上,能滿足設計需求。但由于時間倉促,許多問題沒有深入研究,難免會出現一定的疏漏和瑕疵,需要我在今后的學習中不斷努力,加以改進。

第二篇:嵌入式系統設計與應用

第一章:

嵌入式系統定義:以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能,可靠性,成本,體積,功耗嚴格要求的專用計算機系統。(一切非PC計算機系統)嵌入式系統特點:“專用”計算機系統,運行環境差異很大,比通用PC系統資源少,功耗低,體積小,集成度高,成本低,具有完整的系統測試和可靠性評估體系,具有較長的生命周期,需要專用開發工具和方法進行設計,包含專用調試電路,多學科知識集成系統。嵌入式系統應用范圍:汽車,工業控制,通信設備,消費電子,商業終端,航空航天,軍事需求。

嵌入式系統的基本開發流程:系統定義與需求分析階段,方案設計階段,詳細設計階段,軟、硬件集成測試階段,系統功能性測試及可靠性測試階段。

系統定義與需求分析階段:對系統需求進行分析,制定系統的設計依據。方案設計階段:確定系統初步設計方案并形成設計描述文檔。詳細設計階段:完善初步方案,對方案實施詳細設計。

軟硬件集成測試階段:對系統軟硬件進行綜合測試,驗證系統設計功能。

系統功能性能測試及可靠性測試測試:對系統功能,性能,可靠性進行綜合測評。

對于使用操作系統的嵌入式系統來說,嵌入式系統軟件結構一般包含4個層面:板級支持包層,實時操作系統(RTOS)層,應用程序接口(API)層,應用程序層。有些資料將應用程序接口API歸屬于OS層,按3層劃分的應用程序控制系統的運作和行為;操作系統與硬件無關,不同的嵌入式操作系統其組成結構也不盡相同 嵌入式操作系統種類繁多,大體分為兩種:商用型和免費型

商用型:VxWorks,Windows CE,pSoS,Palm OS,OS-9,LynxOS,QNX和LYNX 免費型:Linux和uC/OS—II uC/OS—II具有執行效率高,占用空間小,可移植性及擴展性強,實施性能優良,穩定性和可靠性良好等特點。其內核采用微內核結構,將基本功能(如進程管理,存儲管理,中斷處理)放在內核中,留給用戶一個標準API函數,并根據各個任務的優先級分配CPU時間。交叉開發環境:交叉開發是指一個通用計算機上進行軟件的編輯編譯,然后下載到嵌入式設備中進行調試的開發方式,它通常采用宿主機/目標機模式。

第二章:

RISC是精簡指令集

精簡指令集體系結構的優點:硬連線的指令譯碼邏輯,便于流水線執行,大多數RISC指令為單周期執行。

精簡指令集處理器的優點:處理器關心面積小,開發時間縮短,開發成本降低,容易實現高性能,低成本的處理器。

精簡指令集體系結構缺點:與CISC相比,通常RISC的代碼密度低;RISC不能執行x86代碼;RISC給優化編譯程序帶來了困難

ARM設計采用的RISC技術特征主要有:Load/Store體系結構,固定的32位指令,3地址指令格式。

ARM7TDM名稱具體含義:ARM7:32位ARM體系結構4T版本;T:Thumb16位壓縮指令集;D:支持片上Debug,使處理器能夠停止以響應調試請求;M:增強型Multiplier,與前代相比具有較高的性能且產生64位的結果。I:EmbeddedICE硬件以支持片上斷點和觀察點。ARM7 3級流水線:(取指級,譯碼級,執行級)ARM9TDMI 流水線操作:(取指,譯碼,執行,緩沖/數據,回寫)5級 ARM處理器核可工作兩種狀態:ARM狀態和Thumb狀態

從ARM進入Thumb狀態,當操作數寄存器Rm的狀態位bit[0]為1時,執行“BX Rm”指令進入Thumb狀態

從Thumb進入ARM狀態,當操作數寄存器Rm的狀態位bit[0]為0時,執行“BX Rm”指令進入ARM狀態

ARM處理器工作模式(共7種):除用戶模式外的其他六種模式稱為特權模式。特權模式:主要處理異常和監控調用(有時也稱為軟件中斷),他們可以自由地訪問系統資源和切換模式

ARM處理器總共有37個寄存器,均為32位 ARM狀態下的通用寄存器分為3類: 未分組寄存器:R0~~R7(為公用寄存器)

分組寄存器:R8~~R14

R13通常用于堆棧指針SP

R14用做子程序鏈接寄存器

程序計數器:R15(PC)

用做程序計數器

ARM程序狀態寄存器中

條件碼標志(N Z C V)

N——在結果是帶符號的二進制補碼的情況下,結果為負,N=1 否則為0 Z——結果為0 Z=1 否則為0 C——針對加法:產生進位

C=1 否則為0

針對減法:產生借位

C=0 否則為1

針對有移位操作的非加減法指令

C為移位操作中最后移出位的值

對于其他指令

C通常不變

V——對于加減法指令

操作數和結果為帶符號的整數時,產生溢出

V=1 否則為0

對于其他指令

V通常不發生變化 ARM的異常中斷響應過程: 一:將CPSR的內容保存到將要執行的異常中斷對應的SPSR中,以實現對處理器當前狀態,中斷屏蔽字以及各條件標志位的保存。二:設置當前狀態寄存CPSR中的相應位:

設置CPSR模式控制位CPSR[4:0],使處理器進入相應的執行模式

當進入Reset或FIQ模式時,還要設置中斷標志位(CPSR[6]=1)禁止FIQ中斷,否則其值不變

設置中斷標志位(CPSR[7]=1),禁止IRQ中斷

三:將寄存器LR-設置成異常返回地址 return link(對于某些異常中斷,保存在LR-的值可能與實際返回的地址有一個常數的偏移量),使異常處理程序執行完后能正確返回原程序

四:給程序計數器PC強制賦值,使程序從相應的向量地址開始執行中斷處理程序。

非向量中斷和中斷向量的區別和聯系

異常中斷的優先級:復位(最高),數據異常中斷,FIQ,IRQ,取值指異常中止,SWI未定義指令

ARM支持的數據類型(6種):8位有符號和無符號字節

16位有符號和無符號半字,以2字節的邊界定位

32位有符號和無符號半字,以4字節的邊界定位

ARM存儲器組織:以字節為單位尋址的存儲器中有“小端”和“大端”兩種方式存儲字 小端格式:較高的有效字節存放在較高的存儲器地址,較低的有效字節存放在較低的存儲器地址

大端格式:較高的有效字節存放在較低的存儲器地址,較低的有效字節存放在較高的存儲器地址

ARM處理器能方便地配置為其中任何一種存儲器方式,但他們的缺省設置為小端格式(71頁有題)

ARM7TDM內核的重要特性:53頁最上面

第三章:

指令分類中基本指令格式

S

可選后綴,若指定S,則根據指令執行結果更新CPSR中的條件碼 ARM尋址方式

立即尋址有選擇題

寄存器間接尋址:ARM的數據傳送指令都是基于寄存器間接尋址,即通過Load/Store完成對數據的傳送操作

103頁舉例

可能為考題

偽操作

是ARM匯編語言程序里的一些特殊指令助記符,它的作用主要是為完成匯編程序做各種準備,在源程序進行匯編時由匯編程序處理,而不是在計算機運行期間由機器執行 ARM嵌入式系統程序設計可以分為ARM匯編語言程序設計、嵌入式C語言程序設計以及C語言與匯編語言的混合編程。

ARM匯編程序中

AREA指示符定義本程序段位代碼段

即申請一個定義段 161頁程序

可能考

嵌入式C語言程序設計中修飾符:interrupt、near、far、huge Interrupt在函數修飾為中斷函數,沒有輸入和輸出參數 第三章課后習題見李向妮筆記

第四章

DMA

I2C

I2S 基于S3C44B0X的最小系統設計:

嵌入式最小系統是指保證嵌入式微處理器可靠工作所必需的基本電路組成的系統,通常包括處理器單元、時鐘單元、復位單元、、存儲器單元、供電電源和調試接口。

基于ARM的嵌入式最小系統基本組成包括:基于ARM核的微處理器、電源電路、復位電路、時鐘電路、存儲器電路(FLASH和SDRAM)、UART接口電路和JTAG調試接口

第五章:

uC/OS—II采用的搶占式內核是一個真正的實時操作系統

uC/OS—II基本特點:源碼開放;可移植性;可裁剪;搶占式內核;可擴展的多任務;可確定的執行時間;中斷管理;穩定性和可靠性

uC/OS—II的文件結構(與內核功能相關的文件):任務管理;同步通信;內存管理;時間管理

uC/OS—II任務及其運行狀態:

任務是一個簡單的程序,對應于實際應用中的一個邏輯功能。對uC/OS—II來說,任務是系統運行的基本單元,系統以任務為單元分配內存資源和處理時間,每個任務都有自己獨立的寄存器和棧空間。

任務看起來就像一個無限循環永不返回的函數,但是不同于函數的是,它有一套自己的內存空間,運行時完全占用處理器資源,在任意確定的時刻都處于休眠、就緒、運行、掛起以及中斷服務這五種狀態之一 圖見書上337

第六章

uCLinux與標準Linux的最大區別就在于內存管理。標準Linux是針對有MMU的處理器設計的

uCLinux不使用虛擬內存管理技術,采用的是實存儲器管理策略,也就是說uCLinux系統對內存的訪問是直接的

uCLinux與標準Linux系統在進程的創建

進程的執行

進程的終止

上有著顯著不同 基于uCLinux操作系統的應用開發環境一般是由目標系統硬件開發板和宿主PC機所構成。目標硬件開發板用于運行操作系統和系統應用軟件,而目標板所用到的操作系統的內核編譯、電子詞典應用程序的開發和調試則需要通過宿主PC機來完成。目標板用來進行內核編譯

PC機用來進行調試

移植就是使一個實時操作系統能夠在某個微處理器平臺上或者微控制器上運行。uCLinux移植包括3個層次的移植: 處理器結構層次移植、芯片層次移植、板級移植。

移植思路:開發環境確定以后,首先,要為uCLinux設計一個BootLoader,通過BootLoader來初始化硬件,引導uCLinux運行。BootLoader的設計可以在ads中或者Linux中實現。其次,針對硬件環境和設計的BootLoader修改uClinux內核。最后,在交叉編譯環境下配置、編譯、鏈接uClinux,下載編譯得到的印象文件到FLASH,通過BootLoader來啟動uCLinux。如果參數默認或者無參數,則先執行BootLoader,否則BootLoader第二位,參數執行為第一位。

第三篇:嵌入式系統的主要應用

嵌入式系統的主要應用

嵌入式系統是一種包括硬件和軟件的完整的計算機系統,它的定義是:“嵌入式系統是以應用為中心,以計算機技術為基礎,并且軟硬件可剪裁,適用于應用系統對功能、可靠性、成本、體積和功耗有嚴格要求的專用計算機系統。”嵌入式系統所用的計算機是嵌入到被控對象中的專用微處理器,但是功能比通用計算機專門化,具有通用計算機所不能具備的針對某個方面特別設計的、合適的運算速度、高可靠性和較低比較成本的專用計算機系統。

嵌入式系統的應用前景是非常廣泛的,人們將會無時無處不接觸到嵌入式產品,從家里的洗衣機、電冰箱,到作為交通工具的自行車、小汽車,到辦公室里的遠程會議系統等等。在家中、辦公室、公共場所,人們可能會使用數十片甚至更多這樣的嵌入式無線電芯片,將一些電子信息設備甚至電氣設備構成無線網絡;在車上、旅途中,人們利用這樣的嵌入式無線電芯片可以實現遠程辦公、遠程遙控,真正實現把網絡隨身攜帶。其應用領域可以包括:

1.交通管理:在車輛導航、流量控制、信息監測與汽車服務方面,嵌入式系統技術已經獲得了廣泛的應用,內嵌GPS模塊,GSM模塊的移動定位終端已經在各種運輸行業獲得了成功的使用。目前GPS設備已經從尖端產品進入了普通百姓的家庭,只需要幾千元,就可以隨時隨地找到你的位置。2.家庭智能管理系統:水、電、煤氣表的遠程自動抄表,安全防火、防盜系統,其中嵌有的專用控制芯片將代替傳統的人工檢查,并實現更高,更準確和更安全的性能。

3.POS網絡及電子商務:公共交通無接觸智能卡發行系統,公共電話卡發行系統,自動售貨機,各種智能ATM終端將全面走入人們的生活。

4.環境工程與自然:水文資料實時監測,防洪體系及水土質量監測、堤壩安全,地震監測網,實時氣象信息網,水源和空氣污染監測。在很多環境惡劣,地況復雜的地區,嵌入式系統將實現無人監測。

5.機器人:嵌入式芯片的發展將使機器人在微型化,高智能方面優勢更加明顯,同時會大幅度降低機器人的價格,使其在工業領域和服務領域獲得更廣泛的應用。

6.工業控制:相對于其他的領域,機電產品可以說是嵌入式系統應用最典型最廣泛的領域之一。從最初的單片機到現在的工控機、SOC在各種機電產品中均有著巨大的市場。工業設備是機電產品中最大的一類,在目前的工業控制設備中,工控機的使用非常廣泛,這些工控機一般采用的是工業級的處理器和各種設備,其中以X86的MPU最多。工控的要求往往較高,需要各種各樣的設備接口,除了進行實時控制,還須將設備狀態,傳感器的信息等在顯示屏上實時顯示。這些要求8位的單片機是無法滿足的,以前多數使用16位的處理器,隨著處理器快速的發展,目前32位、64位的處理器逐漸替代了16位處理器,進一步提升了系統性能。采用PC104總線的系統,體積小,穩定可靠,受到了很多用戶的青睞。不過這些工控機采用的往往是DOS或者Windows系統,雖然具有嵌入式的特點,卻不能稱作純粹的嵌入式系統。另外在工業控制器和設備控制器方面,則是各種嵌入式處理器的天下。這些控制器往往采用16位以上的處理器,各種MCU,Arm、Mips、68K系列的處理器在控制器中占據核心地位。這些處理器上提供了豐富的接口總線資源,可以通過它們實現數據采集,數據處理,通訊以及顯示(顯示一般是連接LED或者LCD)。最近飛利浦和ARM共同推出32位RISC嵌入式控制器,適用于工業控制,采用最先進的0.18微米CMOS嵌入式閃存處理技術,操作電壓可以低至1.2伏,它還能降低25%到30%的制造成本,在工業領域中對最終用戶而言是一套極具成本效益的解決方案。美國TERN工業控制器基于Am188/186ES、i386EX、NEC V25、Am586(Elan SC520),采用了SUPERTASK實時多任務內核,可應用于便攜設備、無線控制設備、數據采集設備、工業控制與工業自動化設備以及其它需要控制處理的設備。

7.家電行業是嵌入式應用的另一大行業。現在只有按鈕、開關的電器顯然已經不能滿足人們的日常需求,具有用戶界面,能遠程控制,智能管理的電器是未來的發展趨勢。據IDG發布的統計數據表明,未來信息家電將會成長五至十倍。中國的傳統家電廠商向信息家電過渡時,首先面臨的挑戰是核心操作系統軟件開發工作。硬件方面,進行智能信息控制并不是很高的要求,目前絕大多數嵌入式處理器都可以滿足硬件要求,真正的難點是如何使軟件操作系統容量小、穩定性高且易于開發。Linux核心可以起到很好的橋梁作用,作為一個跨平臺的操作系統,它可以支持二三十種CPU,而目前已有眾多家電業的芯片都開始做Linux的平臺移植工作。1999年就登錄中國的微軟“維納斯”計劃給了國人一個數字家庭的概念,引導各大家電廠商紛紛投入到這場革命中來,雖然最終未能獲得成功,卻使信息家電深入人心。如今各大廠商仍然在努力推出適用于新一代家電應用的芯片,英特爾公司已專為信息家電業研發了名為StrongARM的ARM CPU系列,這一系列CPU本身不象X86CPU需要整合不同的芯片組,它在一顆芯片中可以包括你所需要的各項功能,即硬件系統實現了SOC的概念。美商網虎公司已將全球最小的嵌入式操作系統——QUARK成功移植到StrongARM系列芯片上,這是第一次把Linux、圖形界面和一些程序進行完整移植(QUARK的內核只有143K),它將為信息家電提供功能強大的核心操作系統。相信在不久的將來,數字智能家庭必將來到我們身邊。

這些應用中,可以著重于在控制方面的應用。就遠程家電控制而言,除了開發出支持TCP/IP的嵌入式系統之外,家電產品控制協議也需要制訂和統一,這需要家電生產廠家來做。同樣的道理,所有基于網絡的遠程控制器件都需要與嵌入式系統之間實現接口,然后再由嵌入式系統來控制并通過網絡實現控制。所以,開發和探討嵌入式系統有著十分重要的意義。

第四篇:嵌入式系統設計報告

嵌入式系統設計實驗報告

班 級:學 號:姓 名:成 績:指導教師:

20090612 2009112107 侯金鐘 武俊鵬、劉書勇 1.實驗一

1.1 實驗名稱

嵌入式系統硬件開發環境

1.2 實驗目的

1.熟悉UP-net3000實驗平臺。

2.超級終端設置及BIOS 功能使用。

1.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

1.4 實驗內容及要求

熟悉UP-net3000實驗平臺的硬件電路和外設,ARM JTAG的安裝和使用,利用超級終端檢驗外設的工作狀態。

1.5 實驗設計與實驗步驟

1.建立工程

(1)運行ARM SDT 2.5 集成開發環境(ARM Project Manager).(2)在新建的工程中,如圖1A-2 所示,選中工程樹的“根部”。

(3)因為開發板上的嵌入式處理器ARM7TDMI 沒有浮點處理器,所以,如圖1A-3 所

示,在彈出的對話框中設置Floating Point Processor 為none,并保持其他的設置不變。(4)選中工程樹的“根部”,通過菜單Project | Tool Configuration for work1.apj | asmlink | Set,對整個工程的連接方式進行設置。(5)在彈出的對話框中,選中Entry and Base 標簽,如圖1A-4 所示,設置連接的Read-Only(只讀)和Read-Write(讀寫)地址。

(6)選擇Linker Configuration 的ImageLayout 標簽,(7)選擇Project | Edit Project Tamplete 菜單,彈出Project Template Editor 對話框。

(8)選擇Project | Edit Variables for work1.apj,彈出Edit Variables for work1.apj 對話框。

2.進行程序的在線仿真、調試

1.6 實驗過程與分析

熟悉UP-net3000實驗平臺的硬件電路和外設,安裝了ARM JTAG,利用超級終端檢驗了外設的工作狀態。

1.7 實驗結果總結

軟件安裝成功,結果顯示正常。

1.8 心得體會

通過此次試驗,我對ARM的環境的功能有一定的了解與完善。對試驗臺有了基本的認識與使用。

2.實驗二

2.1 實驗名稱

嵌入式系統軟件開發環境

2.2 實驗目的

1.熟悉ADS1.2 開發環境,學會ARM 仿真器的使用。

2.使用ADS 編譯、下載、調試并跟蹤一段已有的程序,了解嵌入式開發的基本思想和過程。

2.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

2.4 實驗內容及要求

本次實驗使用ADS 集成開發環境。新建一個簡單的工程文件,并編譯這個工程文件。學習ARM 仿真器的使用和開發環境的設置。下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量。

2.5 實驗設計與實驗步驟

(1)運行ADS1.2 集成開發環境(CodeWarrior for ARM Developer Suite)。

(2)在新建的工程中,選擇Debug 版本,使用Edit | Debug Settings菜單對Debug 版本進行參數設置。(3)在Debug Settings 對話框中選擇Target Settings 項。在Post-linker一欄中選擇ARM from ELF。

(4)在Debug Settings 對話框中選擇ARM Linker 項

(5)在第四步中如果選擇簡單的地址連接設置,在Debug Settings 對話框中選擇ARM Linker 項

(6)回到的工程窗口中,選擇Release 版本,使用Edit | Release Settings 菜單對Release 版本進行參數設置。(7)參照第(3)、(4)、(5)、(6)步在Release Settings 對話框中設置Release版本的Post-linker、連接地址范圍、入口模塊和輸出文件。(8)回到如圖1B-3 所示的工程窗口中,選擇Targets 選項卡,如圖1B-11 所示。選中DebugRel 版本,按Del 鍵將其刪除。DebugRel 子樹是一個折衷版本,通常用不到,所以在這里刪除。

2.6 實驗過程與分析

1)回到工程窗口選中Debug 版本,執行菜單Project | Make 對工程進行編譯連接。(2)在ADS 中執行菜單Project | Debug 啟動ADS1.2 的調試工具AXD。(3)在AXD 中執行菜單Options | Configure Target 對AXD 進行設置。(4)點Select 按鈕選擇遠程連接為ARM ethernet driver,點Configure 按鈕輸入仿真器的IP 地址。

(5)等待程序裝載完畢以后,通過Execute | Go 菜單以及Execute | Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(6)通過Execute | Step 菜單(或者工具欄中的相應按鈕)可以單步運行程序。

(7)程序停止后可以通過Processor Views | Sources 菜單查看源文件,并可在適當位置按F9 設置端點。

(8)使用在Processor View 菜單下的Registers、Variables 和Memory 命令可以查看工作寄存器或者內存變量。讀者可以逐一地嘗試,為以后調試程序打下基礎。

2.7 實驗結果總結

超級終端輸出“Hello World!”。

2.8 心得體會

基本了解了ADS1.2的配置條件,學會了ARM仿真器的使用方法。

3.實驗三

3.1 實驗名稱

鍵盤及LED實驗

3.2 實驗目的

1.學習鍵盤及LED 驅動原理。

2.掌握ZLG7289芯片串行接口的使用方法,用ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED。

3.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

3.4 實驗內容及要求

通過ZLG7289芯片驅動17鍵的鍵盤和8個共陰極LED,將按鍵值在LED上顯示出來。要求從右至左循環顯示至少四位數字。

基本功能實現之后可考慮實現從左至右顯示四位及四位以上數字(最大八位),并可設置清零鍵等擴展功能。

3.5 實驗設計與實驗步驟

利用所給的基礎代碼進行調試,觀察輸出結果,結合指導書和教材掌握基本原理和源代碼的編寫方式。根據實驗的要求設計函數流程,并反復調試,實現功能。1.新建工程,將“Exp3 鍵盤及LED 驅動實驗”中的文件添加到工程。2.定義ZLG7289 寄存器(ZLG7289.h)

#define ZLG7289_CS(0x20)//GPB5 #define ZLG7289_KEY(0x10)//GPG4 #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)3.編寫ZLG7289 驅動函數(ZLG7289.c)4.定義鍵盤映射表:(Keyboard16.c)

unsigned char KeyBoard_Map[]= {4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//64 鍵值映射表,通過查找鍵盤映射表來確定鍵盤掃描碼對應的按鍵值。

5.定義鍵值讀取函數。(Keyboard16.c)6.編寫主函數,將按鍵值在數碼管上顯示。

3.6 實驗過程與分析

利用鍵盤驅動函數實現基本數字輸入,然后利用循環左移函數實現輸入數字做一樣功能,并通過改變函數中相應delay的值來消除鍵盤按鍵帶來的抖動。

3.7 實驗結果總結

按鍵值可以在LED上顯示出來。要求從右至左循環顯示八位數字,同時可以復位清零。達到實驗的效果。

3.8 心得體會

通過本次實驗,我了解了LED的顯示屏幕的數字的移位功能,這個功能不止可以用一個方法實現,而循環左移是其中比較巧妙且省力的一種,在遇到類似情況的時候,可以優先考慮能不能利用到文件中已經存在的函數,這樣可以不必自己編寫函數,省時省力。是一種可靠的方法。4.實驗四

4.1 實驗名稱

電機轉動控制及中斷實驗

4.2 實驗目的

1.熟悉ARM本身自帶的六路即三對PWM,掌握相應寄存器的配置。

2.編程實現ARM系統的PWM輸出和I/O輸出,前者用于控制直流電機,后者用于控制步進電機。

3.了解直流電機和步進電機的工作原理,學會用軟件的方法實現步進電機的脈沖分配,即用軟件的方法代替硬件的脈沖分配器。

4.了解44B0處理器上中斷的應用。5.學習在44B0處理器上中斷的應用。

6.進一步熟悉平臺外圍硬件及其驅動程序的編寫。

4.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

4.4 實驗內容及要求

1.學習步進電機和直流電機的工作原理,了解實現兩個電機轉動對于系統的軟件和硬件要求。學習ARM 知識,掌握 PWM 的生成方法,同時也要掌握 I/O的控制方法。

2.編程實現ARM芯片的一對PWM輸出用于控制直流電機的轉動,通過A/D旋鈕控制其轉動方式。

3.編程實現ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。

4.通過鍵盤控制直流電機與步進電機的切換。5.設置并啟動定時器。

6.設置中斷,編寫定時器中斷服務程序,對中斷次數進行計數并在LED上顯示結果。

4.5 實驗設計與實驗步驟

1.添加并打開工程。

2.進行直流電機初始化設置和代碼編寫。3.進行步進電機初始化設置和代碼編寫。

4.對Timer3編程,編寫定時器中斷服務程序,完成對中斷次數的計數。5.編寫LED計數顯示函數,使LED能正確計數并顯示0-9999。6.編寫中斷初始化函數和中斷響應函數。7.終端下載測試。

4.6 實驗過程與分析 1.對直流電機進行編程和測試,掌握轉速和旋轉方向的設定方法。

2.對步進電機進行編程和測試,掌握ARM的四路I/O通道,實現環形脈沖分配用于控制步進電機的轉動,通過A/D旋鈕控制步進電機的轉角。

3.對主函數進行編程,用鍵盤響應直流電機與步進電機的切換控制。

4.掌握中斷相關語句的應用,弄清定義的中斷向量、中斷向量號,編寫中斷響應函數,并完成中斷響應控制。

4.7 實驗結果總結

實現了直流電機與步進電機的基本設置和控制,可以通過鍵盤控制電機之間的切換。完成了中斷的響應和定時中斷。當對其中一個旋鈕轉動時,就可以由直流電機轉換成步進電機的轉換,達到實驗的效果。

4.8 心得體會

通過本次實驗,我了解了直流電機和步進電機的工作原理,同時也知曉了電機間的轉換過程,了解其中的道理內涵,熟悉了ARM自帶的A/D轉換器的工作原理及編程方法,了解了中斷的意義和實現方法,實現了簡單了中斷處理程序。同時我也收獲了很多關于ARM處理機的相關知識。

5.實驗五

5.1 實驗名稱

觸摸屏驅動實驗

5.2 實驗目的

1.了解觸摸屏的基本概念與原理。

2.理解觸摸屏與LCD的關系。3.編程實現對觸摸屏的控制。

4.熟悉用 ARM 內置的 LCD控制器驅動 LCD。

5.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

5.4 實驗內容及要求

1.了解觸摸屏基本原理,理解對觸摸屏進行輸出標定、與LCD顯示器配合的過程。2.通過編程實現觸摸兩點自動在兩點間劃直線。3.通過編程實現在觸摸屏上動態畫出曲線。5.5 實驗設計與實驗步驟

1.添加并打開工程。

2.在頭文件中定義宏和常量及驅動函數。

#define ADS7843_CTRL_START 0x80 #define ADS7843_GET_X 0x50 #define ADS7843_GET_Y 0x10 #define ADS7843_CTRL_12MODE 0x0 #define ADS7843_CTRL_8MODE 0x8 #define ADS7843_CTRL_SER 0x4 #define ADS7843_CTRL_DFR 0x0 #define ADS7843_CTRL_DISPWD 0x3 // Disable power down #define ADS7843_CTRL_ENPWD 0x0 // enable power down #define ADS7843_PIN_CS(1<<6)//GPF6 #define ADS7843_PIN_PEN(1<<5)//GPG5 /////////觸摸屏動作//////// #define TCHSCR_ACTION_NULL 0 #define TCHSCR_ACTION_CLICK 1 //觸摸屏單擊 #define TCHSCR_ACTION_DBCLICK 2 //觸摸屏雙擊 #define TCHSCR_ACTION_DOWN 3 //觸摸屏按下 #define TCHSCR_ACTION_UP 4 //觸摸屏抬起 #define TCHSCR_ACTION_MOVE 5 //觸摸屏移動

#define TCHSCR_IsPenNotDown()(rPDATG&ADS7843_PIN_PEN)(ADS7843_CTRL_START|ADS7843_GET_X|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)//采樣x 軸電壓值,數據為12 位,參考電壓輸入模式為差分模式,允許省電模式

#defineADS7843_CMD_Y(ADS7843_CTRL_START|ADS7843_GET_Y|ADS7843_CTRL_12MODE |ADS7843_CTRL_DFR|ADS7843_CTRL_ENPWD)int TchScr_Xmax=1840,TchScr_Xmin=176, TchScr_Ymax=195,TchScr_Ymin=1910;//觸摸屏返回電壓值范圍 #defineADS7843_CMD_X 3.校準觸摸屏坐標,進行坐標轉換。

4.實現觸屏取點并顯示功能。

將觸摸動作及觸摸點坐標在超級終端上顯示出來。5.實現兩點間自動劃線功能。6.實現觸摸屏動態劃線功能。

可以使用TchScr_GetScrXY()函數(第三個參數為0)來獲得液晶屏的x、y 方向的電壓

范圍,分別點觸摸屏有效面積的左上角和右下角,得到下列參數:

TchScr_Xmax=1840;TchScr_Xmin=176;TchScr_Ymax=195;TchScr_Ymin=1910;//此數值僅供參考,請以實際校對為準

5.6 實驗過程與分析 1.在定義觸屏響應功能的函數中對點擊觸屏進行響應函數的修改,在其中添加修改點顏色的函數,修改得到的觸摸點的顏色,并顯示在LCD上。

2.獲取第一個點坐標并儲存,獲取第二個點坐標并儲存,由編寫的劃線函數取得儲存的兩點間直線上所有點的坐標,并對其改變顏色,顯示在LCD上,即完成劃直線功能。

3.將劃線函數應用到響應觸屏移動消息的函數下,即可對連續獲得的觸摸坐標進行連續的畫短直線,連接成曲線,完成動態劃線功能。

5.7 實驗結果總結

了解了觸摸屏響應動作消息的函數的工作原理,通過修改實現了觸摸屏響應不同動作進行畫點、劃線、動態劃線的功能。驗證觸摸屏的靈敏度的實驗。

5.8 心得體會

通過這次實驗,我基本掌握了通過編程驅動觸摸屏以及觸摸屏響應時間,實現了觸摸屏對不同動作消息的響應。同時也知曉了在觸摸屏上的描點畫線的實現,但是由于不知名的原因,描點畫線的誤差較大,位置偏差較大,同時觸摸屏有時會不靈敏,出現時好時壞的現象,但是由于我們的辛勤鉆研,最終克服了這個困難,實現了最后的觸摸屏的實現。

6.實驗六

6.1 實驗名稱

UCOS-Ⅱ在ARM微處理器上的裁剪

6.2 實驗目的

1.了解UCOS-Ⅱ內核的主要結構。

2.掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法。3.學習如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。

4.通過對UCOS-Ⅱ配置文件(OS_CFG.H)中相關的配置常量進行設置,實現對UCOS-Ⅱ的裁剪。

6.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

6.4 實驗內容及要求

對UCOS-Ⅱ內核進行裁剪并移植到ARM7微處理器上。

6.5 實驗設計與實驗步驟 1.按照要求,載入STARTUP目錄下文件,完成系統初始化、環境配置。2.載入UCOS-Ⅱ的全部源碼,與處理器架構相關的文件位于arch目錄下。3.在os_cpu.h中編寫與處理器和編譯器相關的代碼。

4.編寫os_cpu_c.c等6個與操作系統相關的函數。5.編寫os_cpu.asm等4個與處理器相關的函數。

6.6 實驗過程與分析

按照實驗步驟進行,得到了需要的系統。

6.7 實驗結果總結

按照要求進行了裁剪,得到了滿足需要又緊湊的應用軟件系統。

6.8 心得體會

通過本次實驗,我了解了UCOS-Ⅱ內核的主要結構,掌握UCOS-Ⅱ裁剪的基本原理與嵌入式編程實現方法,學會了如何根據具體情況對UCOS-Ⅱ操作系統進行裁剪。

7.實驗七

7.1 實驗名稱

UCOS-Ⅱ在ARM微處理器上的移植和編譯

7.2 實驗目的

1.了解UCOS-Ⅱ內核的主要結構。

2.掌握將UCOS-Ⅱ內核移植到ARM7處理器上的基本方法。

7.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

7.4 實驗內容及要求

1.將UCOS-Ⅱ內核進行移植到ARM7微處理器上。

2.編寫兩個簡單任務,在超級終端上觀察兩個任務的切換。

7.5 實驗設計與實驗步驟

1.該實驗的文件分為兩類,其一是 STARTUP 目錄下的系統初始化、配置等文件,其二是 UCOS-Ⅱ的全部源碼,arch 目錄下的 3 個文件是和處理器架構相關的。

2.設置 os_cpu.h 中與處理器和編譯器相關的代碼。

3.用 C 語言編寫 6 個操作系統相關的函數(OS_CPU_C.C)。4.用匯編語言編寫 4 個與處理器相關的函數(OS_CPU.ASM)。5.編寫一個簡單的多任務程序來測試一下移植是否成功。6.編譯并下載移植后的 UCOS-Ⅱ。

7.6 實驗過程與分析

1.按照實驗步驟進行,將μC/OS-II 內核移植到了ARM7 微處理器上。2編寫了兩個簡單任務,在超級終端上觀察兩個任務的切換。

7.7 實驗結果總結

將μC/OS-II 內核順利移植到了ARM7 微處理器上。

7.8 心得體會

通過本次實驗,使我更加了解了μC/OS-II 內核的主要結構,掌握了ARM的C語言和匯編語言的編程方法,了解了ARM7處理器結構,掌握了將μC/OS-II 內核移植到ARM 7 處理器上的基本原理與嵌入式編程實現方法。

8.實驗八

8.1 實驗名稱

綜合實驗

8.2 實驗目的

對前七次實驗進行總結,應用之前所學的知識,將前幾次實驗內容結合起來,完成鍵盤,LED,觸摸屏,直流電機,步進電機各種功能的組合。實現一個較為全面的功能結構。

8.3 實驗環境

硬件:ARM 嵌入式開發平臺、用于ARM7TDMI 的JTAG 仿真器、PC 機Pentium100 以 上、串口線。

軟件:PC 機操作系統win98、Win2000 或WinXP、ARM SDT 2.51 或ADS1.2 集成開發 環境、仿真器驅動程序、超級終端通訊程序。

8.4 實驗內容及要求

對前七次實驗進行總結,應用之前所學的知識,完成自擬的嵌入式系統,要求綜合前期基礎實驗的各種功能。

8.5 實驗設計與實驗步驟

1.添加并打開工程。2.進行LCD設計,在LCD顯示屏輸出文本。

3.進行LED及鍵盤設計,完成LED輸出顯示功能和鍵盤輸入功能。4.進行電機控制設計,完成鍵盤控制電機轉動功能。5.進行中斷設計,完成定時中斷功能。

6.進行觸摸屏設計,完成觸摸屏感應和劃線功能。7.進行裁剪和移植功能設計和完成。

8.6 實驗過程與分析

1.完成LCD顯示功能,在LCD顯示屏上輸出文本:“Hello World!”。2.進入界面觸屏控制選擇功能,實現觸屏選擇功能。

3.自定義四種種功能,第一為電機控制,從鍵盤讀取命令,并將功能編號顯示在LED上,LED顯示的是計數的數據,同時旋轉按鈕完成電機轉速的控制選擇。

4.第三種功能為劃線,功能編號顯示在LED高四位上,同時LCD屏幕清屏,為劃線功能做準備,可以實現劃線功能。

5.第四種功能為定時中斷,當由鍵盤控制時,LED顯示數值清零,實現了中斷。6.實現裁剪與移植功能。

8.7 實驗結果總結

完成了各種基本功能,并通過自擬的系統將各種功能整合起來,完成了一個小的嵌入式系統,對前七次的功能有了更深入的了解。通過LED的計數,當在計數值在前30秒之內,由鍵盤控制LED的數值及顯示,按鍵盤上的某一個按鍵,實現對LED上的數值清零,后30秒由觸摸屏控制清零,并且在前30秒之內,旋轉按鈕,實現對直流電機的運轉,并且到步進電機的轉換。

8.8 心得體會

通過這次實驗,我更加深刻地掌握了前幾次實驗中的基本功能的實現方法,并且把幾種功能聯合在一起,實現一些功能,把LED 顯示屏,LCD觸摸屏,鍵盤,直流電機,步進電機等等設備聯合在一起,對該實驗有一定的幫助與提高,而我和我的隊友也對嵌入式系統有了更深入的了解,在此期間,也學習了關于ARM處理器的開發與實踐,了解了關于手機的嵌入式設備的產生過程,我也深深的對此充滿了興趣,對未來的嵌入式課程設計奠定了深厚的基礎,可是令我遺憾的是,我和隊員的水平所限,沒有完成中斷優先級的控制。本來想完成更多的功能,可是最后由于時間緊迫,也有一些其他的事情來分神分心,所以就只能完成這些,但是在未來的幾周內,嵌入式課程設計也給了我們很大的空間去做未完成的事情。我相信我們會做的更加完美,功能更強大,用于未來的生活中去實踐。

第五篇:《嵌入式系統設計》教學大綱

《嵌入式系統設計》課程教學大綱

嵌入式系統設計(Design of Embedded Systems)

一、課程教學目的和基本要求

教學目的:

嵌入式系統技術已被廣泛地應用于工業控制系統、信息家電、通信設備、醫療儀器、智能儀器儀表等眾多領域。如手機、PDA、MP3、手持設備、智能電話、機頂盒等,可以說嵌入式系統無處不在。本課程講述當前主流的嵌入式處理器—ARM的微處理器和實時操作系統μC/OS,介紹嵌入式系統的基本原理和應用及設計方法。通過本課程的學習,著重培養學生的實際動手能力,使學生掌握ARM的系統結構、指令系統、程序設計方法、系統擴展方法、應用及開發技術等。使學生在工作中具有利用嵌入式系統開發產品和解決實際問題的基本能力。

基本要求:

1、掌握嵌入式系統技術的基本原理。

2、了解并掌握ARM的系統結構、指令系統、程序設計方法、系統擴展方法、應用及開發技術等。

3、比較熟練地用ADS進行ARM實驗箱的編程及調試。

4、了解并掌握實時操作系統μC/OS,并學會用μC/OS開發小型應用系統。

二、先修課程及本課程總學時

先修課程:C程序設計語言、單片機原理 本課程總學時:36

三、課程章節及各章節學時安排

第一章 嵌入式系統概述(2學時)

第二章 嵌入式系統硬件基礎(2學時)

第三章 設計方法及ADS集成開發環境(4學時)

第一節 嵌入式系統的設計方法(2學時)第二節 ADS集成開發環境(2學時)第四章 ARM7體系結構(4學時)

第一節ARM7體系結構介紹(2學時)第二節ARM7TDMI(-S)指令集簡介。(2學時)第五章 ARM指令集(8學時)

第一節 ARM處理器尋址方式。(2學時)第二節ARM指令集。(2學時)第三節ARM匯編程序設計。(2學時)第四節C與匯編混合編程。(2學時)第六章 硬件結構與功能(12學時)第一節 LPC2106/2105/2104結構(2學時)第二節 GPIO及引腳連接模塊。(2學時)

第三節 UART0和UART1、I2C接口、SPI接口。(2學時)第四節 定時器0和定時器1。(2學時)第五節 脈寬調制器(PWM)。(2學時)

第六節 看門狗及Flash存儲器系統和編程。(2學時)第七章 μC/0S-II程序設計(4學時)

第一節 μC/0S-II簡介及移植(2學時)第二節 移植μC/0S-II。(2學時)

四、課程主要內容

第一章 嵌入式系統概述(2學時)

1、嵌入式系統簡介(包括什么是嵌入式系統,嵌入式系統的特點,嵌入式系統的分類)。

2、嵌入式系統的應用領域。

3、嵌入式系統的現狀和發展趨勢。

4、嵌入式微處理器和嵌入式操作系統。

5、嵌入式系統中的一些重要概念。難點:什么是嵌入式系統。

第二章 嵌入式系統硬件基礎(2學時)

1、嵌入式系統的總體結構。

2、與嵌入式系統相關的硬件知識。難點:總體結構。

第三章 設計方法及ADS集成開發環境(4學時)第一節 嵌入式系統的設計方法

包括嵌入式系統的設計流程,嵌入式系統的一般設計方法,嵌入式系統的硬件/軟件協同設計技術。第二節 ADS集成開發環境

1、ADS 1.2 集成開發環境的組成

2、工程的編輯

3、工程的調試

4、仿真器的安裝與應用 難點:調試、仿真器。

第四章 ARM7體系結構(4學時)第一節ARM7體系結構介紹

1、處理器模式。

2、內部寄存器。

3、程序狀態寄存器。

4、異常。

第二節ARM7TDMI(-S)指令集簡介。難點:異常。

第五章 ARM指令集(8學時)第一節 ARM處理器尋址方式。第二節ARM指令集。

第三節ARM匯編程序設計。第四節C與匯編混合編程。難點:ARM匯編程序設計。

第六章 硬件結構與功能(12學時)第一節 LPC2106/2105/2104結構

1、存儲器尋址。

2、系統控制模塊。

3、存儲器加速模塊。

4、向量中斷控制器。

第二節 GPIO及引腳連接模塊。

第三節 UART0和UART1、I2C接口、SPI接口。第四節 定時器0和定時器1。第五節 脈寬調制器(PWM)。

第六節 看門狗及Flash存儲器系統和編程。

難點:存儲器重新映射,編程實現功能部件的初始化和控制。本章實驗:LPC2106/2105/2104功能部件基礎實驗。

第七章 μC/0S-II程序設計(4學時)第一節 μC/0S-II簡介及移植

1、移植規則。

2、編寫LPC2106/2105/2104的啟動代碼。第二節 移植μC/0S-II。難點:移植μC/0S-II。本章實驗:學習移植μC/0S-II。

五、教材及主要參考書

教材:

《嵌入式系統設計與開發》,馬文華,科學出版社,2006年

主要參考書:

[1] 田苗苗.嵌入式控制系統.北京航空航天大學出版社,2002年 [2] 呂 駿 譯.嵌入式系統設計.電子工業出版社,2002年

[3] 周立功等.ARM微控制器基礎與實戰.北京航空航天大學出版社,2003年

[4] 李駒光等.ARM應用系統開發祥解.清華大學出版社,2003年

[5] 劭貝貝譯.uCOS-II-源代碼公開的實時嵌入式操作系統.中國電力出版社,2001年 [6] 田苗苗.嵌入式系統設計與實例開發.清華大學出版社,2002年 [7] 袁勤勇等譯.嵌入式系統構件.機械工業出版社,2002年 [8] 田苗苗.《實用嵌入式系統設計與開發—基于ARM微處理器與μCOS-II實時操作系統》(第二版),清華大學出版社,2003.9 [9] 邵貝貝譯.《源代碼公開的實時嵌入式操作系統——μCOS-II》,北京航空航天大學出版社,2003年

六、其他需要說明的情況

1.采用多媒體教學。

2.實驗課單列,每周2學時。

3.每周作業量2~3小時,主要針對基本概念、開發環境的操作和編程。

七、成績評定

1.理論考核

占60% 2.實踐考核

占40%(其中包括:實驗、作業、課堂提問、學生自行設計制作的作品)。

下載基于嵌入式系統的圖形界面應用設計范文word格式文檔
下載基于嵌入式系統的圖形界面應用設計范文.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    《嵌入式系統設計》教案

    嵌入式系統設計教案 課程總學時: 32 講課學時: 24 實驗學時: 8 授 課 人: 楊詞慧 南昌航空大學信息工程學院 目錄 1 嵌入式系統概述 ...............................................

    嵌入式系統設計中UML的應用論文(大全)

    摘要:隨著計算機技術的發展,嵌入式系統被廣泛應用到社會生產中。嵌入式計算機系統與普通的個人計算機系統存在很大區別,它具有節約成本、可靠性高等優勢,主要被用于工廠生產設備......

    嵌入式系統應用與學習心得體會

    μC/OS嵌入式實時操作系統的應用和學習心得 μC/OS-II 是一種基于優先級的搶占式多任務實時操作系統,包含了實時內核、任務管理、時間管理、任務間通信同步(信號量,郵箱,消息......

    北航—嵌入式系統設計教學大綱

    《嵌入式系統設計》課程計劃 北航機器人研究所王田苗魏洪興 一、課程名稱:嵌入式系統設計 二、課程目的: 嵌入式系統技術已被廣泛地應用于工業控制系統、信息家電、通信設備、......

    嵌入式系統設計基礎總結報告

    嵌入式系統設計基礎 嵌入式系統設計基礎 結題報告 學生1: 學生2: 學生3: 組長: 組長電話: 指導老師: 完成時間: 嵌入式系統設計基礎 目錄 目錄 ........................................

    《嵌入式系統原理及應用》結課論文格式模版

    《嵌入式系統原理及應用》 結課論文 題目:此處寫論文題目 學姓專班成 號 名 業 級 績 此處填寫學號 此處填寫姓名 機械電子工程 格式如:1班 北京理工大學珠海學院機械與車輛學......

    嵌入式系統及應用結課論文要求

    結課論文要求 1、內容要求:結合課程內容,結合本專業及其研究方向,自選專題闡述嵌入式系統應用技術,主要包括所選專題概述、基于STM32處理器的硬件系統(框圖)和基于嵌入式操作系統(......

    嵌入式系統實驗報告

    嵌入式系統實驗報告 學號: 姓 名: 班 級:13電子信息工程指導老師: 蘇州大學 電子信息學院 2016年12月 實驗一:一個燈的閃爍 1、實驗要求 實現PF6-10端口所連接的任意一個LED燈......

主站蜘蛛池模板: 麻豆传煤入口免费进入2023| 亚洲综合在线另类色区奇米| 成年午夜性影院免费观看| 狠狠色噜噜狠狠狠狠97首创麻豆| 四虎国产精品永久地址入口| 伦人伦xxx国产对白| 男女裸体影院高潮| 永久不封国产毛片av网煮站| 青楼妓女禁脔道具调教sm| 色猫咪av在线网址| 亚洲高清国产av拍精品青青草原| 国产精品a成v人在线播放| 一区二区精品视频日本| 久久精品aⅴ无码中文字字幕不卡| 色欲香天天天综合网站小说| 欧洲美女熟乱av| 2020国产成人精品影视| 999国内精品永久免费视频| 国产欧美性成人精品午夜| 亚洲v国产v欧美v久久久久久| 丰满肥臀大屁股熟妇激情视频| 麻豆免费观看高清完整视频| 久久中文字幕无码中文字幕有码| 亚洲欧美成人中文日韩电影网站| 亚洲人成网线在线播放va蜜芽| 中文字幕有码无码人妻av蜜桃| 国产精品嫩草影院av| 少妇高潮惨叫久久久久电影69| 中文字幕精品亚洲无线码vr| 亚洲精品久久久一区| 亚洲精品一区二区国产精华液| 精品国产一区二区三区四区色| 玩弄少妇肉体到高潮动态图| 在线天堂免费观看.www| 无码区a∨视频体验区30秒| 免费无码无遮挡裸体视频在线观看| 国产精成a品人v在线播放| 性欧美videofree高清极品| 久久国产精品老女人| 成人免费无码大片a毛片抽搐色欲| 色综合久久中文字幕无码|