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 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
即可。
ZYNQ:加速 PetaLinux 工程编译、复制 PetaLinux 工程的更多相关文章
- ios开发问题:添加库和复制其它工程文件编译错误问题
首先添加库问题: 选择页签Build Phases->Link Binary With Libraries点+添加库 然后command+shift+k清除历史debug的垃圾 复制其它工程文件 ...
- 在VS2012下不安装VS2010编译VS2010的工程
虽然一路追随这VISUAL SUTDIO在编程,但是断档的情况还是有的,最近一次硬盘问题使得安装了所有的VS2003-VS2012的机器硬盘挂了,无奈只能够安装了,不过觉得没啥用了,就安装一个VS20 ...
- .NET Core工程编译事件$(TargetDir)变量为空引发的思考
前言 最近客户反馈,为啥不用xcopy命令代替我自己写的命令来完成插件编译复制: 我的: <PostBuildEvent>call "$(SolutionDir)tools\to ...
- 使用autotools工具用configure、make、make install编译安装linux工程的详细步骤
使用autotools工具用configure.make.make install编译安装linux工程的详细步骤 转载tmxkwzy 最后发布于2016-11-24 10:20:15 阅读数 324 ...
- Vs2012(Vs2013) 编译 64位 Qt (动态库), 并使用自编译Qt建立工程(悲催经历)。(含遗留问题)
仅供参考. 体会:我个人此次编译不该使用Vs2013编译Qt. 使用以下程序: Qt : qt-opensource-windows-x86-msvc2012_64_opengl-5.2.1.exe ...
- Quartus ii 12.1软件破解之后编译原有的工程出现报警错误的解决办法
在Quartus ii 12.1软件破解之后,想用来编译原来编译过的工程,但是编译到最后出现下面两个错误警告: 原来以为没有破解成功或者安装的时候有文件被杀毒软件吃了,导致安装错误,又重新安装了两次都 ...
- Zookeeper源码编译为Eclipse工程(转)
原文地址:http://blog.csdn.net/jiyiqinlovexx/article/details/41179293 为了深入学习ZooKeeper源码,首先就想到将其导入到Eclispe ...
- objective-c 创建工程/编译/运行程序
// First program example #import <Foundation/Foundation.h> int main (int argc, const char * ar ...
- iOS 一个工程中引用其他工程时编译的Architecture问题
当引用了其他工程时,在编译时报错,提示你编译指令架构不对,你需要查看一下这几个工程的Architecture部分是否又冲突,比如主工程设置Valid Architecture为armv7 而 另一个子 ...
- eclipse中多个工程编译到同一个目录下
1.点击link source 2.选择Java(ps:Java文件目录)或者resource(ps:配置文件目录) 3.最后结果,然后使用project中的clean进行编译,就可以把两个工程编 ...
随机推荐
- RT-Thread线程同步与线程通信
一.线程同步 线程同步的使用场景 例如一项工作中的两个线程:一个线程从传感器中接收数据并且将数据写到共享内存中,同时另一个线程周期性的从共享内存中读取数据并发送去显示,下图描述了两个线程间的数据传递: ...
- van-tab吸顶后头部透明色渐变响应
方法一:监听滚动事件 $('.scrollContent').bind('touchmove', function(e){ var winHeight = $(window) ...
- rails 给数据库表里加入索引
创建迁移文件 rails g migration add_product_images_index 编写迁移文件 db/migrate/20170119093958_add_product_image ...
- linux文本三剑客之sed命令详解
linux文本三剑客之sed命令详解 目录 linux文本三剑客之sed命令详解 1.sed命令详解 1.1 地址定界和编辑命令 1.2 搜索替换 1.3 sed高级用法 1.sed命令详解 sed称 ...
- 提交项目到git远程仓库
提交项目到github远程仓库 点击VCS-->Share project on Github 相关信息配置:修改完,点击share 点击add等待完成. 打开浏览器查看,可以发现我们的仓库里出 ...
- 瑞亚时间管理大师,基于 .NET 6 和 Angular 构建的在线任务管理协作平台
瑞亚时间管理大师 瑞亚时间管理大师, 是一个在线的任务管理.项目管理. 团队协作平台.瑞亚 拥有现代化的页面风格,高效.简便,同时适合个人和团队使用. 瑞亚对个人免费,提供了无限制的任务,列表,和空间 ...
- swagger文档枚举类型描述
背景: 问题:使用swagger作为api文档,但文档中的枚举类型仅显示枚举name,对于使用文档的人员来讲不容易理解 解决思路:枚举类型加上自定义的描述 解决方案 maven配置 <depen ...
- uniapp video组件全屏导致页面横竖错乱问题
uniapp video组件全屏导致页面横竖错乱问题 背景介绍 使用 video组件做一个视频播放功能,不全屏的情况正常.在苹果手机上全屏后,点击左上角退出全屏,页面出现问题如下图问题,主要系统iOS ...
- Itext PDF 编辑 合并 图片转PDF以及表单域
Itext PDF 编辑 合并 图片转PDF以及表单域 编辑PDF x import com.itextpdf.text.pdf.BaseFont; import com ...
- Biwen.Settings添加对IConfiguration&IOptions的集成支持
Biwen.Settings 是一个简易的配置项管理模块,主要的作用就是可以校验并持久化配置项,比如将自己的配置存储到数据库中,JSON文件中等 使用上也是很简单,只需要在服务中注入配置即可, 比如我 ...