使用petalinux定制linux系统


  写这篇文章的背景是我刚开始接触linux系统,之前一直在做开发板裸机开发,所以有写的不对的地方还请各位大佬指教一下,谢谢,本篇文章参考的是黑金AX2UCG-E开发板教程以及 塞琳思官方文档ug1144,好,下面正式开始学习使用pealinux定制linux系统。注意:ug1144文档有很多版本,比如我的Vivado版本是2020.1,那么导入到patelinux的硬件设计只能适配于petalinux2020.1版本,所以 官方文档也是对应的2020.1版本

1、安装petalinux工具

  petalinux工具包括三个方面:
  1、Yocto 可扩展软件开发工具包 (eSDK),默认情况下会安装4个eSDK,不需要修改,它们是:
在这里插入图片描述
  在之前,eSDK是在指定的路径中解压的,但现在它们位于tar中。对于2020.1及以后的版本,当在petalinux项目中运行petalinux-config或者petalinux-build命令时,eSDK脚本具有相同的名称,并被解压到<plnx-proj_root>/components/yocto中,该项目解压相应的eSDK,例如,如果创建Zynq UltraScale+ MPSoc项目,则只有aarch64 eSDK被解压到<plnx-proj_root>/components/yocto。
  2、XSCT (Xilinx 命令行工具) 和工具链,对于所有的嵌入式软件应用程序(非Linux),petalinux工具都会在背后使用XSCT,三种体系的Linux工具链是从Yocto开始的。
  3、petalinux CLI工具,CLI命令工具包括:

  • petalinux-create
  • petalinux-config
  • petalinux-build
  • petalinux-util
  • petalinux-package
  • petalinux-upgrade

1.1安装环境准备

在这里插入图片描述
  1、上图是petalinux工具安装的配置要求,我选择的是在Ubuntu Linux Workstation/Server 18.04.2
  2、petalinux工具要求主机系统的/bin/sh为“bash”,如果使用的是Ubuntu发行版,而你的/bin/sh为“dash”,则需要进行更改,关于bash和dash我认为是shell(命令解释器)的不同版本,更改的方法如下所示:
  第一步:Ctrl+Alt+T打开终端
  第二步:输入命令sudo dpkg-reconfigure dash,然后会弹出Configuring dash的提示框,选择“No”,回车确认即可。
  3、petalinux工具要求在Linux主机工作台上安装许多标准开发工具和库,如下表所示:
在这里插入图片描述
  这里仅展示部分要求的标准工具和库,那么该怎么安装呢?我这里有个脚本,是黑金教程提供的,在安装之前需要先通过指令sudo apt-get update,更新一下软件列表。接下来在你选择的路径下创建一个脚本文件,我这里直接是在主目录(/home/alinx)路径下创建的脚本文件(host_env_setup.sh)。指令如下:gedit host_env_setup.sh,便创建了该脚本文件,此时脚本文件是空白的,我们需要添加标准工具和库的安装指令,脚本如下:

#!/bin/bash
set -x
script_dir=$(cd $(dirname ${BASH_SOURCE[0]}) && pwd)
# This script sets up a Ubuntu host to be able to create the image by
# installing all of the necessary files. It assumes a host with
# passwordless sudo
# Install a bunch of packages we need
read -d '' PACKAGES <<EOT
iproute2
gcc
g++
net-tools
libncurses5-dev
zlib1g:i386
libssl-dev
flex
bison
libselinux1
xterm
autoconf
libtool
texinfo
zlib1g-dev
gcc-multilib
build-essential
screen
pax
gawk
python3
python3-pexpect
python3-pip
python3-git
python3-jinja2
xz-utils
debianutils
iputils-ping
libegl1-mesa
libsdl1.2-dev
pylint3
cpio
EOT
set -e
sudo apt-get update
if [[ $(lsb_release -rs) == "16.04" ]]; then
echo "Install packages on Ubuntu 16.04..."
sudo apt purge -y libgnutls-dev
elif [[ $(lsb_release -rs) == "18.04" ]]; then
echo "Install packages on Ubuntu 18.04..."
else
echo "Error: current OS not supported."
exit 1
fi
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y $PACKAGES
echo "Now install Vivado, SDK, and Petalinux."
echo "Re-login to ensure the enviroment is properly set up."

  将此脚本拷贝到创建的host_env_setup.sh文件中,然后保存。下一步就是给该脚本文件添加可执行权限,注意:要到文件所在的目录下运行,比如说我是在/home/alinx下创建的文件,那我就来到/home/alinx路径下右击打开终端,输入指令:chmod +x host_env_setup.sh,此时文件已具备可执行的权限,下一步就是执行该脚本文件了,输入指令:./host_env_setup.sh

1.2 正式安装petalinux工具

  默认情况下,petalinux工具会被安装到当前打开的路径下,我们也可以选择自定义路径,这里我选择自定义路径来存放petalinux工具,创建自定义路径的指令如下:

sudo -s       //sudo是切换为root权限的指令,-s是指执行所指定的shell,和exit指令搭配搭配使用,意思是以root身份执行它们之间的指令,不知道我这样理解正不正确
mkdir -p /opt/pkg/petalinux   //mkdir是创建指定目录的指令,-p为了确保目录名称存在,若不存在,就创建一个,/opt/pkg/petalinux是存放petalinux工具的文件夹,在opt左边加一个/表示是在根目录,而不是用户根目录
chgrp <your_uesr_name> /opt/pkg/petalinux //chgrp是变更文件或目录的所属群组
chown <your_user_name> /opt/pkg/petalinux  //设置文件所有者和文件关联组
exit

  petalinux工具的安装包我会在放在本文的最后,运行指令./petalinux-v2020.1-final-installer.run -d /opt/pkg/petalinux/,开始安装,在安装过程中若是碰到协议,选择“y”同意即可,然后按“q”退出。最后贴一张安装过程中的图
在这里插入图片描述

1.3可能会遇到的问题

  在这里列举了几个官方设想可能会碰到的问题,当你安装petalinux失败时,在你的petalinux的安装目录下有一个生成问题日志PetaLinux_installation_log:
  1、WARNING: You have less than 1 GB free space on the installation drive
  答:此警告信息是指安装驱动器几乎已满,安装后,您可能没有足够的可用空间来开发硬件项目/软件项目,解决办法:清理驱动器空间以清除更多空间,或者将petalinux安装在另一个硬盘驱动器上。
  2、WARNING: No tftp server found
  答:此警告信息表示Ubuntu上未运行TFTP服务,如果没有TFTP服务,则无法使用U-Boot网络或TTFP功能将Linux系统映像下载到目标系统。对于其他引导模式,可以忽略此警告。
  3、ERROR: GCC is not installed unable to continue. Please install and retry
  答:此错误消息表示Ubuntu上没有安装gcc编译器,但是如果是执行了上面的脚本的话是应该不会出现这种问题的,或者你可以通过sudo apt install gcc来安装gcc编译器。
  4、ERROR: You are missing the following system tools required by PetaLinux: missing-tools-list 或者是ERROR: You are missing these development libraries required by PetaLinux: missing-library-list
  答:此错误消息表示没有安装“缺少工具列表”或“缺少库列表”中所需的工具或者库,只需安装缺失的工具或者库即可。
  5、./petalinux-v-final-installer.run: line 52:petalinux_installation_log:Permission denied
  答:此错误表示petalinux安装目录没有可写权限,通过chmod指令将安装目录权限改为755,对于755是怎么解释的,在我的另一篇文章【Ubuntu】Linux文件系统简介有讲到。

2、petalinux设计流程

  官方也是非常清晰地讲解了通过petalinux来定制linux系统的设计流程,示例如下:
在这里插入图片描述
  在下一章创建petalinux工程中仔细观察就能发现,与上述设计流程均能一一对应。

3、创建petalinux工程

  根据官方文档解释,创建petalinux工程有两种途径,一种是根据模板创建,另一种是根据BSP(板件支持包),下面也会分别展开介绍,但是我都会对应着第二章的设计流程来讲解。

3.1、根据BSP(板件支持包)

3.1.1创建petalinux工程(对应petalinux设计流程中的第二步)

  petalinux的BSP是支持板件的参考设计,可供你开始使用和自定义你的工程。此外,这些设计可作为在支持的板上创建自己工程的基础,petalinux BSP以可安装的BSP文件的形式提供,包括所有必要的设计和配置文件、预构建和测试的硬件和软件映像,可以下载到主板上或者在QEMU系统仿真环境中引导,你可以将BSP下载到你选择的任何位置。BSP不包含在Petalinux工具安装程序中,需要单独下载和安装,Xilinx上提供了petalinux BSP,但是需要知道官方提供的BSP是否与你的开发板兼容,待会会教你学习如何创建BSP包并使用它。
获得BSP之后,第一步:切换到你想要创建petalinux工程的路径,比如说在/home/user路径下创建,则命令如下:

cd /home/user   //切换到创建的路径
petalinux-create -t project -n petalinux_name -s <path-to-bsp> //根据提供的BSP<path-to-bsp>创建工程,-n后面跟着创建的工程名字

  在命令运行时,它会告诉你从BSP提取并安装的项目,如果指定的位置在网络文件系统(NFS)上,则会将TMPDIR更改为/tmp/,除此之外,它被设置为$PROOT/build/tmp,如果/tmp/<projname_timestamp>也在NFS上,那么它就会报错,你可以随时通过petalinux-config—》Yocto-settings来更改,不要将两个不同的Petalinux工程配置成与TMPDIR相同的位置,这可能会导致错误。
注意:不要在petalinux安装路径下创建petalinux工程,也不要将petalinux安装路径作为tmp构建区域
小插曲:如果报如下错误:

petalinux-create: command not found

则需要返回第一章检查环境是否配置到位。

3.1.2、使用Vivado Design Suite来配置硬件平台(对应petalinux设计流程中的第一步)

  这一部分就是将如何为petalinux准备好硬件平台,通俗点说就是你想在开发板上运行linux系统,你的开发板需要达到什么硬件配置,就好比我的核显AMD 5600G连双人成行这款游戏都打不动,真是无语。下面就是几个系列的最低配置要求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.1.3、将硬件平台导出到petalinux工程(对应petalinux设计流程中的第三步)

  配置完硬件平台后,petalinux工程还需要一个硬件描述文件(.xsa文件),其中包含有关处理系统的信息,这一块是通过Vivado软件导出的。在工程初始化(或者更新)过程中,petalinux会生成设备树源文件、U-Boot配置头文件和基于硬件描述文件的使能Linux内核驱动文件。
后面的步骤会在第二种途径:基于模板创建中讲解,因为与基于模板创建的不同之处都已讲完。

3.2、基于模板创建

  我自己在跟着黑金教程学习的时候也主要是学习的第二种途径,在创建之前需要保持一个良好的习惯,比如工程路径这些,别最后自己不知道工程放哪里了。

3.2.1、创建petalinux工程(对应petalinux设计流程中的第二步)

  第一步:在用户目录下,创建一个工作目录。“~”表示用户目录,例如我们的用户名是“alinx”时,就等价于“/home/alinx”路径。peta_prj路径用于存放所有的petalinux工程,linuxPsBase路径就是第一个petalinux工程的路径,hardware路径用来存放linuxPsBase功臣所需要的硬件描述文件(.xsa文件)。指令如下:

mkdir -p ~/peta_prj/linuxPsBase/hardware

  然后将你vivado导出的.xsa文件拷贝到hardware文件夹中,就像这样
在这里插入图片描述
  然后进入到存放petalinux工程的路径,设置petalinux环境变量,注意环境变量只在当前打开的终端中有效,后面的与petalinux相关的命令都要在当前终端中输入,如果关闭了当前终端,则需要重新运行这条命令

 cd ~/peta_prj/linuxPsBase/
 source /opt/pkg/petalinux/settings.sh

  以上准备工作结束后,现在开始创建基于模板的petalinux工程,通过指令:

petalinux-create -t project -n petalinux --template zynqMP
//-t参数指示需要创建的类型,这里创建的是工程,所以是project
//-n参数指示工程名称,这里用的是petalinux
//--template参数指示是使用的zynqMP模板来创建的工程

3.2.2、往petalinux工程导入硬件工程(对应petalinux设计流程中的第三步)

  第二步结束后,在linuxPsBase文件下会存在一个名为petalinux的工程文件,使用指令进入petalinux工作目录:

cd ~/peta_prj/linuxPsBase/petalinux

  接着导入硬件描述文件,通过指令:

petalinux-config --get-hw-description ../hardware/
//--get-hw-description参数后面跟着的就是.xsa文件的路径,“../hardware/”中两点表示当前工作路径的上级路径,注意:hardware中必须有且只有一个.xsa文件

  指令执行之后就会出现配置界面:
在这里插入图片描述
  在这里出现了两种方式,一种是从网上下载配置文件,也是官方文档中的方式:自动从github上下载设备树配置文件、内核文件和U-Boot配置文件,直接一步到位,但是有时候因为网络问题会出现,下载不成功,另一种是黑金教程的方式进行离线编译,两种方式对应的上述图片的配置步骤不同,在这里只演示第二种方式。
  在上述配置界面中,使用键盘上的“上下”方向键把蓝色的条移动到“Auto Config Settings”选项上,按回车进入该选项,如图所示:
  在这里插入图片描述
  同样使用方向键和回车键选择当前界面中的“Device tree autoconfig”、“kernel autoconfig”、“u-boot autoconfig”。然后使用键盘方向键的“左右键”选择下方菜单中的“Save”,接着多次选择“Exit”选项直到退出配置界面,其中“kernel autoconfig”、“u-boot autoconfig”这两个选项也可以不选,如果工程中配置了这两个选项且编译出错,也可以尝试把这两个选项去掉再编译

3.2.3 设置离线编译(对应petalinux设计流程中的第四步)

  设置为离线编译时需要下载两个资源包,资源包通过xilinx官网下载,资源包为图中红框框选的两个文件,注意:一定要下载和petalinux版本对应的文件,我这里petalinux是2020.1版本,就需要找到2020.1标签中的这两个文件下载,在文章的最后我也会把资源包链接发给大家。

在这里插入图片描述
  然后将资源包拷贝到虚拟机中并解压,这里我解压到/home/Downloads/petalinux_offlinx_pkg路径中,如下图所示:
在这里插入图片描述
  接着在petalinux工程中(~/peta_prj/linuxPsBase/petalinux)打开终端,输入指令petalinux-config,就会弹出如下界面:
在这里插入图片描述
  选中红色方框中的选项,回车进入配置界面,取消选择“Enable Network sstate feeds”注意:如果之后编译报错提示“Network access disabled through BB_NO_NETWORK”,就把“Enable BB NO NETWORK”取消选中再尝试编译。还是这个界面,选择“Local sstate feeds settings -->”选项,在之后的界面直接按回车,然后在弹窗中输入解压后的“sstate_aarch64”包的路径,例如我这里路径为:/home/alinx/Downloads/petalinux_offline_pkg/sstate_aarch64_2020.1/aarch64,设置好之后按回车键选择< OK >选项,然后选择< Exit >选项返回到下图界面:
在这里插入图片描述
选中“Add pre-mirror ur -->”选项,将路径修改为file://home/alinx/Downloads/petalinux_offline_pkg/downloads_2020.1/downloads ,然后选择< ok >,接着选择< save >,然后选择< Exit >退出配置界面即可。

3.2.3设置本地内核源码以及u-boot源码(对应petalinux设计流程中的第六步)

  在这里需要提前准备好xilinx的内核源码包和u-boot源码包,这个可以在xilinx的github主页下载,如图所示:
在这里插入图片描述

  注意:1、一定要使用与petalinux对应的版本;2、如果多个petalinux工程都需要使用本地源码,那么每一个petalinux工程都需要单独对应内核源码和u-boot源码,否则其中一个petalinux工程修改了源码,就会影响到其他工程。
接着将内核源码和u-boot源码拷贝到虚拟机中并解压,这里我解压到“/home/Downloads/petalinux_offline/pkg”,依旧是在petalinux工程中(~/peta_prj/linuxPsBase/petalinux)打开终端,输入指令petalinux-config,弹出的界面中选择“Linux Componets Selection -->”,接着选择最下面的“linux-kernel(linux-xlnx) -->”选项,接下来的界面中选择最下面的“()ext-local-src”选项,然后刚才的界面中最下面会多出一行选型,按回车选中它,如图所示:
在这里插入图片描述
接下来就可以设置内核源码路径了,选择“External linux-kernel local source path(NEW)”,输入内核源码路径,我这里是:/home/alinx/Downloads/petalinux_offline_pkg/linux-xlnx-xilinx-v2020.1,选择< save >保存一下,然后还是在这个界面,选择“u-boot(u-boot-xlnx) -->”,接着选择“()ext-local-src”,然后选择多出来的这一行“External u-boot local source settings -->”,选择“()External u-boot local source path”选项设置u-boot源码路径,我这里的路径设置为:/home/alinx/Downloads/petalinux_offline_pkg/u-boot-xlnx-xilinx-v2020.1,设置完成后保存并退出。

3.2.3修改设备树、编译petalinux工程(对应petalinux设计流程中的第八步)

  前文中,我创建工程的路径为/home/alinx/peta_prj/petalinuxPsBase/petalinux,然后我们进入到/home/alinx/peta_prj/petalinuxPsBase/petalinux/project-spec/meta-user/recipes-bsp/device-tree/files路径中,在该路径下有两个dtsi后缀的文件,这是petalinux帮我们生成的自定义设备树文件,我们选择编辑system-user.dtsi文件,双击打开后修改为以下内容:

/include/ "system-conf.dtsi"
/ {
};
/* SD */
&sdhci1 {
disable-wp;
no-1-8-v;
};
/* USB */
&dwc3_0 {
status = "okay";
dr_mode = "host";
};

然后在终端中输入指令:petalinux-build进行编译,出现以下界面则表示编译成功,警告无需理会
在这里插入图片描述

3.2.4生成BOOT镜像文件(对应petalinux设计流程中的第九、十步)

  编译成功后进入其结果目录中,我这里是:

cd ~/peta_prk/linuxPsBase/petalinux/images/linux

然后使用如下指令打包BOOT.bin文件:

petalinux-package --boot --u-boot --fpga --fsbl --force //如果你的.xsa文件不包含bitstream,则不要添加--fpga参数,--fsbl是指合成fsbl文件到BOOT.bin中,--force为强制合成,覆盖掉以前合成的BOOT.bin

打包之后在目录中便会有如下文件:
在这里插入图片描述
将以上文件拷贝到SD卡中,记住在此之前需要对SD卡进行格式化,并且格式化为FAT32格式,然后将SD卡插入板卡,通过串口调试工具,
在这里插入图片描述
然后输入账号和密码,都是root,至此一个基本的linux系统就配置完成。
提示:如果petalinux编译过程中出现各种问题,可以尝试使用命令petalinux-build -x mrproper -f来清理以前编译的结果。
还记得3.1.1节中提到的基于BSP创建petalinux工程吗?
我们使用如下指令来创建BSP包,petalinux-package --bsp -p ./petalinux/ --output chapter1.bsp,其中-p 参数后面的路径是 petalinux 工程的一级路径,–output 参数后面跟的是 bsp 包的名称,如果是使用BSP包的话,就用这个指令petalinux-create -t project -n petalinux_bsp -s ./chapter1.bsp,-n 参数后面跟的是 petalinux 工程的名称,-s 参数后面跟的是我们使用的 bsp 包的路径,然后就能创建petalinux工程了。
注意哈,因为petalinux制作的根文件默认为ram类型,所以文件系统不能保存文件和配置即重启后会恢复初始状态。

链接:https://pan.baidu.com/s/1RRVxQPAXMwlLjK1zPTC5rQ
提取码:g3f7

参考:黑金AX2UCG-E教程
   塞琳思官方文档ug1144

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
PetaLinux是一个基于嵌入式Linux的开发工具链,用于构建嵌入式系统。它提供了许多可定制的组件和功能,其中包括对JFFS2文件系统的支持。 JFFS2(Journaling Flash File System 2)是一种针对闪存存储设备设计的文件系统。它具有很好的压缩率和高度可靠性,适用于嵌入式系统。在嵌入式系统中,闪存是一种常见的存储设备,它通常具有较小的存储容量和有限的周期寿命。因此,选择合适的文件系统对于确保系统的可靠性和性能至关重要。 使用PetaLinux时选择使用JFFS2文件系统有几个优点。首先,JFFS2具有较好的压缩率,可以节省存储空间。这在嵌入式系统中特别重要,因为闪存的容量通常有限。其次,JFFS2采用了日志技术,可以确保数据的完整性和一致性。它可以通过将修改的数据写入日志中,然后再写入闪存中来提供数据持久性。这有助于防止数据损坏和错误。 另外,PetaLinux提供了对JFFS2文件系统的内建支持和集成工具。这些工具使得在构建嵌入式系统时轻松地添加和配置JFFS2文件系统成为可能。开发人员可以使用PetaLinux提供的命令和选项设置文件系统的参数和属性,以满足特定的需求。 综上所述,使用PetaLinux来构建嵌入式系统并选择JFFS2文件系统能够提供较好的存储空间利用率和数据的可靠性。这使得嵌入式系统在具有有限存储容量和闪存设备的情况下,能够更好地运行和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值