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

下载后,解压到本地,可以看到类似下面的目录结构。

  1. $ ls
  2. aarch64 arm downloads mb-full mb-lite downloads

并非每一个目录都是需要的,使用时,只需要对应平台的目录即可。

以下是目录与平台的对应关系:

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

每一个目录都是类似下面的结构:

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

假设以ZYNQ为例,对应的目录(arm)解压到了下面的路径:

  1. download
  2. /home/xx/sstate_package_for_petalinux/downloads
  3. zynq
  4. /home/xx/sstate_package_for_petalinux/arm

设置

1、输入 petalinux-config、在对应的位置设置好缓存以及镜像。

注意,修改镜像时,填入的路径是以file://开头的

  1. -> Yocto Settings
  2. ## 设置缓存:SState cache
  3. -> Local sstate feeds settings
  4. -> local sstate feeds url ## 按 Enter
  5. /home/xx/sstate_package_for_petalinux/arm
  6. -> Yocto Settings
  7. ## 设置镜像:download mirror
  8. -> Add pre-mirror url ## 按 Enter
  9. file:///home/xx/sstate_package_for_petalinux/downloads
  10. -> Yocto Settings
  11. ## 设置离线编译
  12. [ ] Enable Network sstate feeds ## 按 N
  13. [*] Enable BB NO NETWORK ## 按 Y

2、Save,检查build/conf/plnxtool.conf是否有对应的修改。

3、自动生效。

4、此后, petalinux-build会从本地进行寻找。

脚本

  1. #!/bin/sh
  2. ## 本地仓库设置
  3. SSTATE_LOCAL_PATH="/home/huangshuchao/sstate_package_for_petalinux/"
  4. ## IP地址设置
  5. NET=192.168.1
  6. IPADDR=$NET.100
  7. #删除带有指定关键字的行
  8. delete_line_with_special_word ()
  9. {
  10. if [[ $# -lt 2 ]]; then
  11. return
  12. fi
  13. FILE=$1
  14. WORD=$2
  15. sed -i "/${WORD}/d" ${FILE}
  16. }
  17. #文件内容追加
  18. append_line_into_file ()
  19. {
  20. if [[ $# -lt 2 ]]; then
  21. return
  22. fi
  23. FILE=$1
  24. LINE=$2
  25. echo do
  26. echo $LINE >> $FILE
  27. }
  28. CONFIG=config_old
  29. cp $CONFIG $CONFIG.old
  30. ## 网络设置
  31. delete_line_with_special_word $CONFIG CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_USE_DHCP
  32. append_line_into_file $CONFIG "# CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_USE_DHCP is not set"
  33. append_line_into_file $CONFIG "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_ADDRESS=\"$IPADDR\""
  34. append_line_into_file $CONFIG "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_NETMASK=\"255.255.255.0\""
  35. append_line_into_file $CONFIG "CONFIG_SUBSYSTEM_ETHERNET_PS7_ETHERNET_0_IP_GATEWAY=\"$NET.1\""
  36. ## 本地包
  37. delete_line_with_special_word $CONFIG CONFIG_YOCTO_NETWORK_SSTATE_FEEDS
  38. append_line_into_file $CONFIG "# CONFIG_YOCTO_NETWORK_SSTATE_FEEDS is not set"
  39. delete_line_with_special_word $CONFIG CONFIG_YOCTO_BB_NO_NETWORK
  40. append_line_into_file $CONFIG "CONFIG_YOCTO_BB_NO_NETWORK=y"
  41. delete_line_with_special_word $CONFIG CONFIG_PRE_MIRROR_URL
  42. append_line_into_file $CONFIG "CONFIG_PRE_MIRROR_URL=\"file://${SSTATE_LOCAL_PATH}/downloads\""
  43. delete_line_with_special_word $CONFIG CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL
  44. append_line_into_file $CONFIG "CONFIG_YOCTO_LOCAL_SSTATE_FEEDS_URL=\"${SSTATE_LOCAL_PATH}/arm\"" #zynq
  45. ## | 目录 | 平台 |
  46. ## | --------- | ----------- |
  47. ## | aarch64 | ZynqMP |
  48. ## | arm | Zynq |
  49. ## | mb-full | MB AXI |
  50. ## | mb-lite | MB AXI lite |
  51. ## | downloads | 全平台 |
  52. ## 免输入密码登陆
  53. delete_line_with_special_word $CONFIG CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS
  54. append_line_into_file $CONFIG "CONFIG_YOCTO_ENABLE_DEBUG_TWEAKS=y"

复制PetaLinux工程

想保留 已经配置好的工程,但是又不想新建一个的时候,可以把老的工程的内容选择性地复制一份。

注意,不要直接拷贝整个目录,PetaLinux 构建工具不允许这么做。

  1. ##
  2. # Copyright By Schips, All Rights Reserved
  3. # https://gitee.com/schips/
  4. #
  5. # File Name: copy_petalinux_project.sh
  6. # Created : 2020-07-25 11:28:24
  7. #
  8. ##
  9. #!/bin/sh
  10. help () {
  11. echo "ERROR : Need arguments"
  12. echo " eg:"
  13. echo " $0 petaProjectOld petaProjectNew"
  14. exit
  15. }
  16. if [ -z "$1" ]; then
  17. help
  18. fi
  19. if [ -z "$2" ]; then
  20. help
  21. fi
  22. SOURCEDIR=$1
  23. DESTDIR=$2
  24. mv ${DESTDIR} /tmp/back 2>/dev/null -f
  25. mkdir ${DESTDIR}/image/linux -p
  26. cp -v ${SOURCEDIR}/project-spec ${SOURCEDIR}/.petalinux ${SOURCEDIR}/config.project ${DESTDIR}
  27. cp -v ${SOURCEDIR}/images/linux/*.bit ${DESTDIR}/image/linux

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

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

恢复配置

配置会被保存在一个地方,因此,需要LOAD回来,要么使用这样的命令:

  1. petalinux-config -c kernel

在弹出的配置窗口中选择LOAD,指定之前配置保存的路径即可。

Uboot也是一样的,如果配置过了uboot,那么需要额外的LOAD操作。

  1. petalinux-config -c u-boot

此后,直接petalinux-build即可。

ZYNQ:加速 PetaLinux 工程编译、复制 PetaLinux 工程的更多相关文章

  1. ios开发问题:添加库和复制其它工程文件编译错误问题

    首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...

  2. 在VS2012下不安装VS2010编译VS2010的工程

    虽然一路追随这VISUAL SUTDIO在编程,但是断档的情况还是有的,最近一次硬盘问题使得安装了所有的VS2003-VS2012的机器硬盘挂了,无奈只能够安装了,不过觉得没啥用了,就安装一个VS20 ...

  3. .NET Core工程编译事件$(TargetDir)变量为空引发的思考

    前言 最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制: 我的: <PostBuildEvent>call "$(SolutionDir)tools\to ...

  4. 使用autotools工具用configure、make、make install编译安装linux工程的详细步骤

    使用autotools工具用configure.make.make install编译安装linux工程的详细步骤 转载tmxkwzy 最后发布于2016-11-24 10:20:15 阅读数 324 ...

  5. Vs2012(Vs2013) 编译 64位 Qt (动态库), 并使用自编译Qt建立工程(悲催经历)。(含遗留问题)

    仅供参考. 体会:我个人此次编译不该使用Vs2013编译Qt. 使用以下程序: Qt : qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe ...

  6. Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法

    在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...

  7. Zookeeper源码编译为Eclipse工程(转)

    原文地址:http://blog.csdn.net/jiyiqinlovexx/article/details/41179293 为了深入学习ZooKeeper源码,首先就想到将其导入到Eclispe ...

  8. objective-c 创建工程/编译/运行程序

    // First program example #import <Foundation/Foundation.h> int main (int argc, const char * ar ...

  9. iOS 一个工程中引用其他工程时编译的Architecture问题

    当引用了其他工程时,在编译时报错,提示你编译指令架构不对,你需要查看一下这几个工程的Architecture部分是否又冲突,比如主工程设置Valid Architecture为armv7 而 另一个子 ...

  10. eclipse中多个工程编译到同一个目录下

    1.点击link source  2.选择Java(ps:Java文件目录)或者resource(ps:配置文件目录)  3.最后结果,然后使用project中的clean进行编译,就可以把两个工程编 ...

随机推荐

  1. Linux中的umask

    在Linux中,当创建一个文件或者目录的时候,系统会自动为这个文件或者目录赋予默认的权限,而umask命令就是用来控制这个默认权限的. 查看umask umask的查看有两种方式,一种不带选项-S,一 ...

  2. Linux环境下:程序的链接, 装载和库[动态链接]

    静态链接库在程序编译阶段就完成了链接工作,完成链接后,依赖的库就都打入了可执行文件中,所以文件大小一般会比较大. 而动态库链接库是在程序运行时才被链接的,所以磁盘上只要保留一份副本,因此节约了磁盘空间 ...

  3. windows安装nginx可视化工具nginxWebUI

    一.官网下载ngixn * 官网地址<http://nginx.org/> 选取稳定版(Stable Version)二.解压压缩包三.启动Nginx1.进入安装目录下,找到nginx.e ...

  4. Vue cli之在组件中使用axios

    默认情况下,我们的项目中并没有对axios包的支持,所以我们需要下载安装. 在项目根目录中使用 npm安装包: npm install axios 接着在main.js文件中,导入axios并把axi ...

  5. WPF 中使用附加属性解决 PasswordBox 的数据绑定问题

    1.前言 在 WPF 开发中 View 中的数据展示我们常通过 Binding 进行绑定.但是,使用 Binding 有一个前提:绑定的目标只能是依赖属性. 而 PasswordBox 控件中的 Pa ...

  6. K8S POD控制器:从基础到高级实战技巧

    本文深入探讨了Kubernetes POD控制器的基础知识.配置示例.最佳实践,并通过一个电子商务公司的案例分析,展示了如何在复杂的生产环境中应用POD控制器,以优化云服务架构. 关注[TechLea ...

  7. 机器学习策略篇:详解理解人的表现(Understanding human-level performance)

    理解人的表现 人类水平表现这个词在论文里经常随意使用,但现在告诉这个词更准确的定义,特别是使用人类水平表现这个词的定义,可以帮助推动机器学习项目的进展.还记得上个博客中,用过这个词"人类水平 ...

  8. Qt-FFmpeg开发-视频播放【硬解码】(2)

    Qt-FFmpeg开发-视频播放[硬解码] 目录 Qt-FFmpeg开发-视频播放[硬解码] 1.概述 2.实现效果 3.FFmpeg硬解码流程 4.主要代码 6.完整源代码 更多精彩内容 个人内容分 ...

  9. [机器学习] 低代码机器学习工具PyCaret库使用指北

    PyCaret是一个开源.低代码Python机器学习库,能够自动化机器学习工作流程.它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率.PyCaret本质上是围绕几个机器学习 ...

  10. ros2 foxy订阅话题问题

    代码片段 这部分代码在galactic版本编译是OK的,可在foxy下编译就出了问题 TeleopPanel::TeleopPanel(QWidget* parent) : rviz_common:: ...