Petalinux2024离线编译环境搭建
文章停更挺久了,再不记录怕是要忘了…
一、配置环境
1.ubuntu 24.04虚拟机
2.petalinux 2024.2工具包
3.相关系统依赖库(若有遗漏根据报错自行补充)
二、安装步骤
1.ubuntu下安装对应依赖库
Ubuntu 24.04虚拟机搭建、共享文件夹(或sftp文件传输)等常用功能这里就不再赘述,可自行站内查找。Ubuntu磁盘预留300G左右,或者更大,否则编译几个工程就不够了。
sudo apt-get install gawk build-essential gcc git make net-tools libncurses5-dev
sudo apt-get install zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget git-core diffstat
sudo apt-get install chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib
sudo apt-get install automake screen pax gzip cpio python3-pip python3-pexpect xz-utils debianutils
sudo apt-get install iputils-ping python3-git python3-jinja2 libsdl1.2-dev
2.Xilinx离线工具包下载
由于国内网络问题及常见工作环境限制等,这里主要介绍离线编译环境的搭建。在线工具包只需要执行官方的安装脚本即可。
在Xilinx官方下载界面下载对应的工具包文件:
上述文件分别为Xilinx开发工具链和不同架构的petalinux源文件,其中工具链及Downloads文件为必须下载,剩下的根据所需板卡自行选择。下载需要注册Xilinx论坛账户,使用QQ邮箱有概率不通过。
3.petalinux工具包安装
将petalinux-v2024.2-11062026-installer.run拷贝到ubuntu下并运行,按照脚本提示安装缺少的依赖库,然后将工具链安装到一个路径下即可。
另外三个压缩包,直接拷贝到ubuntu中并解压即可。
4.Vivado & Vitis
这两个软件分别是用来开发fpga和zyna-PS端程序的,安装Vitis会包含Vivado,由于我不想安装在windows下,所以在linux里一并安装了。可按需安装。
如果网络环境好可以试试同页面的在线安装。离线安装这里选择第三个,下载完解压后直接运行xsetup安装程序即可:
安装完成后会弹出一个安装依赖库的提示,主要是检查软件需要的运行库有没有遗漏,按照提示执行一下脚本即可:
到这里需要安装的软件基本就安装完毕了。
三、工具使用
1.加载工具环境
使用vivado或vitis前,需要加载一下环境变量,使用petalinux编译工程前,也需要加载对应的环境变量,为了方便起见,可以在bashrc中对命令进行简化:
sudo vim ~/.bashrc
# 将以下两行添加到末尾
alias sptl='source <path_to_petalinux>/settings.sh'
alias sptool='source <path_to_Vitis>/settings64.sh'
# 保存并退出
source ~/.bashrc
然后在命令行执行sptl或sptool即代表执行对应的环境变量加载:
使用sptl后能看到命令输出,并能找到petalinux脚本目录,使用sptool后能找到交叉编译工具链目录,即表示功能正常。
2. 创建工程并生成xsa硬件描述文件
在命令行输入以下命令即可打开vivado:
sptool
vivado
参考站内创建工程的文章即可,这里不多赘述。
3.构建petalinux镜像
使用以下命令创建petalinux工程:
sptl
petalinux-create -t project --template zynq -n hello_world
其中-t为类型,可选:project(工程)、modules(内核驱动)、apps(自定义应用程序)
–template为工程模板,可选:zynq、zynqMP、microblaze
-n为名称
创建完工程后进入工程目录,将上一节创建的xsa硬件描述文件拷贝进去,然后执行以下命令即可导入硬件:
petalinux-config --get-hw-description <path_to_xsa>
然后主要需要修改以下几个部分:
1) Yotoc Settings
取消网络条件下编译:
添加本地downloads目录:(注:需要加file://前缀
)
添加本地sstate目录:(
注:zynq为arm目录,zynqMP为aarch64目录
)
2) 修改根文件系统存储介质及分区
需按照实际硬件修改
3) qpsi分区设置
此部分与qpsi中的镜像存储分区有关,如果是sd卡启动可以不做修改。
以下分区仅供参考,如果在打包时实际大小超出了分区大小,则需要根据实际进行修改。
4) 修改uboot启动参数中的分区设置
按照上一步中的分区填写对应的偏移地址及大小即可,主要关注下列四个参数即可(qspi启动方式需要)。
主要修改的地方就是以上部分,修改完保存退出即可,其他条件后续有需求再说,比如静态ip地址、nfs启动等等。
5) 根文件系统配置
petalinux-config -c rootfs
主要修改的地方为以下内容,包括串口自动登录、设置systemd为系统管理进程等:
另外需要打开coreutil参数,此参数与ssh连接有关:
其他的软件包按照需求添加即可,这里不多赘述。
4.注意事项
1) 工程参数修改
在上述条件中,虽然设置了本地缓存路径和bootscr(boot script)的偏移地址,但实际编译及打包时其实无法正常使用,应该是Xilinx官方的bug。
打开项目目录下的以下文件,手动添加本地缓存路径,并修改启动脚本的偏移地址:
注:此处需要写绝对路径,相对路径无法解析
注:只需要添加第一条即可,如为2022及之前版本需要添加后两条
需要添加的设备树属性可以在以下文件中添加:
#修改内核配置
petalinux-config -c kernel
#修改根文件系统配置
petalinux-build
2) 报错解决
ubuntu24.04初次编译会报以下错误:
ERROR: libtinfo.so.5 is required by meta-xilinx-tools.
This library must be installed before the build system can use xsct. It is often part of an ncurses5 package.
这是因为xilinx-tools需要libtinfo.so.5 这个依赖库,但是ubuntu24.04上为最新的libtinfo.so.6,这里可以选择手动创建一个软链接,或者卸载libtinfo.so.6安装libtinfo.so.5(不推荐
)。
sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/x86_64-linux-gnu/libtinfo.so.5
还有每次开机后首次编译会报以下错误:
ERROR: PermissionError: [Errno 1] Operation not permitted
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/amonter/work/petalinux/hello_world/components/yocto/layers/poky/bitbake/bin/bitbake-worker", line 278, in child
bb.utils.disable_network(uid, gid)
File "/home/amonter/work/petalinux/hello_world/components/yocto/layers/poky/bitbake/lib/bb/utils.py", line 1696, in disable_network
with open("/proc/self/uid_map", "w") as f:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 1] Operation not permitted
手动执行一次以下命令即可:
sudo apparmor_parser -R /etc/apparmor.d/unprivileged_userns
5.镜像打包
编译完毕后,在项目的image/linux下存放编译后的所有文件,在打包启动镜像之前,还需要制作一个boor.scr启动脚本,在默认的boot.scr中,有关于如何制作该脚本的说明:
# 新建脚本命令文本
vi boot.txt
# qspi加载内核
sf probe 0 0;
sf read 0x10000000 0x520000 0xA80000;
bootm 0x10000000;
# sd卡加载
fatload mmc 0:0 0x10000000 image.ub;
bootm 0x10000000;
# 制作脚本
mkimage -c none -A arm -T script -d boot.txt boot.scr
制作完后拷贝到image/linux目录下即可。
镜像打包:
petalinux-package boot --fpga --u-boot --kernel --force
如果没有fpga的bitstream文件,则不需要--fpga
参数;如果是sd卡启动,则不需要--kernel
参数,直接将image.ub拷贝到启动分区即可。以上就完成了软件安装到制作启动镜像的所有内容,后续会继续更新遇到的其他工程和问题。