基于ARM9內(nèi)核和嵌入式Linux的網(wǎng)絡(luò)投影機(jī)系統(tǒng)設(shè)計(jì)
3 嵌入式投影機(jī)應(yīng)用系統(tǒng)架構(gòu)詳細(xì)設(shè)計(jì)
3.1 硬件平臺(tái)的選擇
基于嵌入式微處理器在嵌入式系統(tǒng)中的核心地位,選擇一款恰當(dāng)?shù)奶幚砥鞣浅V匾D壳笆袌?chǎng)主流的32位微處理器主要有Power PC、68K、MIPS 和ARM 等。通常在選擇微處理器時(shí), 需要考慮很多因素, 如性能、功耗、價(jià)格、配套的開(kāi)發(fā)工具以及市場(chǎng)的供貨情況, 而ARM 在這些方面都具有優(yōu)勢(shì)。同時(shí)ARM 還具有業(yè)界領(lǐng)先的RISC 體系架構(gòu), 所以, 選擇基于ARM 核的處理器是最理想的。
本設(shè)計(jì)采用S3C2410 開(kāi)發(fā)板為硬件平臺(tái)。該平臺(tái)在盡可能小的電路板面積上集成了64 M SDRAM、64 MNand Flash 、1 M Nor Flash 、RJ -45 網(wǎng)卡、音頻輸入與輸出、USB Host 、USB Slave 、標(biāo)準(zhǔn)串口、SD 卡插座、, 用戶按鍵和一些用戶燈等設(shè)備接口, 并且引出CPU 的大部分信號(hào)引腳。通過(guò)這個(gè)平臺(tái)可以針對(duì)S3C2410 進(jìn)行系統(tǒng)級(jí)的硬件和軟件設(shè)計(jì), 并且能夠很方便地在該平臺(tái)上進(jìn)行相關(guān)的功能擴(kuò)展, 并進(jìn)行所需的產(chǎn)品設(shè)計(jì)。
3.2 系統(tǒng)的軟件實(shí)現(xiàn)
3.2.1 開(kāi)發(fā)平臺(tái)宿主機(jī)的配置
本系統(tǒng)的開(kāi)發(fā)平臺(tái)選擇ubuntu 8.04 LTS 。首先從網(wǎng)絡(luò)上下載vmware workstation 的體驗(yàn)版, 在Windows XP環(huán)境下安裝配置好。從網(wǎng)絡(luò)下載ubuntu 8.04 LTS 版本的ISO 鏡像文件, 在vmware workstation 虛擬機(jī)環(huán)境下安裝配置好ubuntu 8.04 LTS 系統(tǒng), 設(shè)置虛擬機(jī)中ubuntu 系統(tǒng)的網(wǎng)絡(luò)連接方式為Bridged , 通過(guò)apt 軟件包管理程序可以方便地安裝配置虛擬機(jī)中的ubuntu 開(kāi)發(fā)環(huán)境, 安裝系統(tǒng)開(kāi)發(fā)所必須的程序庫(kù), 如build-essential,samba 以及openssh-server 等。
3.2.2 開(kāi)發(fā)過(guò)程
(1) 搭建交叉編譯環(huán)境
當(dāng)開(kāi)發(fā)嵌入式Linux 軟件時(shí), 一般都要經(jīng)過(guò)交叉編譯。如果是開(kāi)發(fā)PC 機(jī)上的軟件, 只要用Linux 本身提供的強(qiáng)大的編譯器(如GCC) 直接編譯即可。而一般的嵌入式設(shè)備所用的CPU 和PC 機(jī)上的CPU 有著不同的架構(gòu),這樣就要求在PC 機(jī)上編譯出適用于嵌入式設(shè)備CPU 架構(gòu)的軟件,這就是交叉編譯的概念。圖2 是交叉編譯環(huán)境圖示。
(2)U-boot 的移植
嵌入式的軟件系統(tǒng)主要由Bootloader 、Kernel 、嵌入式文件系統(tǒng)以及應(yīng)用程序等組成。其中,Bootloader 是介于硬件和操作系統(tǒng)之間的一層, 其作用就好像PC 機(jī)中的BIOS 。系統(tǒng)加電運(yùn)行后, 由系統(tǒng)自動(dòng)加載, 通過(guò)這段程序, 可以初始化硬件設(shè)備, 建立內(nèi)存空間的映射圖, 從而將系統(tǒng)的硬件環(huán)境引導(dǎo)到一個(gè)合適的狀態(tài), 以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。本系統(tǒng)對(duì)于bootloader的選擇采用Das U-boot, 由于U-boot 的使用范圍相當(dāng)廣, 因此很容易找到關(guān)于U-boot 移植的相關(guān)資料。Uboot引導(dǎo)程序分為stage1 和stage 2 兩大部分,stage1 中主要包括設(shè)備初始化、中斷設(shè)置、時(shí)鐘的設(shè)置以及存儲(chǔ)器初始化等工作, 并且采用匯編語(yǔ)言實(shí)現(xiàn), 而一些通用功能大多采用C 語(yǔ)言實(shí)現(xiàn), 放在stage 2 階段執(zhí)行。
修改cpu/arm920t/start.s 文件,start.s 文件是采用匯編語(yǔ)言編寫的U-boot 程序入口代碼, 完成對(duì)底層硬件的初始化。
修改board/smdk2410/nand_read.c 中的nand_read_11函數(shù)將stage 2 階段的代碼復(fù)制到ram 中。
修改U-boot 根目錄下的makefile 文件完成以后, 依次在終端中執(zhí)行:
Make distclean // 清除生成的鏈接
Make smdk2410_config
Make CROSS -COMPILE=arm-linux - 編譯成功后, 將生成三個(gè)文件, 其中需要燒到開(kāi)發(fā)板中的文件是二進(jìn)制的u-boot.bin 文件。
(3) 裁剪Linux 內(nèi)核
修改根目錄下的makefile 文件, 指定目標(biāo)平臺(tái)為ARM,ARCH:=arm, 指定交叉編譯器,CROSS_COMPILE=/usr/local/3.3.2/bin/arm-linux-gcc 內(nèi)核移植完成后, 可以對(duì)內(nèi)核進(jìn)行配置, 一般用“make menuconfig ” 命令即可,具體的配置要根據(jù)自己的軟件平臺(tái)以及應(yīng)用程序的使用情況來(lái)確定, 內(nèi)核要盡可能小, 以滿足嵌入式系統(tǒng)資源少的特點(diǎn)。
linux相關(guān)文章:linux教程
評(píng)論