ZYNQ:使用 PetaLinux 构建Linux项目
参考文档:ug1144-petalinux-tools-reference-guide.pdf
环境安装
tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev libglib2.0-dev screen pax gzip automake glib2-devel openssl openssl-devel xinetd tftp tftp-server redhat-lsb u-boot-tools(或 uboot-tools)
创建目录:
su root
mkdir /opt/env
chown -R huangshuchao:embd /opt/env/
#chown -R huangshuchao:embd /opt/env/
# 2016.4以后的petalinux不能以超级权限去安装,必须在$下安装petalinux。
安装
./petalinux-v2018.3-final-installer.run /opt/env/petalinux/2018.3
Ubuntu bash
dpkg-reconfigure dash
--> NO
使用
每次都需要:
source /opt/env/petalinux/2018.3/settings.sh
本文链接:https://www.cnblogs.com/schips/p/using-petalinux-build-linux-env.html
导入硬件
拷贝design_1_wrapper_hw_platform_0到Linux
创建项目
petalinux-create --type project --template zynq --name 项目名称(目录)
INFO: Create project: ax_peta
INFO: New project successfully created in /home/huangshuchao/ax_peta
导入硬件信息
输入以下命令:
硬件信息包:
design_1_wrapper_hw_platform_0_test.tgz(来自13_vdma_to_qspi_sd)
petalinux-config --get-hw-description ~/hw-vivado/design_1_wrapper_hw_platform_0_test
配置优化
我们这里再做一些优化工作,以方便我们的使用:
离线编译
注意,修改镜像时,填入的路径是以file://开头的。
-> Yocto Settings
## 设置缓存:SState cache
-> Local sstate feeds settings
-> local sstate feeds url ## 按 Enter
/home/xx/sstage_package_for_petalinux/arm
-> Yocto Settings
## 设置镜像:download mirror
-> Add pre-mirror url ## 按 Enter
file:///home/xx/sstage_package_for_petalinux/downloads
-> Yocto Settings
## 设置离线编译
[ ] Enable Network sstate feeds ## 按 N
[*] Enable BB NO NETWORK ## 按 Y
启动Linux时自动登录
避免输入账号密码。
-> Yocto Settings
[*] Enable Debug Tweaks ## 按 Y
不自动获取IP地址
如果网口存在时,可以考虑关闭自动获取IP地址(会造成开机过慢)
-> Subsystem AUTO Hardware Settings (SUBSYSTEM_HARDWARE_AUTO [=y])
-> Ethernet Settings
Primary Ethernet ((ps7_ethernet_0) # 确认 存在此项
[ ] Obtain IP address automatically # 按下空格键取消,并设置一个IP
(192.168.168.168) Static IP address
(255.255.255.0) Static IP netmask (NEW)
(192.168.168.1) Static IP gateway
u-boot Configuration --->
(192.168.168.1) TFTP Server IP addres # 设置TFTP服务器地址
修改文件系统类型(可选)
默认的文件系统类型会导致文件系统无法保存,一开始的时候可以保持默认,可以在后续修改为以下配置:
-> Image Packaging Configuration
-> Root filesystem type
-> Root filesystem type (SD card) --->
(/dev/mmcblk0p2) Device node of SD device (NEW)
保存退出,以下是提示信息:
INFO: Getting hardware description...
[INFO] generating Kconfig for project
[INFO] menuconfig project
*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.
[INFO] sourcing bitbake
[INFO] generating plnxtool conf
[INFO] generating meta-plnx-generated layer
[INFO] generating machine configuration
[INFO] generating bbappends for project . This may take time !
[INFO] generating u-boot configuration files
[INFO] generating kernel configuration files
[INFO] generating kconfig for Rootfs
[INFO] oldconfig rootfs
[INFO] generating petalinux-user-image.bb
配置保护
保留Linux和UBoot源代码
echo 'RM_WORK_EXCLUDE += "linux-xlnx"'>> project-spec/meta-user/conf/petalinuxbsp.conf
echo 'RM_WORK_EXCLUDE += "u-boot-xlnx"'>> project-spec/meta-user/conf/petalinuxbsp.conf
echo ''>> project-spec/meta-user/conf/petalinuxbsp.conf
原理:run.do_rm_work中有对关键字进行解析,如果符合条件,那么不执行删除操作。
配置uboot
petalinux-config -c u-boot
进行如下配置:
| 配置项 | 值与说明 |
|---|---|
| Boot media | Boot介质,配置从SD卡启动 |
| delay in seconds before automatically booting | Boot自启动时间,默认4s,可修改 |
| Disable support for parallel NOR flash | NOR flash支持,无支持 |
| add U-Boot environment variable vers | U-Boot环境变量添加,无 |
| Display information about the CPU during start up | 启动阶段显示CPU信息,可选 |
| Display information about the board during start up | 启动阶段显示板卡信息,可选 |
| Command line interface | 命令行配置,用户可进一步配置 |
| Device Tree Control | 设备树控制,保持默认配置(embeded) |
配置内核
输入:
petalinux-config -c kernel
以下是提示信息:
[INFO] generating Kconfig for project
[INFO] sourcing bitbake
[INFO] generating plnxtool conf
[INFO] generating meta-plnx-generated layer
[INFO] generating machine configuration
[INFO] configuring: kernel
[INFO] generating kernel configuration files
[INFO] bitbake virtual/kernel -c menuconfig
Parsing recipes: 100% |##########################################| ETA: 0:00:56
Parsing of 2569 .bb files complete (0 cached, 2569 parsed). 3445 targets, 149 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
很快就会弹出Menuconfig菜单,选择
CONFIG_MICREL_PHY:
-> Device Drivers
-> Network device support (NETDEVICES [=y])
-> PHY Device support and infrastructure (PHYLIB [=y])
[y] Micrel PHYs
保存,EXIT。
配置文件系统
petalinux-config -c rootfs
petalinux-config -c rootfs && petalinux-build
无更改,保存退出
编译 uboot、内核、文件系统、设备树
petalinux-build
此后,生成下面的文件
# ls image/linux
rootfs.cpio rootfs.cpio.gz.u-boot rootfs.ext4 rootfs.jffs2 rootfs.tar.gz system.dtb u-boot.elf zynq_fsbl.elf image.ub rootfs.cpio.bz2 rootfs.ext3 rootfs.ext4.gz rootfs.manifest rootfs.testdata.json System.map.linux vmlinux rootfs.bin rootfs.cpio.gz rootfs.ext3.bz2 rootfs.its rootfs.tar.bz2 system.bit u-boot.bin zImage
生成BOOT.BIN
执行下面的代码生成BOOT.BIN
petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/system.bit --u-boot --force
下面的是提示信息:
INFO: Getting system flash information...
INFO: File in BOOT BIN: "/home/huangshuchao/ax_peta2/images/linux/zynq_fsbl.elf"
INFO: File in BOOT BIN: "/home/huangshuchao/ax_peta2/images/linux/system.bit"
INFO: File in BOOT BIN: "/home/huangshuchao/ax_peta2/images/linux/u-boot.elf"
INFO: Generating Zynq binary package BOOT.BIN...
****** Xilinx Bootgen v2018.3
**** Build date : Nov 15 2018-19:22:29
** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
INFO: Binary is ready.
生成image.ub
mkimage -f ./images/linux/rootfs.its image.ub
测试
从image/linux中拷贝:BOOT.BIN、image.ub,到SD卡即可。
创建项目的脚本
##
# Copyright By Schips, All Rights Reserved
# https://gitee.com/schips/
#
# File Name: copy_petalinux_project_with_hw.sh
# Created : 2020-07-25 11:28:24
#
##
#!/bin/sh
# 项目工程常见参数设置
## sstage包下载后设置
SSTATE_LOCAL_PATH="/home/huangshuchao/sstage_package_for_petalinux/"
## IP地址设置
NET=192.168.1
IPADDR=$NET.100
help () {
echo "Error : need \$projectname \$hw_bsp"
echo " eg :"
echo " $0 ax_project ~/hw-vivado-bsp-for-petalinux/some_packakge"
exit 1
}
if [ -z "$1" ]; then
help
fi
if [ -z "$2" ]; then
help
fi
command -v petalinux-create >/dev/null 2>&1 || { echo >&2 "Aborted : Require \"petalinux-create\" but not found."; exit 1; }
command -v petalinux-config >/dev/null 2>&1 || { echo >&2 "Aborted : Require \"petalinux-config\" but not found."; exit 1; }
## 删除源目录
rm $1 -rf
## 创建项目
petalinux-create --type project --template zynq --name $1
PROJECT=$1
## 导入硬件信息
cd $PROJECT
petalinux-config --get-hw-description $2
## 使PetaLinux不删除源码
echo 'RM_WORK_EXCLUDE += "linux-xlnx"'>> project-spec/meta-user/conf/petalinuxbsp.conf
echo 'RM_WORK_EXCLUDE += "u-boot-xlnx"'>> project-spec/meta-user/conf/petalinuxbsp.conf
echo ''>> project-spec/meta-user/conf/petalinuxbsp.conf
# 删除带有指定关键字的行
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 $LINE >> $FILE
}
CONFIG=project-spec/configs/config
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注意事项
导入项目创建项目以后,工程项目会确定当前路径,所以需要注意,不要随便改动工程路径。
ERROR: OE-core's config sanity checker detected a potential misconfiguration.
Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
Following is the list of potential problems / advisories:
Error, TMPDIR has changed location. You need to either move it back to /home/huangshuchao/ax_1_design1hw0_retry/build/tmp or rebuild
不过可以通过拷贝petalinux工程的配置到另外的目录,再build出那些临时文件。
详情见:加速 PetaLinux 工程编译、复制 PetaLinux 工程
附录: 构建各部分
petalinux-build -c kernel
petalinux-build -c device-tree
petalinux-build -c fsbl
petalinux-build -c u-boot
petalinux-package --boot --fsbl --fpga --u-boot --force
这样在images目录下就会生成我们需要的uImage、system.dtb以及BOOT.BIN,为了确保设备树修改完好,我们这里先反编译一下设备树,生成system.dts,查看里面是否我们要修改的东西都已经修改好了(需要device-tree-compiler)。
在system.dtb文件的目录下运行
dtc -I dtb -O dts -o system.dts system.dtb
打开ststem.dts,我们可以看到已经修改完毕
ZYNQ:使用 PetaLinux 构建Linux项目的更多相关文章
- Jenkins:基于linux构建ivy项目
Jenkins:基于linux构建ivy项目 (二) 基于以上<Jenkins:VMware虚拟机Linux系统的详细安装和使用教程(一)>的配置再进行对ivy项目构建: 启动tomcat ...
- linux服务器中Jenkins集成git、Gradle持续构建Springboot项目
Jenkins是用java编写的开源持续集成工具,目前被国内外各公司广泛使用.本章教大家如何在linux服务器中使用Jenkins自动发布一个可作为linux服务发布的Springboot项目. 自动 ...
- Linux下Jenkins与GitHub自动构建Node项目(Vue)
根据上篇文章<Linux下Jenkins与GitHub自动构建NetCore与部署>,我们知道了Jenkins的强大功能,自动构建,部署了一个NetCore的Web,让开发人员专注于开发, ...
- 转】用Maven构建Mahout项目
原博文出自于: http://blog.fens.me/hadoop-mahout-maven-eclipse/ 感谢! 用Maven构建Mahout项目 Hadoop家族系列文章,主要介绍Hadoo ...
- 转】用Maven构建Hadoop项目
原博文出自于: http://blog.fens.me/hadoop-maven-eclipse/ 感谢! 用Maven构建Hadoop项目 Hadoop家族系列文章,主要介绍Hadoop家族产品 ...
- 运行预构建 Linux 映像的 Windows Azure 虚拟机中的交换空间 – 第 1 部分
本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向 ...
- 使用 Gradle 构建 Java 项目
使用 Gradle 构建 Java 项目 这个手册将通过一个简单的 Java 项目向大家介绍如何使用 Gradle 构建 Java 项目. 我们将要做什么? 我们将在这篇文档航中创建一个简单的 Jav ...
- Jenkins自动构建gitlab项目(jenkins+maven+giltlab+tomcat)
环境准备: System:CentOS 7.3 (最小化安装) JDK: 8u161 (1.8_161) tomcat: 8.5.29 Jenkins: Jenkins 2.107.1 Gitlab: ...
- Eclipse 中构建 Maven 项目的完整过程 - SpringBoot 项目
进行以下步骤的前提是你已经安装好本地maven库和eclipse中的maven插件了(有的eclipse中已经集成了maven插件) 一.Maven项目的新建 1.鼠标右键---->New--- ...
- vue-cli快速构建vue项目模板
vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 1.使用npm安装vue-cli 需要先装好vue 和 webpack(前提是已经安装了nodejs,否则连npm都用不了 ...
随机推荐
- 在FPGA中何时用组合逻辑或时序逻辑
在设计FPGA时,大多数采用Verilog HDL或者VHDL语言进行设计(本文重点以verilog来做介绍).设计的电路都是利用FPGA内部的LUT和触发器等效出来的电路. 数字逻辑电路分为组合逻辑 ...
- 程序员天天 CURD,怎么才能成长,职业发展的思考(2)
接着上一篇:程序员天天 CURD,怎么才能成长,职业发展思考 上一篇写到了用年限来谈程序员的发展,在 4 - 6 年这个时间段需要做的一些事情,接着写这个时间段的. 第 4.5 年时候,你可能会做一些 ...
- 【简说Python WEB】Bootstrap
目录 [简说Python WEB]Bootstrap Bootstrap的导航组件应用 404,500错误页面定制化 系统环境:Ubuntu 18.04.1 LTS Python使用的是虚拟环境:vi ...
- Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本
[0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可. 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新 ...
- linux定时任务crontab 周期执行任务
目录 1. crontab主要作用 2. 如何添加crontab 定时任务 3. 计划任务,crontab命令选项: 4. cron文件语法: 5. 查看计划任务 1 创建脚本文件test.py,在文 ...
- Splashtop 免费60天 大赠送
这两天又是双11,又是 EDG 夺冠,可谓喜事连连.热闹不断.我们也给大家准备了一份长达两个月的免费福利,快乐加倍嗷. 福利详情: 1.分享这篇文章(不要设置分组可见). 2.发送您的 Splasht ...
- 避免Java异常栈被吞掉
The compiler in the server VM now provides correct stack backtraces for all "cold" built-i ...
- 提取关键词作为标题---Java调用Python实现
目录 前景提示 思考 企业级处理方案流程图 Python 实现的方式 Java实现 导入Maven包 书写代码 最终版本 遗留问题: 遇到问题 1.无法解析. 2.模块找不到. 3.乱码处理 版本 继 ...
- Java面试题:让依赖注入变得简单,面对@Autowired和@Resource,该如何选择?
@Autowired和@Resource都是Java Spring框架中的注解,用于实现依赖注入(DI)和控制反转(IoC).它们的区别主要在以下三个方面: 源头不同 @Autowired是Spri ...
- 一套完整的中小级别的企业级监控prometheus
一 相信有很多博客都已经详细的说明了prometheus的作用以及相关的作用以及原理,这里不在赘述,仅仅从部署和配置2个方面来记录一下,为公司产品组搭建的prometheus告警平台的过程以及踩过 ...