1 引言
嵌入式系統(tǒng)是以應(yīng)用為中心、以計(jì)算機(jī)技術(shù)為基礎(chǔ), 軟硬件可裁, 符合應(yīng)用系統(tǒng)對(duì)功能、可靠性、體積、功耗等嚴(yán)格要求的專(zhuān)用系統(tǒng)。SOPC技術(shù)作為一門(mén)全新的綜合性電子設(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)嵌的處理器中編寫(xiě)C代碼完成既定任務(wù), 實(shí)現(xiàn)FPGA與DSP處理器的結(jié)合, 這也是今后發(fā)展的必然趨勢(shì)。
對(duì)于嵌入式系統(tǒng)而言, 應(yīng)用程序可以沒(méi)有操作系統(tǒng)而直接在芯片上運(yùn)行, 但隨著應(yīng)用復(fù)雜度的不斷增加, 多任務(wù)需要合理的調(diào)度, 系統(tǒng)資源、系統(tǒng)函數(shù)以及專(zhuān)有函數(shù)接口需要得到充分的利用, 此時(shí)選配嵌入式操作系統(tǒng)開(kāi)發(fā)平臺(tái)便顯得尤為重要。因?yàn)橹挥羞@樣才能保證程序執(zhí)行的實(shí)時(shí)性和可靠性, 并減少開(kāi)發(fā)時(shí)間, 提高軟件質(zhì)量。而Linux作為一個(gè)免費(fèi)的操作系統(tǒng), 由于其具有開(kāi)放源代碼、內(nèi)核穩(wěn)定、功能強(qiáng)大、可裁剪和低成本的特性, 而倍受嵌入式開(kāi)發(fā)者的青睞。
本系統(tǒng)結(jié)合Xilinx公司推出的基于SOPC技術(shù)的嵌入式處理器PowerPC硬核, 在XUP Virtex2II Pro開(kāi)發(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ù)是一門(mén)全新的綜合性電子設(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及可編程邏輯, 用戶(hù)可以利用SOPC平臺(tái)自行設(shè)計(jì)各種高速高性能的DSP處理器或特定功能的CPU處理器, 從而使得電子系統(tǒng)設(shè)計(jì)進(jìn)入了一個(gè)全新的模式[ 1]。
Xilinx公司結(jié)合其高端芯片Virtex- II Pro和Virtex 4 FPGA推出了全新的嵌入式開(kāi)發(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è)試, 其開(kāi)發(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í)支持用戶(hù)定義的指令等等, 這些都使得移植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è), 如串口、鍵盤(pán)等; PLB總線和OPB總線通過(guò)總線橋接器相連。DCR 總線用于實(shí)現(xiàn)PowerPC的通用寄存器與邏輯設(shè)備控制寄存器的數(shù)據(jù)通信。
嵌入式系統(tǒng)設(shè)計(jì)涉及了硬件和軟件的開(kāi)發(fā)以及兩者的綜合設(shè)計(jì)。針對(duì)Linux的移植問(wèn)題, 硬件部分采用的開(kāi)發(fā)工具是Xilinx公司提供的功能強(qiáng)大、操作簡(jiǎn)單的工具集EDK911。EDK自帶了許多工具和IP, 主要包括Xilinx平臺(tái)工作室XPS、軟件開(kāi)發(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ì)流程見(jiàn)圖1。

3 搭建硬件平臺(tái)及軟件平臺(tái)設(shè)置
311 硬件平臺(tái)設(shè)置
針對(duì)實(shí)際的需要及現(xiàn)有的硬件條件, 利用EDK開(kāi)發(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中打開(kāi)軟件平臺(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ù)的值依賴(lài)于之前的硬件平臺(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)類(lèi)型(選擇默認(rèn)選項(xiàng)sysace), 需要注意的是這里選擇的類(lèi)型只代表系統(tǒng)工作時(shí)根文件的默認(rèn)類(lèi)型, 具體使用的類(lèi)型可以在L inux內(nèi)核編譯過(guò)程中修改, 當(dāng)根文件類(lèi)型設(shè)置為ramd isk 類(lèi)型時(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ī)器編譯生成, 一般稱(chēng)前者為目標(biāo)機(jī), 后者為主機(jī)。采用交叉編譯主要在于多數(shù)嵌入式目標(biāo)系統(tǒng)沒(méi)有足夠的資源供編譯過(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。打開(kāi)該文件并修改相關(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開(kāi)發(fā)樹(shù)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 代碼的開(kāi)發(fā)與調(diào)試。使用XMD進(jìn)行調(diào)試時(shí), 首先將包含硬件信息的ledlinux.bit文件下載到開(kāi)發(fā)板中, 打開(kāi)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其他磁盤(pán)系統(tǒng)掛接點(diǎn), /etc系統(tǒng)配置文件存放目錄, /boot引導(dǎo)加載程序所使用的靜態(tài)文件, /sb in 系統(tǒng)程序目錄, /b in 基本應(yīng)用程序目錄, /usr其他工具以及用戶(hù)程序的存放處。根文件系統(tǒng)根據(jù)系統(tǒng)具體的需要有不同的類(lèi)型, 如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)由目錄樹(shù)、庫(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)的制作, 并且編寫(xiě)了mkrootfs. sh腳本文件, 為簡(jiǎn)化起見(jiàn), 我們通過(guò)修改并運(yùn)行mkrootfs. sh腳本文件制作根文件系統(tǒng)。制作過(guò)程中需要注意的是Kingauf制作的腳本文件中沒(méi)有包含設(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)核文件下載到開(kā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)行介紹。
適合開(kāi)發(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ū)類(lèi)型為FAT16, 用于存放system.ace文件; /swap分區(qū)大小為256MB, 類(lèi)型屬于L inux Swap( 82 ); 其余空間分配給/根分區(qū), 其類(lèi)型為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 文件類(lèi)型。CF卡格式化完成后, 將制作好的ACE 文件sys2 tem. ace拷貝到CF卡中, 同時(shí)將開(kāi)發(fā)板上的啟動(dòng)路徑選為從CF卡啟動(dòng), 打開(kāi)開(kāi)發(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)中我們編寫(xiě)了簡(jiǎn)單的設(shè)備驅(qū)動(dòng)程序, 實(shí)現(xiàn)操作系統(tǒng)與硬件外設(shè)及FPGA中IP的通信, 并編寫(xiě)應(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ù)的開(kāi)發(fā)。
電子發(fā)燒友App










評(píng)論