在了解了如何透過 Vivado 搭配 Xilinx SDK 來控制 Cortex-A53 和 Cortex-R5 後,是時候把 Linux 裝上來啦。
針對不同嵌入式環境的需求,Xlinux 針對他們自己的平台,提供了基於 Yocto Project 製作的發行板製作工具,並命名為 PetaLinux 。這篇文章將介紹如何使用基本的 PetaLinux 功能,並建立一個可開機的映像檔 (Image) 讓 UltraZed-EG PCIe Carrier Card 開機並進入到 Linux 系統。
(本文以 Vivado 2018.2 以及 PetaLinux 2018.2 進行開發)
PetaLinux 和 Yocto 的不同
一開始遇到 PetaLinux 時會覺的奇怪,使用 Yocto Project 建立自己的 Linux 系統就好了,為什麼還需要 PetaLinux 呢?實際上,Xilinux 在 PetaLinux 加了不少工具,包含如何讓 PetaLinux 呼叫一些 Xilinux SDK 裡面的工具,讓你可以方便的產生出開機用的 BOOT.bin ,除此之外,最重要的應該就是 device tree 的產生了。
由於 UltraZed-EG PCIe Carrier Card 這塊板子上的 SoC 是 FPGA 搭配 ARM Cortex-A53/R5 這樣的組合,有些我們需要加速處理的部份會需要透過 FPGA 來實做,而在 UltraZed-EG PCIe Carrier Card 開發紀錄: Hello Cortex-R5 一文中,我們產生中斷(interrupt)時候需要的中斷編號 (XPAR_FABRIC_AXI_GPIO_0_IP2INTC_IRPT_INTR) 也是透過 Xilinx SDK 來幫我們產生的。
使用 PetaLinux 來建立系統時候,PetaLinux 會根據你的硬體設置,自動幫你生成相對應的 Device Tree ,讓我們的開發可以變得比較輕鬆。如果是用純粹的 Yocto Project 的話,很多地方就要先確認好才可以整合進去了,會比較麻煩些。
當然,因為 PetaLinux 畢竟是基於 Yocto Project 設計的,因此在使用 Yocto Project 時學會的 recipes 撰寫等知識都還是可以套用到這邊。
讓我們來看看怎樣用 PetaLinux 來建立 UltraZed-EG PCIe Carrier Card 的開機映像檔吧~
在進行以下步驟前,建議先閱讀一下 UG1144 (v2018.2): PetaLinux Tools Documentation Reference Guide.pdf 這份 PetaLinux 的官方文件。
下載 PetaLinux
首先第一步就是連到 Xilinx 官網 去下載 PetaLinux 啦,由於 PetaLinux 只能在 Linux 下面執行,因此你也需要準備一個 Linux 虛擬機才行呦~
下載 PetaLinux 2018.2 Installer (需要註冊才可以下載)
下載完成後,會得到 petalinux-v2018.2-final-installer.run 這個檔案。
下載 sstate-cache (optional)
除了下載 PetaLinux 2018.2 Installer 外,有用過 Yocto Project 的人應該都知道,為了減少時間, Yocto Project 會把已經編譯好的物件檔放到 sstate-cacehe 資料夾內,因此為了加速編譯的速度,我們也下載一下 Xilinx 提供的 sstate-cache 吧
一樣到 這裡 去下載我們要的檔案
下載完成會得到 sstate-rel-v2018.2.tar.gz 這個檔案
下載 UltraZed-EG PCIeCC BSP
安裝 PetaLinux
現在我們有了 petalinux-v2018.2-final-installer.run 、 sstate-rel-v2018.2.tar.gz 、 uz3eg_pciec_2018_2.zip 這三個檔案,就來安裝吧
(記得要看一下 UG1144 (v2018.2): PetaLinux Tools Documentation Reference Guide.pdf 確定你系統相關套件已經滿足了呦)
假設我要裝到 ~/petalinux/2018.2 則這樣執行它,然後你需要同意很多個條文才行
coldnew@gentoo ~ $ ./petalinux-v2018.2-final-installer.run ~/petalinux/2018.2 INFO: Checking installer checksum... INFO: Extracting PetaLinux installer... skip .... Press Enter to display the license agreements Do you accept Xilinx End User License Agreement? [y/N] > y Do you accept Webtalk Terms and Conditions? [y/N] > y Do you accept Third Party End User License Agreement? [y/N] > y skip .... INFO: Checking PetaLinux installer integrity... INFO: Installing PetaLinux SDK to "/home/coldnew/petalinux/2018.2/." ================================================= SDK has been successfully set up and is ready to be used. Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g. $ . /home/coldnew/petalinux/2018.2/components/yocto/source/environment-setup-cortexa9hf-neon-xilinx-linux-gnueabi $ . /home/coldnew/petalinux/2018.2/components/yocto/source/environment-setup-microblazeel-v10.0-bs-cmp-re-mh-div-xilinx-linux $ . /home/coldnew/petalinux/2018.2/components/yocto/source/environment-setup-microblazeel-v10.0-bs-cmp-re-ml-xilinx-linux INFO: PetaLinux SDK has been installed to /home/coldnew/petalinux/2018.2/.
安裝完後,現在我的 ~/petalinux/2018.2 會有這些檔案
coldnew@gentoo ~/petalinux/2018.2 $ tree -L 2.
. <b>
├── components <b>
│ ├── apps <b>
│ ├── misc <b>
│ └── yocto <b>
├── etc <b>
│ ├── hsm <b>
│ ├── libs <b>
│ ├── license <b>
│ ├── logging <b>
│ ├── qemu <b>
│ ├── scripts_py <b>
│ └── template <b>
├── settings.csh
├── settings.sh
└── tools <b>
├── common <b>
├── hsm <b>
├── lib <b>
├── linux-i386 <b>
└── webtalk <b>
18 directories, 2 files
接下來,把 sstate-rel-v2018.2.tar.gz 解壓縮到這個目錄下
coldnew@gentoo ~/petalinux/2018.2 $ tar xvf ~/sstate-rel-v2018.2.tar.gz
你會發現到在 ~/petalinux/2018.2 裡面增加了 sstate-rel-v2018.2 這個資料夾。接著一樣解壓 uz3eg_pciec_2018_2.zip 會得到 uz3eg_pciec_2018_2.bsp 這個檔案。
現在讓我們來建立我們的編譯環境吧~
建立編譯環境
要進入到 PetaLinux 的環境,我們首先要 source settings.sh 一下
coldnew@gentoo ~/petalinux/2018.2 $ source settings.sh PetaLinux environment set to '/home/coldnew/petalinux/2018.2' INFO: Checking free disk space INFO: Checking installed tools INFO: Checking installed development libraries INFO: Checking network and other services WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" for its impact and solution
我們進入到 PetaLinux 的環境了,利用剛剛的 uz3eg_pciec_2018_2.bsp 來建立我們的專案吧,這裡命名為 project1
coldnew@gentoo ~/petalinux/2018.2 $ petalinux-create -t project -s uz3eg_pciec_2018_2.bsp --name project1 INFO: Create project: project1 INFO: New project successfully created in /home/coldnew/petalinux/2018.2/project1
於是 PetaLinux 依據 uz3eg_pciec_2018_2.bsp 的資料,幫我們建立好 project1 這個資料夾,進去看看有什麼
coldnew@gentoo ~/petalinux/2018.2/project1 $ tree -L 2.
. <b>
├── components <b>
│ └── plnx_workspace <b>
├── config.project
├── hardware <b>
│ └── UZ3EG_PCIEC <b>
├── pre-built <b>
│ └── linux <b>
└── project-spec <b>
├── attributes
├── configs <b>
├── hw-description <b>
├── meta-plnx-generated <b>
├── meta-user <b>
└── yocto-layer.log <g>
11 directories, 3 files
這就是我們編譯環境的資料夾大致組成,使用者最需要關注的就是 project-spec 這資料夾囉,裡面會包含我們自己額外定義的一些 Yocto recipes 和 Xilinx 工具產生的一些相關 patch 等,具體資訊後續文章有機會會再題到。