ZYNQ7000 #0 - petalinux的使用與工程建立(都9102年了,就用用便利的工具吧)

0 - 前言

手頭有塊黑金AX7010的板子,這個板子附帶的資料裏面帶有的kernel和uboot(黑金針對自己的開發板修改過的)版本實在太老,全是2017年的版本,在學習按照給的PDF裏的流程,利用其提供的kernel和uboot進行編譯的時候各種報錯。9102年了,如果還要我去想辦法去換開發環境兼容老東西來進行學習實在是太頭疼了,於是轉而使用xilinx官方的petalinux進行zynq7000上的linux環境搭建。

petalinux是xilinx官方推出的一個快速便利的搭建zynq系列fpga片上ps(processing system)端的linux環境搭建的軟件,在官網上可以免費的下載安裝(https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html)。這篇博文將介紹一下如何使用petalinux進行工程建立(不會介紹如何進行petalinux的安裝)。環境的搭建和一些必要的資源如下所示:

  • ubuntu 16.04.4         (安裝在vmplayer虛擬機中,petalinux對系統版本有嚴格要求
  • petalinux 2018.3      (安裝在/opt/pkg/petalinux文件夾下)
  • UG1144 - PetaLinux Tools Documentation: Reference Guide (v2018.3)   (參考文檔,可以下載下來備用)
  • linux_rtc.sdk               (vivado工程生成比特流文件,並導出硬件【export hardware】生成的*.sdk文件夾,在本文中依此建立後面的petalinux)

安裝完petalinux後的磁盤佔用

1 - 建立petalinux工程

載入petalinux環境

$ source /opt/pkg/petalinux/settings.sh

建立petalinux工程,命名爲lee_linux

$ petalinux-create --type project --template zynq --name lee_petalinux

完畢後,工程目錄如下所示

2 - petalinux讀取 *.sdk 文件夾硬件信息

進入lee_linux目錄,讓petalinux讀取 *.sdk 文件夾,自動載入硬件信息,這裏 *.sdk 文件夾就在上一級目錄

$ cd lee_petalinux/
$ petalinux-config --get-hw-description=/home/sements/Desktop/developArea/FPGA/workspace/linux_rtc.sdk

3 - 設置SD根文件系統從SD卡載入

執行上面命令後,會自動打開配置窗口,在 Image Packaging Configuration --> Root filesystem type 選項中選擇 SD card,把根文件系統放在 SD 卡中,方向鍵選擇下方保存,然後退出。

注意,這裏保存不要修改其默認文件名

4 - 配置Linux內核

執行指令,配置linux內核

$ petalinux-config -c kernel
  • 配置CH340、CP210X串口驅動

- Device Drivers → USB support → USB Serial Converter support按y,回車進入。在CP210x和ch341前面按y。

  • 配置USB攝像頭驅動

- 選項 Device Drivers ---> Multimedia support ---> Media USB Adapters ---> 中使能 USB Video Class (UVC)

保存退出

注意,這裏保存不要修改默認的 .config 文件名

5 - 編譯

$ petalinux-build

 

6 - 生成BOOT.BIN及image.ub文件

$ petalinux-package --boot --fsbl --fpga --u-boot --force

petalinux-package --boot  用於打包生成BOOT.BIN文件

--fsbl  指令指定加入FSBL(First Store Block Load)文件,其默認指定文件路徑是 images/linux/zynq_fsbl.elf,這個文件是petalinux執行編譯命令後自動生成的

--fpga  指令指定加入FPGA比特流文件(bitstream image),其默認指定文件路徑是 images/linux/*.bit , 這個文件是前面vivado編譯生成比特流文件並在導出硬件時一同導入到 *.sdk 文件夾中的 *.bit 文件。在petalinux-config --get-hw-description時會從 *.sdk 文件夾中複製到默認路徑並重命名爲system.bit

--u-boot 指令指定將u-boot文件打包到BOOT.BIN中,其默認指定文件路徑是 images/linux/u-boot.elf 這個文件是petalinux執行編譯命令後自動生成的

--force  指令指定允許覆蓋之前已生成過的BOOT.BIN文件

更多的介紹可以通過 petalinux-package --boot --help查看

執行後我們可以在 images/linux文件夾下看到BOOT.BIN和image.ub文件了。

7 - TF卡製作備用

我的AX7010開發板能插入TF卡,並且在 linux_rtc.sdk的vivado工程中已經將tf卡連接到PS內核。

插入TF卡到開發機,在虛擬機上掛載TF卡

運行gparted工具,將全卡格式化。然後新建一個FAT32格式分區,命名爲FAT,大小約1000M即可,用於存放BOOT.BIN及image.ub文件。再在FAT分區後新建EXT4格式分區,命名爲EXT,大小佔用剩餘TF卡上空間,用於存放文件系統。

將BOOT.BIN文件和image.ub文件放到FAT分區中。

將根文件系統放入EXT分區中,這裏我使用之前製作好的給IMX6用的ubuntu根文件系統(https://blog.csdn.net/sements/article/details/88086468

卸載TF卡

注意,這裏卸載的時候會提示暫時無法彈出TF卡,因爲從開發機複製文件到TF卡並沒有實際寫入TF卡上,而是直接寫在磁盤緩存上,在卸載的時候會將這些磁盤緩存真正的寫入TF卡上,這很耗時,具體時長取決於你自己放入TF卡的根文件系統大小

8 - 在板上運行

將TF卡插入FPGA開發板,插上調試串口(這裏我vivado工程也已經連接好到PS核了),上電即可從tty調試窗口看到linux啓動信息

X - 附錄(一些可能碰到的問題)

  1. petalinux-build時報錯 set KERNEL_VERSION_SANITY_SKIP="1" in your recipe.。

這是由於petalinux版本與用戶指定編譯用的linux版本不匹配造成的(在本博文的流程中不會這樣,因爲按照的是默認設置,其會從網絡上下載合乎版本的linux,這裏是我安裝petalinux 2018版本,指定用黑金提供的2017版本的linux源碼時出現的問題)

解決方法有兩種:

第一種,

在工程目錄/project-spec/meta-plnx-generated/recipes-kernel/linux/ linux-xlnx_%.bbappend文件內加入KERNEL_VERSION_SANITY_SKIP="1"

參考https://github.com/Xilinx/meta-xilinx/blob/master/meta-xilinx-bsp/recipes-kernel/linux/linux-xlnx-dev.bb

第二種,其實應該是真正的根源解決,第一種方法中的/project-spec/meta-plnx-generated/recipes-kernel/linux/ linux-xlnx_%.bbappend文件是petalinux-build時生成的,其是根據/ project-spec/meta-user/recipes-kernel/linux/ linux-xlnx_%.bbappend文件生成的,所以只要在編譯前在/ project-spec/meta-user/recipes-kernel/linux/ linux-xlnx_%.bbappend文件內加入KERNEL_VERSION_SANITY_SKIP="1"即可

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章