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 cache,2018.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
即可。