1 引言
嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ), 軟硬件可裁, 符合應(yīng)用系統(tǒng)對(duì)功能、可靠性、體積、功耗等嚴(yán)格要求的專用系統(tǒng)。SOPC技術(shù)作為一門全新的綜合性電子設(shè)計(jì)技術(shù), 結(jié)合了片上系統(tǒng)SOC和PLD、FPGA各自的優(yōu)點(diǎn), 集成了CPU、DSP、存儲(chǔ)器、外圍I /O及可編程邏輯, 它涵蓋了嵌入式系統(tǒng)設(shè)計(jì)技術(shù)的全部?jī)?nèi)容, 是目前嵌入式系統(tǒng)設(shè)計(jì)的中堅(jiān)力量。隨著SOPC技術(shù)的發(fā)展, FPGA規(guī)模的不斷擴(kuò)大, 將處理器嵌入到FPGA 中成為必然的發(fā)展趨勢(shì)。Xilinx公司結(jié)合其Virtex- II pro等芯片在FPGA中嵌入了PowerPC處理器硬核。在FPGA中嵌入處理器一方面可以充分發(fā)揮FPGA 吞吐率大,資源豐富等優(yōu)勢(shì), 另一方面結(jié)合處理器的特點(diǎn), 在內(nèi)嵌的處理器中編寫C代碼完成既定任務(wù), 實(shí)現(xiàn)FPGA與DSP處理器的結(jié)合, 這也是今后發(fā)展的必然趨勢(shì)。
對(duì)于嵌入式系統(tǒng)而言, 應(yīng)用程序可以沒有操作系統(tǒng)而直接在芯片上運(yùn)行, 但隨著應(yīng)用復(fù)雜度的不斷增加, 多任務(wù)需要合理的調(diào)度, 系統(tǒng)資源、系統(tǒng)函數(shù)以及專有函數(shù)接口需要得到充分的利用, 此時(shí)選配嵌入式操作系統(tǒng)開發(fā)平臺(tái)便顯得尤為重要。因?yàn)橹挥羞@樣才能保證程序執(zhí)行的實(shí)時(shí)性和可靠性, 并減少開發(fā)時(shí)間, 提高軟件質(zhì)量。而Linux作為一個(gè)免費(fèi)的操作系統(tǒng), 由于其具有開放源代碼、內(nèi)核穩(wěn)定、功能強(qiáng)大、可裁剪和低成本的特性, 而倍受嵌入式開發(fā)者的青睞。
本系統(tǒng)結(jié)合Xilinx公司推出的基于SOPC技術(shù)的嵌入式處理器PowerPC硬核, 在XUP Virtex2II Pro開發(fā)平臺(tái)上, 將Linux操作系統(tǒng)嵌入到PowerPC405處理器中, 最后給出了一個(gè)成功運(yùn)行的測(cè)試實(shí)例。
2 SOPC技術(shù)及PowerPC硬核介紹
所謂SOPC( System On Programmab le Chip)即可編程的片上系統(tǒng), 在一片系統(tǒng)芯片上通過(guò)編程來(lái)實(shí)現(xiàn)一整套嵌入式系統(tǒng)的搭建。SOPC技術(shù)盡可能在單片F(xiàn)PGA上集成大規(guī)模的完整的電子系統(tǒng), 包括處理器系統(tǒng)、外設(shè)控制器系統(tǒng)、存儲(chǔ)器、DSP系統(tǒng)、通信系統(tǒng)和普通的數(shù)字電路邏輯等, 從而使得電子電路系統(tǒng)在功能、規(guī)模、可靠性、體積、功耗、性能指標(biāo)、上市周期及其硬件升級(jí)等多方面達(dá)到綜合上的最優(yōu)化; SOPC設(shè)計(jì)技術(shù)是一門全新的綜合性電子設(shè)計(jì)技術(shù), 涉及面很廣, 它將普通EDA 技術(shù)、計(jì)算機(jī)系統(tǒng)、嵌入式系統(tǒng)、工業(yè)自動(dòng)化控制系統(tǒng)、DSP及無(wú)線電等融為一體, 涵蓋了嵌入式系統(tǒng)設(shè)計(jì)技術(shù)的全部?jī)?nèi)容; 同時(shí)它結(jié)合了SOC 和PLD、FPGA 各自的優(yōu)點(diǎn), 集成了CPU、DSP、存儲(chǔ)器、外圍I/O及可編程邏輯, 用戶可以利用SOPC平臺(tái)自行設(shè)計(jì)各種高速高性能的DSP處理器或特定功能的CPU處理器, 從而使得電子系統(tǒng)設(shè)計(jì)進(jìn)入了一個(gè)全新的模式[ 1]。
Xilinx公司結(jié)合其高端芯片Virtex- II Pro和Virtex 4 FPGA推出了全新的嵌入式開發(fā)系統(tǒng), 利用先進(jìn)的IP植入技術(shù), 實(shí)現(xiàn)以硬核PowerPC405或軟核Microblaze 32位處理器為核心的SOPC系統(tǒng)。本系統(tǒng)將L inux操作系統(tǒng)移植到內(nèi)嵌于芯片Virtex-II Pro的PowerPC405硬核中, 并完成了相應(yīng)的測(cè)試, 其開發(fā)平臺(tái)是ML300。
PowerPC405是一個(gè)32位、采用IBM. PowerPC體系結(jié)構(gòu)的嵌入式處理器。它的運(yùn)行頻率高達(dá)400MH z; 具有5階段流水線; 32* 32bit通用寄存器;增強(qiáng)的指令和數(shù)據(jù)片上存儲(chǔ)器控制器, 直接與嵌入式塊RAM接口; 支持JTAG調(diào)試和跟蹤; 新的輔助處理器單元(APU)控制器, 使CPU管道直接與FPGA 架構(gòu)接口; 同時(shí)支持用戶定義的指令等等, 這些都使得移植Linux 到該目標(biāo)板上成為可能。另外PowerPC405處理器采用IBM CoreConnect總線技術(shù), 該總線結(jié)構(gòu)由處理器局部總線( PLB)、片上外設(shè)總線(OPB)和設(shè)備控制寄存器總線(DCR)組成。PLB總線為片內(nèi)的高速數(shù)據(jù)通道, 通常連接高速外設(shè)、DMA存儲(chǔ)控制器等; OPB總線通常用于連接速率較低的片上外設(shè), 如串口、鍵盤等; PLB總線和OPB總線通過(guò)總線橋接器相連。DCR 總線用于實(shí)現(xiàn)PowerPC的通用寄存器與邏輯設(shè)備控制寄存器的數(shù)據(jù)通信。
嵌入式系統(tǒng)設(shè)計(jì)涉及了硬件和軟件的開發(fā)以及兩者的綜合設(shè)計(jì)。針對(duì)Linux的移植問(wèn)題, 硬件部分采用的開發(fā)工具是Xilinx公司提供的功能強(qiáng)大、操作簡(jiǎn)單的工具集EDK911。EDK自帶了許多工具和IP, 主要包括Xilinx平臺(tái)工作室XPS、軟件開發(fā)套件SDK和XMD, 可方便的規(guī)劃、設(shè)計(jì)并生成整個(gè)片上系統(tǒng)的硬件和軟件結(jié)構(gòu)。軟件部分主要指內(nèi)核配置部分在L inux操作系統(tǒng)下完成, 最終的檢測(cè)部分則在XMD下實(shí)現(xiàn)。
將Linux嵌入到PowerPC中的設(shè)計(jì)流程見圖1。
3 搭建硬件平臺(tái)及軟件平臺(tái)設(shè)置
311 硬件平臺(tái)設(shè)置
針對(duì)實(shí)際的需要及現(xiàn)有的硬件條件, 利用EDK開發(fā)工具, 搭建具有下面特性的硬件平臺(tái)。
( 300MHz處理器時(shí)鐘頻率;
( FPGA JTAG編譯;
( 串口OPB- UARTLITE (波特率9600, 數(shù)據(jù)寬度8位, 無(wú)奇偶校驗(yàn));
( CF卡控制器SysACE;
( 256MB內(nèi)存DDR以及LED, 以上各個(gè)部件都有中斷支持。具體的硬件信息如圖2所示。通過(guò)執(zhí)行EDK中的命令Generate Bitstream產(chǎn)生包含上述信息的比特流文件( led-linux. bit)。
312 軟件平臺(tái)設(shè)置
硬件比特流文件產(chǎn)生之后, 需要配置相應(yīng)的軟件信息生成軟件板級(jí)支持包BSP。在EDK中打開軟件平臺(tái)設(shè)置, 在操作系統(tǒng)選項(xiàng)選擇linux- 2- 6, 如圖3 所示。在OS and L ibraries選項(xiàng)設(shè)置系統(tǒng)相應(yīng)的參數(shù), 如圖4所示, 這些參數(shù)的值依賴于之前的硬件平臺(tái)設(shè)置。Connected- periphs 選項(xiàng)用于設(shè)置Linux系統(tǒng)中需要支持的硬件設(shè)備(主要包括串口,DDR, CF 卡控制器, 中斷, 燈等), Memory size 為DDR 內(nèi)存容量設(shè)置大小( 256MB 對(duì)應(yīng)的值為0x10000000), uart bus block freq設(shè)置為總線時(shí)鐘頻率( 100MH z), rootfs type為所選根文件系統(tǒng)類型(選擇默認(rèn)選項(xiàng)sysace), 需要注意的是這里選擇的類型只代表系統(tǒng)工作時(shí)根文件的默認(rèn)類型, 具體使用的類型可以在L inux內(nèi)核編譯過(guò)程中修改, 當(dāng)根文件類型設(shè)置為ramd isk 類型時(shí), ramd isk size設(shè)置ram2d isk大小。sysace partition 用于設(shè)置CF 卡的分區(qū)情況。
相應(yīng)的參數(shù)設(shè)置完成后, 運(yùn)行Generate Librar ies and BSPs選項(xiàng), 就可以生成與具體硬件相匹配的板級(jí)支持包( BSP)了, 該支持包存于\ppc405- 0 \ libsrc\ linux- 2- 6- v1- 00- a \linux文件夾中。
4 嵌入式Linux系統(tǒng)構(gòu)建
411 建立交叉編譯環(huán)境
交叉編譯是嵌入式研發(fā)過(guò)程中的一項(xiàng)重要技術(shù)[ 8], 它的主要特征是某機(jī)器中執(zhí)行的程式代碼不是在本機(jī)編譯生成的, 而是由另一臺(tái)機(jī)器編譯生成, 一般稱前者為目標(biāo)機(jī), 后者為主機(jī)。采用交叉編譯主要在于多數(shù)嵌入式目標(biāo)系統(tǒng)沒有足夠的資源供編譯過(guò)程使用, 只能將編譯工程轉(zhuǎn)移到高性能的主機(jī)中進(jìn)行。
Linux的交叉編譯環(huán)境的建立主要包括以下幾個(gè)部分:
( 針對(duì)目標(biāo)系統(tǒng)的編譯器gcc(本系統(tǒng)使用的是gcc- 31414);
( 針對(duì)目標(biāo)系統(tǒng)的二進(jìn)制工具binutils(本系統(tǒng)使用的是binutils- 2115);
( 目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫(kù)glibc(本系統(tǒng)使用的是glibc- 21315);
( 目標(biāo)系統(tǒng)的linux內(nèi)核頭文檔。
為避免復(fù)雜、繁瑣的交叉編譯環(huán)境的建立過(guò)程,本系統(tǒng)中利用現(xiàn)成的腳本文件crosstool- 0143來(lái)完成PowerPC交叉編譯環(huán)境的建立。首先下載建立交叉編譯環(huán)境所需要的各個(gè)編譯工具(上面提到的),解壓crosstool20143. tar. gz, 在得到的文件夾中找到與使用平臺(tái)相對(duì)應(yīng)的arch: demo2powerpc2405. sh。打開該文件并修改相關(guān)源文件的存放地址。TAR2 BALLS- DIR 為gcc、glibc 等源代碼包的存放地址,RESULT- TOP 是交叉編譯環(huán)境的安裝目錄。修改eval - ca t powerpc2405. dat gcc2411102glibc221316.dat. sh a l.l sh2notestls, 將其改為適合XUP平臺(tái)的dat文件, 本系統(tǒng)中使用的是gcc231414和glibc221315。修改完成后執(zhí)行demo- powerpc2405. sh即可生成針對(duì)Powerpc405的交叉編譯環(huán)境。
412 添加BSP文件和配置內(nèi)核
從網(wǎng)站上下載virtex的linux開發(fā)樹linux22162 xlnx22124, 該內(nèi)核源代碼包含有xilinx的硬件信息,因此可以直接使用而不用更新。
將212節(jié)中生成的板級(jí)支持包BSP中相關(guān)的文件拷貝到內(nèi)核源代碼的相關(guān)文件夾中, 其中最重要、也是需要特別關(guān)注的文件是包含有當(dāng)前系統(tǒng)硬件平臺(tái)信息的xparameters- m B00. h, 將其放置在Xparameters文件夾中。
在配置內(nèi)核之前, 首先需要修改關(guān)系整個(gè)內(nèi)核配置、編譯信息的控制文件Makefile, 這里主要是修改硬件平臺(tái)信息和交叉編譯工具信息。
ARCH: = ppc
CROSS- COMPILE = powerpc24052linux2gnu2
在Linux平臺(tái)上運(yùn)行makemenuconfig配置內(nèi)核模塊, 這里選擇的是最小系統(tǒng)配置。
內(nèi)核配置過(guò)程復(fù)雜, 源代碼中某些特性的錯(cuò)誤添加可能會(huì)導(dǎo)致無(wú)法正常編譯, 或者無(wú)法正常運(yùn)行。因此在配置內(nèi)核時(shí)最好先生成最小、可以保證運(yùn)行的。 con fig文件, 再根據(jù)需要添加一些特性。內(nèi)核配置完成后, 執(zhí)行make 命令, 編譯linux內(nèi)核, 生成zImage. elf文件。
利用XMD工具對(duì)生成的內(nèi)核進(jìn)行檢驗(yàn), 檢查配置的內(nèi)核是否可以正常運(yùn)行。XMD是Xilinx為PowerPC提供的一種軟件調(diào)試方法, 它通過(guò)命令行的形式實(shí)現(xiàn)PowerPC 代碼的開發(fā)與調(diào)試。使用XMD進(jìn)行調(diào)試時(shí), 首先將包含硬件信息的ledlinux.bit文件下載到開發(fā)板中, 打開XMD, 輸入命令dow zImage. el,f 即將內(nèi)核配置文件下載到目標(biāo)板中, 觀察串口端的輸出, 如圖5所示。如果內(nèi)核配置的有問(wèn)題, 串口端顯示將停滯在Now booting the kerne,l 此時(shí)需要我們重新配置內(nèi)核。
4. 3 制作根文件系統(tǒng)
根文件系統(tǒng)是L inux系統(tǒng)不可或缺的組件, 用于控制對(duì)數(shù)據(jù)文件及設(shè)備的存取, 提供對(duì)文件和目錄的分層組織形式、數(shù)據(jù)緩存及對(duì)文件存取權(quán)限的控制。根文件系統(tǒng)一般包括以下目錄: /dev設(shè)備文件目錄, / lib共享函數(shù)庫(kù)目錄, /proc 內(nèi)核情況的映射虛目錄, /mnt其他磁盤系統(tǒng)掛接點(diǎn), /etc系統(tǒng)配置文件存放目錄, /boot引導(dǎo)加載程序所使用的靜態(tài)文件, /sb in 系統(tǒng)程序目錄, /b in 基本應(yīng)用程序目錄, /usr其他工具以及用戶程序的存放處。根文件系統(tǒng)根據(jù)系統(tǒng)具體的需要有不同的類型, 如RAM disk根文件系統(tǒng), JFFS2根文件系統(tǒng), TMPFS根文件系統(tǒng)等。本系統(tǒng)中采用的是RAM disk根文件系統(tǒng),下面詳細(xì)介紹該文件系統(tǒng)的構(gòu)建過(guò)程。
RAM disk根文件系統(tǒng)的制作首先是定義RAM大小及支持的文件系統(tǒng)格式, 如圖6所示, 并將該系統(tǒng)加載到定義好的RAM disk 中。根文件系統(tǒng)由目錄樹、庫(kù)函數(shù)及系統(tǒng)程序和基本的應(yīng)用程序等組成,構(gòu)建它時(shí)首先創(chuàng)建dev、proc、bin、sbin、etc、lib 等目錄, 接著將目錄里所需文件移植進(jìn)該文件系統(tǒng)中。Kingauf詳細(xì)介紹了根文件系統(tǒng)的制作, 并且編寫了mkrootfs. sh腳本文件, 為簡(jiǎn)化起見, 我們通過(guò)修改并運(yùn)行mkrootfs. sh腳本文件制作根文件系統(tǒng)。制作過(guò)程中需要注意的是Kingauf制作的腳本文件中沒有包含設(shè)備文件, 因此設(shè)備文件需要另行添加。根文件系統(tǒng)制作完成后, 將它拷貝到定義好的RAM disk中, 經(jīng)壓縮后放置在內(nèi)核對(duì)應(yīng)的文件夾中, 此時(shí)RAM disk根文件系統(tǒng)就制作完成了。
根文件系統(tǒng)的檢測(cè)也是利用XMD工具完成的。在Linux操作系統(tǒng)下使用make zImage. in itrd命令重新編譯內(nèi)核, 該命令將文件系統(tǒng)信息包含在內(nèi)核文件中。把生成的內(nèi)核文件zImage. in itrd elf拷貝到工程文件夾下。在XMD界面下, 輸入命令dow zImage. in itrd. el,f 將包含文件系統(tǒng)信息的內(nèi)核文件下載到開發(fā)板中, 待串口輸出-# 。 時(shí), 表示內(nèi)核文件下載成功, 此時(shí)可以通過(guò)輸入命令如cd, find等, 來(lái)檢測(cè)根文件系統(tǒng), 如圖7所示。
4. 4 生成ACE文件及CF卡分區(qū)
使用XMD工具可以方便的對(duì)內(nèi)核文件、根文件系統(tǒng)及程序源代碼進(jìn)行檢測(cè), 但在具體的應(yīng)用中, 操作系統(tǒng)等都應(yīng)該是自行引導(dǎo)的, 而并非手動(dòng)加載, 實(shí)際中有很多方法可以解決這一問(wèn)題, 可以通過(guò)構(gòu)建bootloader引導(dǎo)程序, 也可以通過(guò)CF卡直接引導(dǎo)。本系統(tǒng)采用了第二種方法, 它的制作過(guò)程需要注意兩個(gè)方面, 即生成ACE格式文件和對(duì)CF卡分區(qū)并對(duì)其進(jìn)行格式化, 下面分別對(duì)這兩個(gè)方面進(jìn)行介紹。
適合開發(fā)板m B00的ACE 格式文件是在Cyg2 win shell中成功運(yùn)行圖8中的程序代碼而產(chǎn)生的。
為了最大限度的模擬正常的Linux, 我們將CF卡分為/boot分區(qū), /swap分區(qū)和/根分區(qū), 具體的分區(qū)過(guò)程是利用函數(shù)fdisk來(lái)完成的。系統(tǒng)設(shè)計(jì)中使用的是2G的CF 卡, 分區(qū)后的效果為/boot分區(qū)大小為32MB, 分區(qū)類型為FAT16, 用于存放system.ace文件; /swap分區(qū)大小為256MB, 類型屬于L inux Swap( 82 ); 其余空間分配給/根分區(qū), 其類型為L(zhǎng)inux( 83), 用于存放根文件系統(tǒng)。格式化/boot分區(qū)時(shí)運(yùn)行的命令是mkdosfs ) s 64 ) F 16 ) R 1 F: ,將該分區(qū)格式化為dos文件系統(tǒng); 格式化/swap分區(qū)時(shí)運(yùn)行的命令為mkswap /dev/hde2, 將該區(qū)格式化為swap文件系統(tǒng); 格式化/根分區(qū)運(yùn)行的命令是mke2fs /dev/hde3, 將該分區(qū)格式化為ext2 文件類型。CF卡格式化完成后, 將制作好的ACE 文件sys2 tem. ace拷貝到CF卡中, 同時(shí)將開發(fā)板上的啟動(dòng)路徑選為從CF卡啟動(dòng), 打開開發(fā)板電源后, 本地引導(dǎo)Linux并載入運(yùn)行, 在串口上看到提示符-# 。 后, 移植成功。
5 具體應(yīng)用及結(jié)論
為了檢測(cè)及充分利用定制的操作系統(tǒng), 發(fā)揮PowerPC硬核的優(yōu)勢(shì), 驗(yàn)證SOPC 技術(shù)結(jié)合FPGA實(shí)現(xiàn)信號(hào)處理設(shè)計(jì)的可行性, 系統(tǒng)中我們編寫了簡(jiǎn)單的設(shè)備驅(qū)動(dòng)程序, 實(shí)現(xiàn)操作系統(tǒng)與硬件外設(shè)及FPGA中IP的通信, 并編寫應(yīng)用程序代碼點(diǎn)亮了目標(biāo)板上的燈。從而驗(yàn)證了操作系統(tǒng)可以正常工作并能完成預(yù)期的任務(wù), 同時(shí)驗(yàn)證了SOPC 技術(shù)、操作系統(tǒng)與FPGA完美結(jié)合來(lái)完成信號(hào)處理任務(wù)的可能性。
本系統(tǒng)中實(shí)現(xiàn)了在PowerPC中定制特定的硬件系統(tǒng), 編譯交叉環(huán)境, 最終將L inux操作系統(tǒng)下載到PowerPC中, 從而實(shí)現(xiàn)了嵌入式系統(tǒng), Linux操作系統(tǒng)與FPGA的結(jié)合, 為完成信號(hào)處理任務(wù)提供了一種新的方法。在今后的研究工作中, 可以在PowerPC中嵌入基于復(fù)雜應(yīng)用的IP核, 如FFT、FIR 等處理模塊, 結(jié)合Linux操作系統(tǒng)的特點(diǎn), 完成大型系統(tǒng)的構(gòu)建, 提高系統(tǒng)的可移植性, 方便后續(xù)的開發(fā)。
評(píng)論