ZYNQ:加速 PetaLinux 工程編譯、復制 PetaLinux 工程


PetaLinux介紹

PetaLinux是Xilinx基於Yocto推出的Linux開發工具。Yocto是業界主流的Linux發行版的構建工具,它不僅可以從源代碼編譯Linux 內核,還可以編譯Linux發行版必須的數以千計的的應用程序,功能非常強大。Yocto的出現,大幅度降低了構建嵌入式Linux發行版的難度。

萬物總有兩面性。雖然PetaLinux/Yocto可以一鍵編譯出一個自定義的嵌入式Linux發行版,但是編譯整個文件系統很耗費時間。完整的一次PetaLinux/Yocto編譯,可能需要從網絡下載上GB的文件,可能需要幾個小時。即使只更改一行代碼,也需要數分鍾時間。

PetaLinux/Yocto的編譯流程,也和很多開發人員原來的基於make的工作方法不一樣,它會分析文件系統里所有應用程序的配置文件,執行下載、配置、編譯、打包等過程。

如果在調試單板時,僅僅改動一行代碼,也需要執行這些操作,顯得冗余,也影響開發效率。
為了適應開發人員的工作習慣,也為了提高速度,可以整合PetaLinux工程編譯和OpenSource U-Boot/Linux編譯。

環境:PetaLinux 2018.3

安裝PetaLinux

對於PetaLinux的安裝,請參考Xilinx文檔: UG1144 PetaLinux Tools Reference Guide

提高PetaLinux/Yocto的編譯速度

Note:參考來自 sstate_rel_2020.1_README

  • By default petalinux uses sstate-cache and download mirrors from petalinux.xilinx.com.
  • This doc is for the users who uses tool completely offline.

下載SState cache

下載前,需要注冊Xilinx網站的帳號。

在Xilinx網站下載sstate cache2018.3版的大小時29.89 GB。

sstate cache-v2018.3 (TAR/GZIP - 29.89 GB )

MD5 SUM Value: 64103b445f2af366b83897f80e9bcb9e

下載后,解壓到本地,可以看到類似下面的目錄結構。

$ ls 
aarch64  arm  downloads  mb-full  mb-lite  downloads

並非每一個目錄都是需要的,使用時,只需要對應平台的目錄即可。

以下是目錄與平台的對應關系:

目錄 平台
aarch64 ZynqMP
arm Zynq
mb-full MB AXI
mb-lite MB AXI lite
downloads 全平台

每一個目錄都是類似下面的結構:

$ ls arm/

00  14  28  3c  50  64  78  8c  a0  b4  c8  dc  f0
01  15  29  3d  51  65  79  8d  a1  b5  c9  dd  f1
02  16  2a  3e  52  66  7a  8e  a2  b6  ca  de  f2
03  17  2b  3f  53  67  7b  8f  a3  b7  cb  df  f3
...
0e  22  36  4a  5e  72  86  9a  ae  c2  d6  ea  fe
0f  23  37  4b  5f  73  87  9b  af  c3  d7  eb  ff
10  24  38  4c  60  74  88  9c  b0  c4  d8  ec  universal
11  25  39  4d  61  75  89  9d  b1  c5  d9  ed  universal-4.8
12  26  3a  4e  62  76  8a  9e  b2  c6  da  ee
13  27  3b  4f  63  77  8b  9f  b3  c7  db  ef

假設以ZYNQ為例,對應的目錄(arm)解壓到了下面的路徑:

download:
/home/xx/sstate_package_for_petalinux/downloads

zynq:
/home/xx/sstate_package_for_petalinux/arm

設置

1、輸入 petalinux-config、在對應的位置設置好緩存以及鏡像。

注意,修改鏡像時,填入的路徑是以file://開頭的

-> Yocto Settings
	## 設置緩存:SState cache
    -> Local sstate feeds settings
       -> local sstate feeds url    ## 按 Enter
	   /home/xx/sstate_package_for_petalinux/arm

-> Yocto Settings
    ## 設置鏡像:download mirror
    -> Add pre-mirror url           ## 按 Enter
    file:///home/xx/sstate_package_for_petalinux/downloads
    
-> Yocto Settings    
    ## 設置離線編譯
    [ ] Enable Network sstate feeds ## 按 N
    [*] Enable BB NO NETWORK        ## 按 Y

2、Save,檢查build/conf/plnxtool.conf是否有對應的修改。

3、自動生效。

4、此后, petalinux-build會從本地進行尋找。

腳本

#!/bin/sh
## 本地倉庫設置
SSTATE_LOCAL_PATH="/home/huangshuchao/sstate_package_for_petalinux/"
## IP地址設置
NET=192.168.1
IPADDR=$NET.100


#刪除帶有指定關鍵字的行
delete_line_with_special_word ()
{
    if [[ $# -lt 2 ]]; then
        return
    fi
    FILE=$1
    WORD=$2

    sed -i "/${WORD}/d" ${FILE}
}
#文件內容追加
append_line_into_file ()
{
    if [[ $# -lt 2 ]]; then
        return
    fi
    FILE=$1
    LINE=$2
    echo do
    echo $LINE >> $FILE
}
CONFIG=config_old
cp $CONFIG $CONFIG.old

## 網絡設置
delete_line_with_special_word   $CONFIG  CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_USE_DHCP
append_line_into_file           $CONFIG  "# CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_USE_DHCP is not set"
append_line_into_file           $CONFIG  "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_ADDRESS=\"$IPADDR\""
append_line_into_file           $CONFIG  "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_NETMASK=\"255.255.255.0\""
append_line_into_file           $CONFIG  "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_GATEWAY=\"$NET.1\""

## 本地包
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_NETWORK_SSTATE_FEEDS
append_line_into_file           $CONFIG  "# CONFIG_YOCTO_NETWORK_SSTATE_FEEDS is not set"
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_BB_NO_NETWORK
append_line_into_file           $CONFIG  "CONFIG_YOCTO_BB_NO_NETWORK=y"
delete_line_with_special_word   $CONFIG  CONFIG_PRE_MIRROR_URL
append_line_into_file           $CONFIG  "CONFIG_PRE_MIRROR_URL=\"file://${SSTATE_LOCAL_PATH}/downloads\""
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL
append_line_into_file           $CONFIG  "CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL=\"${SSTATE_LOCAL_PATH}/arm\"" #zynq

        ## | 目錄      | 平台        |
        ## | --------- | ----------- |
        ## | aarch64   | ZynqMP      |
        ## | arm       | Zynq        |
        ## | mb-full   | MB AXI      |
        ## | mb-lite   | MB AXI lite |
        ## | downloads | 全平台  |

## 免輸入密碼登陸
delete_line_with_special_word   $CONFIG  CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS
append_line_into_file           $CONFIG  "CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS=y"

復制PetaLinux工程

想保留 已經配置好的工程,但是又不想新建一個的時候,可以把老的工程的內容選擇性地復制一份。

注意,不要直接拷貝整個目錄,PetaLinux 構建工具不允許這么做。

##
#    Copyright By Schips, All Rights Reserved
#    https://gitee.com/schips/
#
#    File Name:  copy_petalinux_project.sh
#    Created  :  2020-07-25 11:28:24
#
##

#!/bin/sh

help () {
    echo "ERROR : Need arguments"
    echo " eg:"
    echo "     $0  petaProjectOld  petaProjectNew"
    exit
}

if [ -z "$1" ]; then
    help
fi

if [ -z "$2" ]; then
    help
fi

SOURCEDIR=$1
DESTDIR=$2

mv ${DESTDIR} /tmp/back 2>/dev/null -f
mkdir ${DESTDIR}/image/linux -p

cp -v ${SOURCEDIR}/project-spec ${SOURCEDIR}/.petalinux ${SOURCEDIR}/config.project ${DESTDIR} 
cp -v ${SOURCEDIR}/images/linux/*.bit ${DESTDIR}/image/linux

之后,內核、uboot的配置會被保存到our_config中。

PetaLinux本身的配置不會改變:使用petalinux-config會看到之前的配置。

恢復配置

配置會被保存在一個地方,因此,需要LOAD回來,要么使用這樣的命令:

petalinux-config -c kernel 

在彈出的配置窗口中選擇LOAD,指定之前配置保存的路徑即可。

Uboot也是一樣的,如果配置過了uboot,那么需要額外的LOAD操作。

petalinux-config -c u-boot

此后,直接petalinux-build即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM