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