Cosmos(ZYNQ)編譯運行Linux系統

Author:Gary
Data:2019-12-24
Ref:
ug1144-petalinux-tools-reference-guide.pdf
https://www.cnblogs.com/vacajk/p/6146146.html
https://www.cnblogs.com/likaiwei/p/10223354.html
https://blog.csdn.net/mcupro/article/details/91973744
https://blog.csdn.net/lulugay/article/details/99715402
https://www.shuzhiduo.com/A/ke5jxXQOzr/
http://www.openssd.io/



由於項目所需,我需要在Cosmos開發板上運行Linux系統。Cosmos是一塊用於開發SSD的開發板,開發板的主要部件是一顆ZYNQ芯片和兩塊OpenChannelSSD,Cosmos項目主頁:http://www.openssd.io/。Cosmos上所搭載的ZYNQ型號爲Xilinx Zynq-7000 AP SoC (XC7Z045-FFG900-3)
,上面包含了一顆Kintex系列的FPGA以及一顆雙核 ARM A9的硬核。開發板上還有1GB的DDR3內存,以及SD卡、串口、以太網口以及QSPI等等外設,可以滿足用於運行Linux的條件。
Cosmos開發板

在ZYNQ上編譯運行Linux主要有手動編譯以及使用PetaLinux。PetaLinux是Xilinx推出的用於快速編譯、打包Linux鏡像的程序,相比手動編譯十分方便,本文使用PetaLinux進行編譯。

PS:FPGA上的Linux編譯真的是坑多多,我搞了好多好多天才成功運行,中途想放棄過N次,建議大家做好心理準備。

本文主要是參考ug1144,也就是PetaLinux的官方說明文檔進行操作的,強烈建議大家下載下來對照着做,我最後發現我踩的好多坑都是因爲沒有按照說明文檔的要求來弄導致的。大家記得軟件和文檔版本要匹配下載鏈接


一.PetaLinux安裝

  1. 系統可以選擇Ubuntu16.04或者Ubuntu18.04,實測都可以用。
  2. 去Xilinx官網下載PetaLinux,這裏要注意,Vivado和PetaLinux的版本要完全匹配才行,因爲PetaLinux所接收的.hdf文件一定要是相對應的Vivado編譯出來的。本文的Vivado和PetaLinux都採用2019.1版本。下載鏈接,下載速度很慢。。。下載完成後得到一個petalinux-v2019.1-final-installer.run文件。
  3. 安裝所需的庫文件,安裝指令在UG1144的第二章的Quick Installation of Packages 裏面有寫,但是這個指令我運行不了,其中有個庫它寫的-dev,我在另外一篇文章裏面找到了安裝指令,如下:sudo apt install chrpath socat autoconf libtool git texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev xvfb libssl-dev libncurses5-dev zlib1g:i386 diffstat build-essential,實測可以滿足整個編譯過程的需要。
  4. PetaLinux需要在bash中運行,但是Ubuntu默認的是dash,切換方法可以參考我的博客:https://blog.csdn.net/m0_37340681/article/details/103453096
  5. 新建一個文件夾用於PetaLinux的安裝,sudo mkdir -p /opt/pkg/petalinux/2019.1;給安裝路徑授權:sudo chmod 777 -R /opt/pkg/petalinux/2019.1;給petalinux安裝路徑文件授權,UG1144中說的不能給PetaLinux授775權限,說會導致什麼Bitbake錯誤,但是我不授權又安裝不了,授權之後實測完全沒毛病,先不管這麼多了,給安裝文件授權:sudo chmod 775 -R petalinux-v2019.1-final-installer.run
  6. 安裝:./petalinux-v2019.1-final-installer.run /opt/pkg/petalinux/2019.1,安裝過程中需要先按回車鍵,然後按q退出許可協議瀏覽,按y進行協議許可確認;然後再按q,按y,按q,按y,一共三遍。
  7. 安裝完成後需要配置環境變量:source /opt/pkg/petalinux/2019.1/settings.sh,配置完成後輸入peta按Tab鍵就可以自動補全了
  8. 到這裏PetaLinux就安裝成功了

二.PetaLinux編譯配置

  1. 獲取開發平臺的.bsp文件或者.hdf文件,這一步每個人的情況都不同我也沒法給出每個人的解決方法,我只說下我自己的,由於我沒找到Cosmos的.bsp文件,於是我去Cosmos的Git主頁可以找到Predefine Vivado工程,在Vivado中打開後進行綜合、實現,生成比特流。然後導出硬件平臺,導出的時候注意要勾選包含比特流,最後得到了平臺的.hdf文件。這一步可以參考Cosmos的官方文檔
  2. 如果能獲取.bsp文件的這一步參考UG1144中第三章的PetaLinux BSP Installation建立工程文件;沒有的就使用ZYNQ工程模板創建工程:petalinux-create -t project --template zynq --name <工程名>,創建完成後進入工程目錄,然後將上一步得到的.hdf文件拷貝進工程目錄中。
  3. 開始進行配置,輸入petalinux-config --get-hw-description=<上一步創建工程的絕對路徑>,它會自動識別出拷貝的hdf文件。然後會進入一個配置界面如下圖所示:PetaLinux配置界面
  4. 配置項之前被一個文檔誤導了,導致最後一切都編譯好了但是進不了Kernel,提示找不到SD卡分區。這裏只需要配置如下幾項就可以了:
  • 將Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> boot image settings 中 ‘image storage media’ 更改爲 ‘primary sd’;(默認就爲primary sd)
  • 將Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> kernel image settings 中 ‘image storage media’ 更改爲 ‘primary sd’;(默認也爲primary sd)
  • 將選項:Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> dtb image settings 中 ‘image storage media’ 更改爲 ‘from boot image’(我之前就是改了這裏爲primary sd結果進不了系統)
  • 將選項:Image Packaging Configurations 中 ‘Root filesystem type’ 更改爲 ‘SD card’
  1. 退出後會自動保存配置,配置完成

三.PetaLinux編譯

  1. 這裏編譯不需要像別的博客寫的那樣需要先編譯內核什麼的,直接petalinux-build即可,根據UG1144第四章的Build System Image所說,這一步會自動編譯DTB、FSBL、UBOOT、內核以及根文件系統。編譯過程大約一個小時,編譯完成後會在images/linux目錄下生成所需的文件
  2. 上一步編譯完成後需要將編譯出來的結果打包,這一步也參考第四章的Generate Boot Image for Zynq-7000 Devices,進入images/linux目錄,打包指令如下:petalinux-package --boot --fsbl zynq_fsbl.elf --fpga system.bit --uboot --force,打包完成後會在該目錄下生成BOOT.BIN

四.PetaLinux鏡像部署

這裏主要參考UG1144第七章的Configuring SD Card ext File System Boot就可以了,步驟如下:

  1. 對SD卡進行分區,這裏可以用Linux分區也可以用Windows。出於方便我就用了Windows上的DiskGenius,先刪除SD卡的所有分區,然後分2個主分區,第一個分區取名爲BOOT,文件系統選擇FAT32,容量需要大於60MB;第二個分區取名爲RootFS,佔有剩餘的全部容量,文件系統選擇EXT4。如果無法刪除分區,可以參考這篇文章,用Windows的diskpart工具進行強制刪除參考鏈接
  2. 將SD卡插到Linux上,然後可以在/media/<user>目錄中看到剛剛分的BOOT分區和RootFS分區。然後進入工程的images/linux目錄,拷貝文件:
cp BOOT.BIN /media/<user>/BOOT/ 
cp image.ub /media/<user>/BOOT/ 
  1. 複製根文件系統:sudo tar xvf rootfs.tar.gz -C /media/<user>/RootFS
  2. 到這裏鏡像文件就部署完成了

五.Cosmos上電啓動

  1. 將SD卡插入開發板,然後將開發板配置爲從SD卡啓動模式,參考Cosmos的Tutorial和Boot Guide,將開關配置如下圖:
    在這裏插入圖片描述
    我們需要從SD卡啓動的話將SW5的3和4向下掰即可。
  2. 連接串口。這裏可以選擇的工具就太多了,只有終端的話可以用minicom,可以用GUI的話推薦putty,安裝指令如下:sudo apt install putty。安裝後打開,記得一定要用管理員權限:sudo putty,我這裏不用的話就不能打開串口。
  3. 打開後按下圖進行配置:
    在這裏插入圖片描述

配置完成後可以在Saved Sessions裏面取個名字然後點Save,以後雙擊即可連接了。
這裏注意串口斷開的話putty也不會主動退出的,所以可以先打開一下開發板然後連上串口,然後重啓一下開發板即可看到從頭打印的信息了,當然如果你手速夠快的話當我沒說( ̄~ ̄;)

  1. 開機後即可在putty中看到Linux啓動了,輸入用戶名root和密碼root即可進入系統了,能看到這個界面的話就祝賀你安裝成功了!:
    在這裏插入圖片描述
    如果你沒有一次成功的話也不要慌,我這篇文章裏面的每一步都是我踩了無數坑才總結出來的教程,可以多看看官方文檔,其實很多問題官方文檔已經寫出來了的,很多問題其實都是由於沒按照官方文檔的要求來的;遇到問題可以多上谷狗查查,百度這方面的資料太少了。加油 (ง •̀_•́)ง
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章