当前位置: 首页 > news >正文

保姆级避坑指南:在Ubuntu 18.04上离线搭建Petalinux 2020.2开发环境(含依赖库、sstate配置)

嵌入式开发实战:Ubuntu 18.04离线部署Petalinux 2020.2全流程解析

在工业自动化、军工电子等特殊领域,嵌入式开发环境往往面临严格的网络隔离要求。传统在线安装方式依赖持续的网络连接和软件源访问,这在无外网或网络受限的场景下成为开发者的主要障碍。本文将深入探讨基于Ubuntu 18.04系统离线搭建Petalinux 2020.2开发环境的完整方案,特别针对ZYNQ7020平台,提供从依赖库准备到sstate缓存配置的全套解决方案。

1. 离线环境构建基础准备

离线环境搭建的核心在于预先获取所有必需的软件包和依赖项。与在线安装不同,离线方案要求开发者提前规划存储空间和组件版本,确保所有元素在隔离网络中能够自洽运行。

硬件资源配置建议:

  • 虚拟机磁盘空间:≥200GB(Petalinux工程编译会产生大量中间文件)
  • 内存容量:≥16GB(复杂工程编译时内存消耗显著)
  • CPU核心数:建议16线程以上(2处理器×8核配置可显著缩短编译时间)

关键组件获取清单:

  1. Petalinux 2020.2安装包(petalinux-v2020.2-final-installer.run)
  2. sstate缓存包(sstate_arm_2020.2)
  3. 预编译依赖库集合(包含所有APT依赖项的离线包)

提示:所有组件应从Xilinx官网下载完整版本,避免使用第三方来源可能导致的版本冲突问题。

2. 系统级依赖环境配置

Ubuntu 18.04作为Petalinux官方支持的基础系统,需要进行针对性配置才能满足嵌入式开发需求。离线环境下,这些配置需要一次性完整实施,避免后续因缺少依赖导致的中断。

2.1 离线依赖库安装

通过以下步骤建立本地依赖库仓库:

# 在可联网环境中预先下载所有依赖 mkdir -p ~/offline_pkgs cd ~/offline_pkgs apt-get download $(apt-rdepends iproute2 gawk python3 build-essential gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget git-core diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib automake zlib1g:i386 screen pax gzip cpio python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint3 | grep -v "^ " | sort -u) # 将下载的.deb包拷贝到离线环境后执行 sudo dpkg -i *.deb

2.2 系统Shell环境调整

Petalinux工具链依赖bash作为默认shell,而Ubuntu 18.04默认使用dash:

sudo dpkg-reconfigure dash

在交互界面中选择"No",将系统默认shell切换为bash。

3. Petalinux离线安装与配置

离线安装Petalinux需要特别注意安装路径和权限设置,以下是经过验证的最佳实践:

3.1 定制化安装流程

# 创建专用安装目录并设置权限 sudo mkdir -p /opt/pkg/petalinux/2020.2 sudo chown -R $USER:$USER /opt # 执行离线安装 ./petalinux-v2020.2-final-installer.run -d /opt/pkg/petalinux/2020.2

安装过程中需要交互确认三个许可协议,连续输入"y"确认即可。安装完成后,每次使用前需加载环境变量:

source /opt/pkg/petalinux/2020.2/settings.sh

3.2 工程模板创建

针对ZYNQ7020平台创建基础工程:

petalinux-create -t project --template zynq -n ZYNQ7020_Base

4. 离线编译环境深度配置

离线编译的核心在于正确配置sstate缓存和pre-mirror路径,这是确保编译成功的关键步骤。

4.1 sstate缓存配置

配置项路径示例说明
Local sstate feeds/mnt/petalinux/sstate/arm指向解压后的sstate_arm目录
Pre-mirror urlfile:///mnt/petalinux/downloads包含所有源码包的本地路径

通过petalinux-config配置工程:

  1. 进入"Yocto Settings → Local sstate feeds settings"
  2. 添加sstate缓存路径(如:/mnt/petalinux/sstate/arm)
  3. 在"Add pre-mirror url"中设置下载路径(如:file:///mnt/petalinux/downloads)

4.2 网络访问控制

必须禁用以下选项以确保完全离线编译:

  • 取消勾选"Enable Network sstate feeds"
  • 启用"Enable BB NO NETWORK"

在project-spec/meta-user/conf/petalinuxbsp.conf文件中添加:

PREMIRRORS_prepend = " \ git://.*/.* file:///mnt/petalinux/downloads \n \ gitsm://.*/.* file:///mnt/petalinux/downloads \n \ ftp://.*/.* file:///mnt/petalinux/downloads \n \ http://.*/.* file:///mnt/petalinux/downloads \n \ https://.*/.* file:///mnt/petalinux/downloads \n"

5. 工程构建与部署实战

完成环境配置后,实际工程构建需要遵循特定流程才能避免常见错误。

5.1 硬件描述集成

将Vivado生成的.xsa文件复制到工程目录,执行硬件配置:

petalinux-config --get-hw-description=.

在配置界面中保持默认设置,保存后退出。

5.2 组件定制编译

分步编译各组件可有效隔离问题:

# 编译U-Boot petalinux-config -c u-boot petalinux-build -c u-boot # 编译Linux内核 petalinux-config -c kernel petalinux-build -c kernel # 编译根文件系统 petalinux-config -c rootfs petalinux-build -c rootfs

5.3 系统镜像打包

生成可启动镜像文件:

petalinux-package --boot --fsbl --fpga --u-boot --force

关键输出文件位于images/linux目录:

  • BOOT.BIN:启动引导文件
  • image.ub:内核与设备树组合镜像
  • boot.scr:U-Boot脚本文件

6. 开发板部署与网络调试

将生成的文件部署到SD卡后,还需要配置网络环境进行应用调试。

6.1 SD卡分区方案

推荐分区方案:

分区大小文件系统内容
/dev/sdb1500MBFAT32BOOT.BIN, image.ub, boot.scr
/dev/sdb2剩余空间ext4根文件系统

格式化命令示例:

sudo mkfs.vfat -F 32 -n boot /dev/sdb1 sudo mkfs.ext4 -L rootfs /dev/sdb2

6.2 NFS共享配置

在Ubuntu主机上配置NFS共享便于应用调试:

sudo apt-get install nfs-kernel-server sudo mkdir -p /home/$USER/nfs_share echo "/home/$USER/nfs_share *(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports sudo service nfs-kernel-server restart

开发板挂载命令:

mount -t nfs <host_ip>:/home/user/nfs_share /mnt -o nolock

7. 以太网应用开发实例

基于ZYNQ7020的以太网功能开发是常见需求,以下为TCP通信实现要点。

7.1 创建应用工程

petalinux-create -t apps -n tcp_server --template c

将服务端代码保存到project-spec/meta-user/recipes-apps/tcp_server/files/tcp_server.c

7.2 交叉编译与部署

petalinux-build -c tcp_server

编译生成的可执行文件位于:build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/tcp_server/1.0-r0/

通过NFS共享到开发板执行测试,可观察到稳定的TCP连接建立和数据传输。在实际项目中,建议使用select或epoll机制提高并发处理能力,同时添加心跳包检测确保连接可靠性。

http://www.jsqmd.com/news/757194/

相关文章:

  • 别再查表了!用C语言实现NTC热敏电阻分段线性拟合,精度轻松到±0.1℃
  • 基于Go与OpenAI API构建微信AI助手:从原理到部署实践
  • CPU本地大模型部署实战:Ollama量化技术与RAG应用指南
  • AMD Ryzen处理器性能优化:如何用免费开源工具SMUDebugTool实现精准调校?
  • 如何用 Python 快速接入 Taotoken 并调用多个大模型 API
  • OpenClaw怎么集成?2026年阿里云及Coding Plan配置详细流程
  • 5步解决INAV飞行不稳问题:新手PID调参完全指南
  • 把 SIW 的安全边界收紧,聊透 Service Implementation Workbench 的授权控制、运行风险与项目落地
  • 开源安全修复实战:从漏洞定位到CI/CD集成的完整框架
  • 鸣潮自动化工具终极指南:如何用ok-ww告别枯燥刷本,轻松解放双手
  • VxWorks核心内核模块:任务管理模块完整解读实践篇(2)
  • TrollInstallerX技术解析:如何绕过iOS安装限制实现越狱工具部署
  • SRS 5.0实战:将企业内网的GB28181监控流,低成本转换成WebRTC和HLS供网页播放
  • 终极性能调优指南:ipatool CPU与内存优化技巧详解
  • 城通网盘解析器:突破下载限制的技术实现与应用实践
  • 终极无损视频剪辑指南:如何用LosslessCut实现10倍速剪辑
  • RStudio里那个不起眼的‘Background Jobs’按钮,真能让你准时下班?
  • Tiled地图编辑器:面向游戏开发者的灵活地图制作解决方案
  • IronyModManager:5分钟解决Paradox游戏模组冲突的终极指南
  • 内链优化是什么?为什么它对网站很重要
  • 番茄小说下载器完整教程:三步掌握离线阅读技巧
  • 把 SAP 系统相关数据守住,别从 Windows 域这一步就埋雷
  • Qwen3-4B-Thinking推理链教学案例:算法时间复杂度分析+伪代码生成+边界测试建议
  • 别再手动录课表了!用WakeUp+Google日历,5分钟搞定飞书课表同步(附时区避坑指南)
  • 深入SystemUI:拆解Android USB连接授权流程,从UsbPermissionActivity到广播监听
  • 深度解析Sketchfab 3D模型下载技术:Firefox浏览器下的WebGL数据拦截实战指南
  • iWave Systems升级NXP i.MX 8平台支持WiFi 6与蓝牙5.1
  • 终极指南:3步免费让老Mac焕发新生,体验最新macOS系统
  • 江苏省 CPPM 和 SCMP 报考新选择(众智商学院)联系方式 - 众智商学院课程中心
  • LRCGET:一站式智能离线音乐歌词批量下载解决方案