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

来源:互联网 发布:怎么理解面向对象编程 编辑:程序博客网 时间:2024/05/19 21:03

工具: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一前的版本比较起来运行的特别慢,下图是控制台输出

那是因为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的文件。

就是它了,看起来好大,需要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: /<path>/aarch64/sstate-cache for ZynqMP projects         /<path>/arm/sstate-cache for Zynq projects         /<path>/mb-lite/sstate-cache for MB AXI lite projects         /<path>/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:///<path>/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-configYocto 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

这里写图片描述

保存,退出。

打开工程中的文件:./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试一试。

阅读全文
0 0
原创粉丝点击