ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PetaLinux 2018.3安装与配置指南:基于Ubuntu 18.04的嵌入式Linux开发环境搭建

PetaLinux 2018.3安装与配置指南:基于Ubuntu 18.04的嵌入式Linux开发环境搭建 1. 项目概述与核心价值最近在折腾一块Zynq-7000的开发板准备搞点嵌入式Linux的开发。第一步也是最关键的一步就是搭建开发环境。对于Xilinx的Zynq、MPSoC这类异构平台官方主推的工具链就是PetaLinux。我这次用的是2018.3这个版本虽然它不是最新的但胜在稳定很多老项目、成熟的BSPBoard Support Package都基于这个版本社区资料也相对丰富。如果你手头的项目恰好指定了这个版本或者你只是想找一个经过充分验证的版本来入门那么2018.3会是个不错的选择。简单来说PetaLinux就是Xilinx提供的一套基于Yocto Project的嵌入式Linux开发工具集。它把内核编译、根文件系统构建、设备树生成、应用开发、系统打包等一系列繁琐的步骤通过一套命令和配置文件给封装了起来。你不用再手动去下载、打补丁、配置、编译Linux内核、BusyBox这些基础组件PetaLinux会帮你处理好依赖和版本匹配。它的核心价值在于让你能更专注于上层应用和驱动开发而不是把大量时间耗在底层系统的搭建和调试上。这篇文章我就以PetaLinux 2018.3在Ubuntu 18.04 LTS系统上的安装为例把整个过程中需要注意的坑、关键的配置点以及我个人的一些实操心得完整地梳理一遍。无论你是刚接触嵌入式Linux的新手还是从其他平台转过来的老手这份指南应该都能帮你省下不少折腾的时间。2. 安装前的环境准备与依赖检查安装PetaLinux第一步不是去运行安装程序而是要把宿主机的环境准备好。很多安装失败的问题根源都出在系统依赖不满足上。PetaLinux 2018.3对宿主机的操作系统版本有明确要求官方主要支持Red Hat Enterprise Linux和CentOS但对于我们个人开发者或小团队来说Ubuntu是更常见的选择。经过实测Ubuntu 18.04 LTSBionic Beaver是与PetaLinux 2018.3兼容性最好的一个版本强烈建议使用。如果你用的是Ubuntu 20.04或22.04可能会遇到一些库版本冲突的问题需要额外处理这无形中增加了复杂度。2.1 系统基本要求确认首先确保你的系统有足够的资源。PetaLinux在构建系统镜像时尤其是首次构建会消耗大量的CPU和内存资源并且需要巨大的磁盘空间来存放源代码、编译中间文件和输出镜像。内存官方建议至少8GB但我个人经验是如果内存小于16GB在并行编译-j选项多个包时系统很容易因内存不足而卡死甚至崩溃。因此16GB内存是保证流畅体验的起步线。磁盘空间这是一个容易被低估的方面。一个完整的PetaLinux工程包含所有源代码和编译输出轻松就能占用30GB到50GB的空间。这还只是一个工程。如果你需要为不同的硬件平台比如Zynq-7000和Zynq UltraScale创建不同的工程或者需要保存多个构建版本那么空间需求会成倍增加。为PetaLinux工作区预留至少100GB的可用空间是明智的。最好将其放在一个独立的分区或磁盘上。处理器多核CPU能显著加速编译过程。建议使用4核或以上的处理器。你可以使用以下命令快速检查你的系统资源# 查看内存和交换空间 free -h # 查看磁盘空间重点看你要安装的目标分区 df -h /home # 假设安装在/home下 # 查看CPU核心数 nproc2.2 安装必需的依赖包这是准备工作中最关键的一步。PetaLinux的安装脚本和后续的构建过程依赖于一系列系统工具和开发库。如果缺少这些包安装可能会报错或者更糟糕的是安装看似成功但在后续构建时出现各种诡异的问题。对于Ubuntu 18.04你需要安装以下包。打开终端一次性执行这条命令sudo apt-get update sudo apt-get install -y \ gcc g make net-tools libncurses5-dev zlib1g-dev \ 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 gawk python3 python3-pexpect \ python3-git python3-jinja2 xz-utils debianutils iputils-ping \ libegl1-mesa libsdl1.2-dev pylint3 cpio注意这里有几个容易遗漏或出错的点python3与pythonPetaLinux 2018.3已经开始转向Python 3但部分脚本可能还对系统默认的python命令有依赖。在Ubuntu 18.04上你需要确保python命令指向python2.7同时python3命令可用。通常Ubuntu 18.04已经配置好了。你可以用python --version和python3 --version检查。libsdl1.2-dev这个包用于支持QEMU等仿真工具的图像显示。如果缺失在运行QEMU仿真时可能会报错找不到显示设备。gcc-multilib在64位系统上编译32位的应用程序或工具时PetaLinux的一些工具链是32位的这个包是必须的。执行完安装后建议重启一下系统以确保所有新安装的库文件被正确加载。2.3 获取PetaLinux 2018.3安装包你需要从Xilinx官网下载PetaLinux 2018.3的安装包。这需要你拥有一个Xilinx账号注册是免费的。登录后在下载中心找到对应版本。安装包通常是一个巨大的.run文件名字类似于petalinux-v2018.3-final-installer.run。文件大小在几个GB。请确保你下载的版本与你的目标硬件如Zynq-7000, Zynq UltraScale, MicroBlaze匹配因为安装器可能会根据你的选择只安装对应的工具链和BSP以节省空间。下载完成后将其放在一个有足够空间的位置例如你的家目录(~/)或专门为PetaLinux准备的目录下。并赋予其可执行权限chmod x petalinux-v2018.3-final-installer.run3. 安装过程详解与关键步骤解析环境准备好安装包在手现在可以开始正式的安装了。PetaLinux的安装路径有讲究官方文档建议安装到/opt/pkg/petalinux/2018.3这类路径但对于个人开发我更倾向于安装到用户的家目录下比如~/petalinux/2018.3。这样做的好处是无需sudo权限管理方便也避免了多用户环境下的权限问题。但无论选择哪里有一个黄金原则必须遵守安装路径绝对不能包含任何空格或特殊字符如括号、引号等并且路径的字符长度最好不要太长。使用简单的全英文路径是最稳妥的。3.1 执行安装命令与交互配置在终端中切换到安装包所在的目录执行以下命令开始安装./petalinux-v2018.3-final-installer.run ~/petalinux/2018.3这里的~/petalinux/2018.3就是你指定的目标安装目录。安装程序会自动创建该目录。执行后你会看到一个文字界面的安装向导。过程大致如下许可协议一路按回车浏览最后需要输入q退出浏览然后输入y同意协议。选择安装组件这是关键一步。安装程序会列出所有可用的硬件平台组件例如arm: 对应于Zynq-7000和Zynq UltraScale的ARM Cortex-A系列处理器。microblaze: 对应于MicroBlaze软核处理器。zynqMP: Zynq UltraScale 的特定组件。common: 公共工具和库。对于大多数Zynq-7000用户你需要至少选择arm和common。如果你不确定或者磁盘空间充足建议全部选中这样以后切换平台会省事很多。使用空格键可以选中或取消选中某个组件。开始安装确认选择后安装程序会开始解压和安装文件。这个过程视你的网络速度和选择的组件数量可能会持续几十分钟到一小时以上。期间会从Xilinx服务器下载额外的工具链和文件请保持网络通畅。实操心得安装过程中如果网络中断可能会导致安装失败。如果遇到这种情况通常需要删除不完整的安装目录重新执行安装命令。安装程序支持断点续传但有时并不稳定。在安装组件选择界面如果不小心漏选了某个必需的组件比如为Zynq-7000开发却只选了common后续创建工程时会报错找不到对应的工具链。补救办法是重新运行安装程序指向同一个目录安装程序会进入“修改”模式让你增删组件。3.2 安装后环境变量配置安装完成后PetaLinux并不会自动将其工具链加入系统路径。每次你需要使用PetaLinux命令时都必须先“激活”它的环境设置。这是通过一个脚本文件实现的。在你的安装目录下例如~/petalinux/2018.3存在一个名为settings.sh的脚本文件。你需要 source 这个文件source ~/petalinux/2018.3/settings.sh执行这条命令后当前终端会话的环境变量如PATH就被修改加入了PetaLinux的工具链路径。此时你才能使用petalinux-*系列命令。为了方便我们通常会将这行命令添加到用户的shell配置文件中这样每次打开新的终端都会自动设置好环境。对于常用的bash编辑~/.bashrc文件echo source ~/petalinux/2018.3/settings.sh ~/.bashrc然后让配置立即生效source ~/.bashrc验证安装执行以下命令如果能看到PetaLinux的版本信息说明安装和环境配置成功。petalinux-version预期输出应包含v2018.3等字样。3.3 安装目录结构初探了解安装目录的结构有助于后续的问题排查和工程管理。主要目录如下components/存放了yocto的各种层layer和菜谱recipe这是构建根文件系统的原料库。tools/核心工具所在包括交叉编译工具链xilinx-v2018.3、QEMU仿真器、设备树编译器DTC等。tools/linux-i386/或tools/linux-x86_64/包含一些32位或64位的宿主工具。settings.sh刚才用到的环境配置脚本。4. 创建第一个PetaLinux工程实战安装成功只是拿到了工具箱接下来我们用这个工具箱来实际打造一个最简单的系统镜像。这个过程会涉及PetaLinux最核心的几个命令。4.1 使用BSP创建工程推荐给新手对于新手或者你手头有开发板厂商提供的BSP包这是最快捷、最不容易出错的方式。BSP包.bsp文件里预置了该开发板的硬件描述如设备树、内核配置、根文件系统配置等。假设你有一个名为myboard-2018.3.bsp的BSP文件你可以这样创建工程# 首先切换到你想存放工程的目录比如 ~/projects cd ~/projects # 使用 petalinux-create 命令创建工程 petalinux-create -t project -s /path/to/myboard-2018.3.bsp -n my_first_project命令解释-t project指定类型为工程。-s指定模板源这里就是BSP文件路径。-n指定工程名称这里叫my_first_project。执行成功后会在当前目录下生成一个my_first_project的文件夹这就是你的PetaLinux工程目录。4.2 从Vivado导出的硬件描述创建工程标准流程更标准的流程是从Vilinx Vivado设计套件开始。你在Vivado中完成硬件设计包括FPGA逻辑和处理器系统配置综合实现后需要导出硬件平台文件.xsa文件在2018.3版本是.hdf文件。导出硬件平台在Vivado中打开你的硬件工程选择File - Export - Export Hardware...。务必勾选Include bitstream因为最终的BOOT.BIN需要包含FPGA的比特流文件。导出的文件就是.xsa(或.hdf)。创建PetaLinux工程cd ~/projects petalinux-create -t project --template zynq -n my_zynq_project这里--template zynq指定了模板类型对于Zynq-7000就是zynq对于Zynq UltraScale则是zynqMP。导入硬件描述进入工程目录导入刚才导出的硬件文件。cd my_zynq_project petalinux-config --get-hw-description/path/to/your_hardware.xsa这个命令是关键中的关键。它会做几件事解析.xsa文件提取出处理器配置、外设地址、中断信息等。自动生成对应的设备树源文件.dts放在components/plnx_workspace/device-tree/目录下。弹出一个配置菜单基于Linux内核的menuconfig让你进行系统级配置。首次运行时你可以直接保存退出使用默认配置。4.3 工程目录结构解析创建好的工程目录结构清晰各司其职project-spec/工程规格目录是你主要进行定制的地方。configs/存放顶层配置文件如config文件定义了工程名、版本等。meta-user/这是你自定义菜谱recipe、补丁patch、配置文件的地方。Yocto的层机制允许你在这里添加自己的应用、修改内核配置而不会污染PetaLinux自带的组件。components/当前工程下载和构建的软件包源码及构建目录。images/linux/构建产出的镜像文件最终会放在这里如image.ub内核设备树根文件系统、BOOT.BINFSBL比特流U-Boot、rootfs.tar.gz等。build/编译过程中的临时文件和日志。5. 系统配置、构建与镜像生成工程创建并导入硬件后就进入了配置和构建阶段。PetaLinux提供了三层配置根文件系统配置、内核配置、U-Boot配置。5.1 根文件系统配置根文件系统决定了你的Linux系统里包含哪些命令、库和服务。petalinux-config -c rootfs这会进入一个图形化配置界面。在这里你可以像点菜一样选择需要的软件包。例如在Filesystem Packages下你可以添加bash更好的shell、vim编辑器、iperf网络测试工具、openssh远程登录等。对于调试debug分类下的strace、gdb非常有用。注意事项不要一次性添加太多包尤其是体积大的图形界面包如X11这会导致根文件系统镜像巨大编译时间很长甚至可能超出启动介质如SD卡的容量。初期以够用为原则。5.2 Linux内核配置如果你需要启用或禁用某些内核驱动、调整内核参数就需要配置内核。petalinux-config -c kernel这个界面和标准的Linux内核make menuconfig一模一样。在这里操作需要你对内核模块有一定的了解。常见的操作包括启用特定的网络驱动、USB驱动、文件系统支持如EXT4、NFS。配置内核启动参数Boot options。调整系统日志级别等。5.3 U-Boot配置U-Boot是系统的引导加载程序。大部分情况下使用默认配置即可。如果你需要修改U-Boot的环境变量、启动命令或者添加自定义命令可以在这里配置petalinux-config -c u-boot5.4 执行系统构建所有配置完成后就可以开始构建整个系统了。这是最耗时的步骤。petalinux-build这个命令会依次执行以下任务下载所有选中的软件包源代码从Yocto项目和各种开源镜像站。解压、打补丁、配置、编译每一个软件包。编译Linux内核和U-Boot。生成设备树Blob.dtb。将内核镜像Image、设备树、根文件系统打包成image.ub。生成最终的启动文件BOOT.BIN包含FSBL、FPGA比特流、U-Boot。你可以使用-j选项指定并行编译任务数以加快速度例如petalinux-build -j $(nproc)使用所有CPU核心。构建过程可能会持续几十分钟到数小时取决于你的电脑性能和网络速度首次构建需要下载大量源码。5.5 生成启动镜像构建完成后所有的镜像文件都在images/linux/目录下。但为了将其烧写到SD卡我们还需要一步打包petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot --force命令参数说明--boot指示生成启动镜像。--fsbl指定First Stage Bootloader的ELF文件路径。--fpga指定FPGA比特流文件.bit路径。--u-boot告诉工具使用刚才编译好的U-Boot。--force如果输出文件已存在则覆盖。执行后会在当前目录或指定目录生成BOOT.BIN文件。将这个BOOT.BIN和images/linux/下的image.ub文件一起拷贝到SD卡的FAT32分区你的启动介质就准备好了。6. 常见问题、故障排查与经验技巧即使按照步骤操作也难免会遇到问题。下面是我在多次安装和使用PetaLinux 2018.3过程中总结的一些典型问题和解决方法。6.1 安装阶段问题问题1执行安装脚本时提示“缺少32位兼容库”或“无法执行二进制文件”。原因PetaLinux安装包或其中的某些工具是32位i386架构的而你的Ubuntu是64位amd64系统没有启用32位支持。解决安装32位运行库。sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install -y libc6:i386 libstdc6:i386 libncurses5:i386 zlib1g:i386问题2安装过程中下载组件时网络超时或速度极慢。原因Xilinx的服务器可能在国外网络不稳定。解决尝试在网络状况好的时间段如凌晨进行安装。如果公司或实验室有内部镜像服务器可以配置PetaLinux使用镜像源通过修改安装目录下的components/yocto/source-mirrors等配置但这属于高级技巧初期不建议折腾。耐心等待或者多次重试安装程序它支持断点续传。6.2 构建阶段问题问题1petalinux-build失败错误信息中包含 “Failed to fetch” 或 “Network error”。原因构建过程中需要从网络下载软件包源码网络问题导致下载失败。解决这是最常见的问题。首先检查网络连接。其次Yocto的下载源可能临时不可用。可以尝试清除下载缓存并重试petalinux-build -c clean然后再次petalinux-build。有时缓存文件损坏会导致问题。等待一段时间后再试。构建失败后再次运行petalinux-build它会从失败的地方继续。手动下载最后手段根据错误日志中的URL尝试用浏览器或wget手动下载缺失的文件并将其放入PetaLinux的下载缓存目录通常是~/.pgk-downloads或工程目录下的build/downloads然后重新构建。问题2编译某个软件包时报错“function ‘xxx’ could not be resolved” 或 “undefined reference”。原因通常是交叉编译工具链的库路径问题或者该软件包的菜谱recipe配置有误依赖了不存在的库。解决首先确认你是否正确source了settings.sh。用echo $PATH检查路径中是否包含PetaLinux工具链。查看详细的构建日志。构建失败时终端会输出日志文件路径例如build/tmp/work/.../temp/log.do_compile.xxxx。打开这个日志文件搜索error或undefined能找到更具体的错误信息。如果错误指向某个特定的开源软件包可以尝试在工程配置中禁用它或者搜索PetaLinux/Vivado的官方论坛Xilinx Community看是否有其他人遇到相同问题及补丁方案。问题3构建成功但生成的image.ub或BOOT.BIN非常大超过SD卡容量。原因根文件系统中添加了过多或过大的软件包如调试符号、文档、图形界面。解决重新运行petalinux-config -c rootfs精简不需要的包。重点关注packagegroup-*这类包组它们可能一次性引入大量依赖。在petalinux-config顶层配置中可以尝试更改根文件系统类型。INITRAMFS会打包进内核而EXT4 (SD card)会生成独立的rootfs.ext4文件有时后者在尺寸优化上更灵活。使用petalinux-build -c rootfs -x do_size可以分析根文件系统内各包的体积占比。6.3 使用技巧与心得善用petalinux-build -c命令-c后面跟组件名可以单独编译某个组件如petalinux-build -c kernel只编译内核petalinux-build -c rootfs只构建根文件系统。这在只修改了部分代码时可以极大节省时间。版本控制将project-spec/meta-user/目录和你的自定义代码如驱动、应用纳入Git等版本控制系统。而components/和build/目录是构建生成的体积巨大且可以重建应该加入.gitignore。备份config文件在project-spec/configs/目录下的config文件以及petalinux-config各个子菜单配置后生成的.config文件是你工程的“配方”。定期备份它们可以在工程损坏或需要在另一台机器上重建时快速恢复。理解images/linux/下的文件BOOT.BIN第一阶段启动镜像必须放在SD卡FAT分区。image.ub包含内核、设备树和初始根文件系统ramdisk也必须放在SD卡FAT分区。rootfs.tar.gz或rootfs.ext4完整的根文件系统。如果是ext4格式需要解压或写入到SD卡的第二个分区ext4格式。u-boot.elfU-Boot的ELF文件用于调试或生成BOOT.BIN。首次构建耐心等待第一次运行petalinux-build会下载整个Yocto的构建体系和一个基本系统的所有源码包这是一个非常耗时的过程可能需要数小时取决于网速。请确保网络稳定并做好心理准备。后续的增量构建会快很多。安装和搭建PetaLinux环境尤其是第一次确实是个体力活会碰到各种依赖、网络和版本匹配的问题。但一旦环境跑通后续的开发迭代效率会非常高。这套工具链的核心思想是“描述性构建”你通过配置文件和菜谱告诉系统你想要什么它负责搞定如何获取和编译。多踩几次坑多看看构建日志和官方文档慢慢就能摸清它的脾气。
返回列表