EP1K50TI144-2N
型號:EP1K50TI144-2N 歡迎來電咨詢!可提供原廠技術支持,方案開發(fā),幫助客戶選型!
===========================================
深圳市毅創(chuàng)騰電子科技有限公司
電話:(86)-755-83210909 83616256 83210801 83213361
企業(yè)QQ: 2355507165 / 2355507163
===========================================
深圳市毅創(chuàng)騰電子科技有限公司是一家大型、專業(yè)的XILINX(賽靈思)、ALTERA(阿特拉)、FREESCALE(飛思卡爾)、Analog Devices、TexasInstruments嵌入式FPGA、CPLD、微控制器、數字信號處理等集成電路銷售與服務的授權分銷商。也是亞太地區(qū)最大規(guī)模的原裝XILINX、ALTERA、FREESCALE產品供應商之一。
===========================================
下面詳細介紹我們項目團隊安裝PetaLinux的方法。第一步,我們下載了PetaLinux軟件包12.12版以及用于Kintex-7目標板的電路板支持包(BSP)。然后運行了PetaLinux SDK安裝程序,并在控制臺上使用下列命令把SDK安裝到了/opt/Petalinux-v12.12-final目錄下:
@ cd /opt
@ cd /opt/PetaLinux -v12.12-final-full.tar.gz
@ tar zxf PetaLinux-v12.12-final-full.tar.gz
隨后,我們把從賽靈思網站獲得的PetaLinux SDK許可證復制并拷貝到.xilinx和.Petalogix文件夾中。接下來,我們使用下列命令獲取適當設置,設置了SDK的工作環(huán)境:
@ cd /opt/PetaLinux-v12.12-final
@ source settings.sh
為驗證工作環(huán)境是否設置正確,我們使用了以下命令:
@ echo $PETALINUX
如果環(huán)境設置正確,將顯示PetaLinux的安裝路徑。在本案例中,PetaLinux的安裝路徑是 /opt/PetaLinux-v12.12-final。
圖1:用于用戶設置的Linux終端窗口截屏
接下來的工作是安裝BSP,其中包含必要的設計文件、配置文件和預構建軟硬件包。這些軟硬件包已經通過測試,可隨時下載到目標板上。另外軟件包還可用于在快速仿真器(QEMU)系統(tǒng)仿真環(huán)境下的引導。為了安裝BSP,我們在path /opt中創(chuàng)建了一個名為“bsp”的文件夾,并使用下列命令復制了KC705 BSP的ZIP文件:
@ cd /opt/PetaLinux-v12.12-final-full
@ source settings.sh
@ source /opt/Xilinx/14.4/ISE _DS/settings32.sh
@ PetaLinux-install-bsp /bsp/Xilinx-KC705
-v12.12- final.bsp
構建為新平臺定制的PetaLinux系統(tǒng),有兩種創(chuàng)建和配置軟件平臺的方法。一種方法是使用Linux終端,在PetaLinux命令對應的路徑位置使用PetaLinux命令,如圖1所示。第二種方法是通過下拉菜單使用GUI,如圖2所示。您可使用其中任何一種方法來選擇平臺,配置Linux內核,配置用戶應用和構建鏡像。在操作系統(tǒng)安裝完成后,就可使用PetaLinux控制臺。而使用GUI則需要完成PetaLinux SDK插件的安裝。完成該插件的安裝后,就可使用PetaLinux Eclipse SDK中提供的PetaLinux GUI設置各種配置(圖2)。該GUI具有各種特性,如用戶應用和庫開發(fā),以及PetaLinux及硬件平臺的調試、構建和配置等。
圖2:用于用戶設置的PetaLinux SDK菜單截屏
硬件構建
我們?yōu)轫椖渴褂昧嘶贙intex-7 FPGA的KC705評估板。設計需要的硬件接口有用于監(jiān)控輸出的RS232接口、用于編程FPGA的JTAG接口以及用于遠程編程的以太網接口。除了PetaLinux SDK,所推薦設計需要的其它軟件還包括Xil-inx Platform Studio (XPS) [6,7] 和賽靈思軟件開發(fā)套件(SDK)[7]。
在該嵌入式設計的硬件部分,我們的第一項任務就是使用XPS中的基本系統(tǒng)構建器(BSB)設計基于MicroBlaze處理器的硬件平臺。BSB允許選擇目標板上提供的一系列外設。您還可根據應用需求添加或刪除外設。我們所推薦應用采用的內核或外設集包括帶8Mb存儲器的外部存儲器控制器、在中斷情況下啟用的定時器、波特率為115,200Bps的RS232 UART、以太網、非易失性存儲器以及LED。完成選擇后,我們就獲得了硬件外設及其總線接口(圖3)。對于基于MicroBlaze處理器的設計,PetaLinux需要支持MMU的CPU。因此我們在XPS窗口中雙擊MicroBlaze_0實例,選擇了帶MMU的低端Linux。
圖3:FPGA的硬件配置
此時硬件設計已完成。現(xiàn)在可以使用第一階段引導載入程序引導該內核。
接下來,我們使用三步轉換流程將硬件配置轉換為比特流。首先,我們使用XPS生成了代表嵌入式硬件平臺的網表。隨后,我們將設計映射到FPGA邏輯中。最后我們將實現(xiàn)的設計轉換為能夠下載到FPGA上的比特流。XPS的最終輸出是system.bit和sys-tem_bd.bmm文件。
生成比特流后,我們將硬件平臺描述導出到SDK,以便在SDK中觀察目標硬件平臺。導出的系統(tǒng)xml文件包含SDK編寫應用軟件并在目標硬件平臺上對其進行調試所需的信息。我們的下一項任務是使用Xilinx Tools → Repository → New 在SDK中添加一個PetaLinux庫,然后選擇PetaLinux的安裝路徑。在本實例中,該路徑為$PetaLinux/Hardware/edk_user_repository。
接下來,我們使用File → Board support package → PetaLinux創(chuàng)建了PetaLinux BSP。我們根據所需的應用選擇必要的驅動程序,配置了PetaLinux BSP。隨后我們通過構建BSP并創(chuàng)建和配置第一階段的引導載入程序應用(fs-boot),引導了內核。該BSP可建立硬件和引導應用之間的交互。SDK的輸出為fs-boot.elf??墒褂脭祿酱鎯ζ鬓D換器命令data2mem將system.bit、system_bd.bmm和fs-boot.elf 合并為一個名為download.bit的統(tǒng)一比特流文件,用作最終的FPGA比特流。
此時硬件設計已完成,其它方面還包括一個MicroBlaze內核和運行其上的PetaLinux操作系統(tǒng)。現(xiàn)在我們可以使用第一階段的引導載入程序引導內核。
構建軟件
完成硬件平臺的構建后,我們使用下列命令創(chuàng)建了針對硬件的定制PetaLinux軟件平臺:
$ cd/opt/PetaLinuxv12.12
$ PetaLinux-new-platform –c <CPU-ARCH> –v <VENDOR> –p <PLATFORM>
其中–c <cpu-arch>為支持的CPU類型(這里是MicroBlaze處理器)、–v <vendor>為廠商名稱(這里是賽靈思),而–p <platform>則為產品名稱(這里是KC705)。軟件平臺的配置文件在安裝PetaLinux的目錄下生成,即/opt/PetaLi-nuxv12.12/software/ PetaLinux-dist/vendors/Xilinx/ KC705。
圖4:內核配置菜單
為定制與硬件匹配的軟件平臺模板,我們使用PetaLinux-copy-autoconfig命令將現(xiàn)有平臺配置與內核配置進行了合并。該命令可生成硬件配置文件Xilinx-KC705.dts、xparame-ters.h 和 config.mk。
我們使用GUI(PetaLinux SDK → Kernel Configuration)打開內核配置菜單,配置了Linux內核。此外,您也可以在Linux終端上使用下列命令完成該工作:
$ cd /opt/PetaLinux_v12.12 $ PetaLinux-config-kernel
我們在內核配置彈出窗口中啟用該應用的驅動程序(如圖4所示)。為通過用戶空間輸入/輸出(UIO)接口訪問設備,完成所提出的工作,我們在內核配置菜單中啟用了UIO驅動程序。
內核配置完成后,我們設計了一些應用。PetaLinux可提供用于C語言和C++編程的用戶應用模板[8]。這些模板包括應用源代碼和Makefile文件,方便為目標芯片配置和編譯應用并將其安裝在根文件系統(tǒng)中。創(chuàng)建新的PetaLinux用戶應用,既可使用GUI(File → PetaLinux New Application),也可在Linux終端上輸入下列命令:
$ cd /opt/PetaLinux_v12.12 $ PetaLinux-config-apps
隨后我們?yōu)樵撚脩魬闷鹆藗€文件名。在本實例中,我們創(chuàng)建了gpio-dev-mem-test和gpio-uio-test用戶應用,并根據應用要求修改了模板源代碼。
接下來我們使用GUI構建了PetaLinux系統(tǒng)映像(如圖2所示)。此外,您還可以在Linux終端上使用make命令完成該任務,如下圖所示:
$ cd $PETALINUX/software/ PetaLinux-dist $ make
支持操作系統(tǒng)(OS)和定制用戶應用的軟件平臺以及我們前文討論過的硬件設計現(xiàn)已可供使用。
測試運行在設備上的PetaLinux
下面介紹PetaLinux的引導方式。MicroBlaze處理器可處理駐留在Block RAM中的代碼。第一階段的引導載入程序(fs-boot)將初始化基本硬件、執(zhí)行fs-boot.elf、搜索通用引導載入程序或U-Boot、在閃存分區(qū)中進行尋址(因為U-Boot的地址已在配置fs-boot時設定)。隨后,fs-boot將從閃存中的U-Boot分區(qū)中獲取U-Boot映像,將其發(fā)送到設備的DDR3存儲器并運行內核。一旦構建好所有引導所需的映像后,您就可以通過JTAG、以太網或快速仿真器在硬件上測試這些映像了。QEMU是一種仿真器和虛擬機,允許您運行PetaLinux操作系統(tǒng)[9]。下面討論所有這三種解決方案的引導方法。
JTAG是編程和測試FPGA設計的傳統(tǒng)方法。為使用JTAG對FPGA進行編程,我們使用了下拉菜單“Xilinx Tool → Program the FPGA”并下載了之前生成的download.bit文件。隨后我們使用GUI(PetaLinux SDK → BOOT JTAG [Li-nux])將映像下載到了電路板上,如圖2所示。您也可以在Linux終端上使用下列命令:
$ cd/opt/PetaLinux _v12.12/software/ PetaLinux-dist
$ PetaLinux-jtag-boot -i images/image.elf
此外,您還可使用U-Boot執(zhí)行間接內核引導,從而引導PetaLinux。系統(tǒng)首先使用GUI(PetaLinux SDK → BOOT JTAG [U-Boot])或以下命令通過JTAG接口下載U-Boot來進行引導。
$ cd $PETALINUX/software/ PetaLinux-dist
$ PetaLinux-jtag-boot -i images/u -boot.elf
圖6是U-Boot控制臺的快照。
值得注意的是,F(xiàn)PGA電路板連接的是以太網接口。您必須在XPS的硬件資源部分選擇以太網接口。一旦U-Boot引導成功,就要檢查服務器和主機的IP地址是否相同。如果IP地址不同,請在U-Boot終端上使用下列命令設置主機IP。
u-boot>print serverip // prints 192.168.25.45(server ip)
u-boot>print ipaddr // prints IP address
of the board as // 192.168.25.68
u-boot>set serverip <HOST IP> // Host IP 192.168.25.68
u-boot>set serverip 192.168.25.68192.168.25.68
現(xiàn)在服務器(PC)和主機(KC705電路板)具有相同的IP地址。請通過服務器運行網絡引導命令,下載PetaLinux映像和引導程序:
u-boot> run netboot
運行網絡引導命令后,您應該能夠看到PetaLinux控制臺,如圖5所示。
圖5:確認操作系統(tǒng)引導成功的PetaLinux控制臺快照
圖6:通過通用引導載入程序(U-Boot)進行的間接內核引導
最后您可使用GUI(PetaLinux SDK → BOOT QEMU [Linux])或以下命令執(zhí)行內核引導,這也很重要。
$ cd $ PETALINUX/software/ PetaLinux-dist $ PetaLinux-qemu-boot -i images/image.elf
使用這種快速方法,我們將看到圖7所示信息。
圖7:通過QEMU運行PetaLinux
測試運行在設計上的應用
完成PetaLinux引導的測試后,接下來就是測試專為PetaLinux設計的用戶應用。MicroBlaze處理器將Kintex-7 FPGA電路板上的硬件外設視為一組存儲寄存器。每個寄存器都有自己的基址和結束地址。要訪問一個外設,用戶必須知道它的基址和結束地址。您可以在設備樹源(*.dts)文件中找到有關地址的詳細信息。就本設計而言,我們開發(fā)并測試了四款應用,分別是訪問DDR3、使用/dev/mem訪問GPIO、使用UIO訪問GPIO和文件傳輸。
1. 訪問DDR3
我們使用名為DDR3-test.c的PetaLinux應用訪問DDR3存儲器。該應用經過精心設計,可向DDR存儲器位置寫入數據并從這里讀取數據。DDR3是雙列直插式存儲器模塊,可提供用于存儲用戶代碼和數據的SDRAM。如上文所述,用戶需要知道DDR存儲器的開始地址和結束地址,分別是0xC0000000和0xC7FFFFFF。存儲器的容量為512兆字節(jié)。Linux內核駐留在DDR存儲器的初始存儲器位置。因此需要選擇DDR3存儲器的寫入位置,以避免破壞Linux內核。我們使用以下命令向DDR3存儲器寫入數據:
#DDR3-test –g 0xc7000000 –o 15
其中DDR3-test是應用名稱、-g是DDR3存儲器的物理地址、-o是輸出、15是準備在0xc7000000位置寫入DDR3存儲器的值。為測試該值是否能寫入預計的位置,我們使用以下命令從DDR3存儲器讀取數據:
#DDR3-test –g 0xc7000000 –i
值15顯示在終端上,這說明DDR3存儲器讀寫操作正在成功進行。
該應用旨在控制8位離散輸出,可通過將板載LED連接至GPIO進行測試。
2. 使用/dev/mem訪問GPIO
對于接下來的應用測試,我們使用名為gpio-dev-mem-test.c的PetaLinux應用訪問了通用I/O(GPIO)。該應用的設計目的是控制8位離散輸出并通過將板載LED連接至GPIO來測試該輸出。要從用戶空間訪問任何設備,就要先打開/dev/mem,然后使用mmap()將設備映射至存儲器。我們所使用LED GPIO的開始地址和結束地址分別是0x40000000 和0x4fffffff。
GPIO外設具有兩個寄存器:數據寄存器(GPIO_DATA)和方向寄存器(GPIO_TRI_OFFSET)。為了讀取GPIO的狀態(tài),我們將方向位設置為1(即GPIO_TRI_OFFSET=1)并且從數據寄存器讀取數據。為了將數據寫入到GPIO,我們設置方向位為0并寫入值到數據寄存器。在PetaLinux終端上使用下列命令將數據寫入到GPIO:
#gpio-dev-mem-test –g 0x40000000 –o 255
其中gpio-dev-mem-test為應用名稱,-g為GPIO物理地址,-o為輸出,255為從GPIO(連接到LED)發(fā)送的值。LED按編寫的程序點亮時,測試的結果就得到了驗證。
3. 使用UIO訪問GPIO
訪問GPIO的另一個途徑是通過用戶空間輸入/輸出。我們通過UIO,使用名為gpio-uio-test.c的PetaLinux應用訪問了GPIO。該應用旨在控制8位離散輸出,可通過將板載LED連接至GPIO進行測試。UIO設備在文件系統(tǒng)中表現(xiàn)為/dev/uioX。為通過UIO訪問GPIO,我們打開了/dev/uioX或sys/class/ui0,然后使用了mmap()調用。我們配置了內核使之支持UIO,并在內核中啟用了UIO框架。隨后我們使用名為“Compatibility”的參數,根據UIO設備(而非標準GPIO設備)對LED的GPIO控制方式進行了設置。此外,我們還將設備的標簽從 gpio@40000000修改成了leds@40000000。