本地sstate-cache配置【Xilinx-Petalinux学习】

工具:PetaLinux 2017.1

*20170918:找到了缩短Checking sstate mirror时间的方法。
1.按照本篇内容配置本地的sstate-cache中的arm/sstate-cache和downloads
2.在petalinux-build之前,断开linux的网络连接。
这样Checking sstate mirror这个步骤可能仅仅需要不到十秒钟。

*20170908:重新安装了2017.2的petalinux,并在第一个工程就使用了sstate-cache,在Checking sstate mirror这一步速度飞快,不到10秒。
不知道是跟2017.2这个版本有关系,还是说因为我在2017.1时候用了很久后才添加的sstate-cache,总之4~6秒的时间跟5分钟的时间比起来还是太快了。~*

使用PetaLinux的petalinux-build指令编译kernel和rootfs时候,跟2016.3一前的版本比较起来运行的特别慢,下图是控制台输出
本地sstate-cache配置【Xilinx-Petalinux学习】_第1张图片

那是因为PetaLinux从2016.4的版本开始使用了基于Yocto的工程,百度百科:Yocto
其实我还没有仔细学习它到底是个什么东东,只是些许明白Xilinx基于Yocto创建了一个貌似是全功能支持的PetaLinux,已经包含了全部的petalinux-image shared sstate-cache,Yocto将其分为了各个小块。

从Xilinx官网下载PetaLinux安装包时候,里面包含了最小配置的shared sstate-cache。当使用petalinux-build命令时,Yocto会先检查本地的state-cache来确认是否满足编译要求。如果本地的资源或者文件缺失,它会通过网络从Xilinx提供的一个网络地址上下载缺少的sstate-cache来补齐本地的数据,最终完成编译。下载地址可以在ug1144中找到,或者是通过petalinux-config –> Yocto Settings -> Network sstate feeds URL下看到,地址是:
http://petalinux.xilinx.com/sswreleases/rel-v2017.1/arm/sstate-cache

那么问题来了,每次新建一个工程都会有不同的rootfs配置,那么petalinux-build命令都需要在后台从Xilinx官网提供的网址去下载数据。。。。本来网速就不咋滴,还要去下载,只有两个词来形容这个过程: 慢,好慢。。而且每次petalinux-build都要重新进行Checking sstate mirror object availability检查,不知道是不是在线检查,好慢。。我只好分别针对kernel rootfs device-tree分别进行build来减少编译的时间。

所以没有办法,只能从官网去下载好。
Xilinx官网的Downloads -> Embedded Development页面下:网址。可以看到有一个sstate cache的文件。
本地sstate-cache配置【Xilinx-Petalinux学习】_第2张图片

就是它了,看起来好大,需要11.08GB。而我顺眼看了一下2017.2的版本需要18.66GB,天啊,我还是赶紧两个都提前下好吧。经过了好几天的下载,总是失败,终于在晚上没有关机的情况下下载速度达到了4MB/s的情况下下载完成。
顺便下载README看一下怎么使用。内容如下:
Setting local sstate-cache mirrors

1) Extract the downloaded tar contents of sstate-cache at any location 
2) run petalinux-config 
        -> Yocto Settings 
            ->Local sstate feeds settings 
                ->local sstate url  
                (press Enter) 
3) Provide the path of sstate-cache from above 
    Ex: //aarch64/sstate-cache for ZynqMP projects 
        //arm/sstate-cache for Zynq projects 
        //mb-lite/sstate-cache for MB AXI lite projects 
        //mb-full/sstate-cache for MB AXI full projects 

4) Save the configurations to use the sstate-cache 

5) verify the changes in build/conf/plnxtool.conf 

6) petalinux-build 


Setting download mirrors 

1) Extract the downloaded tar contents of sstate-cache at any location 
2) run petalinux-config 
        -> Yocto Settings 
            -> YOCTO SOURCE MIRROR URL 
                    (X) external path 
            -> External Source Mirror url settings 
                        ()  external source mirrors url path 
                                (press Enter) 
3) Provide the path of sstate-cache from above 
    file:////downloadsfor all projects 

4) Save the configurations to use the download mirrors 

5) verify the changes in build/conf/plnxtool.conf 

6) petalinux-build

下面在一个工程中测试一下。
首先将下载好的state-rel-v2017.1.tar.gz解压,在其目录中即可看到sstate-cache,其中包括了4种,分别是针对zynq的arm文件夹,针对ultrascale+的aarch64文件夹,针对microblaze的mb-full和mb-lite文件夹。

$ petalinux-config

Yocto Settings  --->
    YOCTO SOURCE MIRROR URL (external path)  ---> 
    External Source Mirror url settings  --->
        () external source mirrors url path  ---> enter
        file:///home/vacajk/Development/software/sstate-rel-v2017.1/downloads
    Local sstate feeds settings  --->
        () local sstate feeds url  ---> enter
            /home/vacajk/Development/sstate-rel-v2017.1/arm/sstate-cache

本地sstate-cache配置【Xilinx-Petalinux学习】_第3张图片

本地sstate-cache配置【Xilinx-Petalinux学习】_第4张图片

保存,退出。

打开工程中的文件:./build/conf/plnxtool.conf验证是否成功修改了sstate-cache的目标地址。

PREMIRRORS_prepend = "git://.*/.* file:///home/vacajk/Development/sstate-rel-v2017.1/downloads \n \
ftp://.*/.* file:///home/vacajk/Development/sstate-rel-v2017.1/downloads \n \
http://.*/.* file:///home/vacajk/Development/sstate-rel-v2017.1/downloads \n \
https://.*/.* file:///home/vacajk/Development/sstate-rel-v2017.2/downloads \n"
SIGGEN_UNLOCKED_RECIPES += "arm-trusted-firmware busybox"
IMAGE_CLASSES_remove = "xilinx-bootbin"
UNINATIVE_DLDIR = "/opt/pkg/petalinux/components/yocto/source/arm/downloads/uninative"
SSTATE_MIRRORS = "file://universal/(.*) file:///opt/pkg/petalinux/components/yocto/source/arm/sstate-cache/universal-4.8/\1\n"
SSTATE_MIRRORS .= "\nfile://.* file:///opt/pkg/petalinux/components/yocto/source/arm/sstate-cache/PATH\n"
SSTATE_MIRRORS_append = "  \
file://.* file:///home/vacajk/Development/sstate-rel-v2017.1/arm/sstate-cache/PATH \n \
file://.* http://www.author.xilinx.com/sswreleases/rel-v2017.1/arm/sstate-cache/PATH;downloadfilename=PATH \n \
file://.* http://petalinux.xilinx.com/sswreleases/rel-v2017.1/arm/sstate-cache/PATH;downloadfilename=PATH \n \
"

MACHINE = "plnx_arm"
PACKAGE_CLASSES = "package_rpm"
EXTERNAL_TOOLCHAIN_microblaze = "/opt/pkg/petalinux/tools/linux-i386/microblazeel-xilinx-linux-gnu"
DL_DIR = "${TOPDIR}/downloads"
SSTATE_DIR = "${TOPDIR}/sstate-cache"
XILINX_SDK_TOOLCHAIN = "/opt/pkg/petalinux/tools/hsm"
IMAGE_LINGUAS = " "
TMPDIR = "/home/vacajk/Development/petalinux/zed_video/zed_video/build/tmp"

看起来说是有了,试一下petalinux-build。

$ petalinux-build

因为我这个工程比较稳定了,编译了很多次了,看起来也没什么加速,但对于有新需求的肯定有加速,尤其是需要使用PetaLinux中rootfs内自带的库时,肯定加速效果明显。

编译过一次后,petalinux-build指令主要消耗的时间是在Checking sstate mirror object availability上,我的工程里没有加任何其他内容,这个过程有两次,每次一般需要使用4分钟左右(我的i9神机。。。跑的CentOS 7.3虚拟机)。

先这样吧,之后准备使用PetaLinux中rootfs自带的OpenCV试一试。

你可能感兴趣的:(PetaLinux)