【嵌入式Linux-01】Xilinx ZynqMP Petalinux 2019.2 项目创建与配置全流程指南

前言

在基于 Xilinx ZynqMP 平台的 FPGA 开发中,Petalinux 是构建嵌入式 Linux 系统的核心工具,涵盖工程创建、硬件配置、内核裁剪、根文件系统定制、应用开发与编译打包等全流程。本文基于Petalinux 2019.2版本,详细记录 ZynQMP 工程从 0 到 1 的完整配置步骤,包含环境配置、设备树修改、外设驱动开启、应用程序创建、启动脚本定制等实操内容,适用于同平台开发人员参考。

一、环境准备与工程基础配置

1.1 工作目录与环境变量配置

首先进入 Petalinux 工作目录,加载 Petalinux 环境变量,这是执行所有 Petalinux 命令的前提:

# 进入工程工作目录
cd /opt/****/petalinux/

# 加载Petalinux 2019.2环境变量(路径根据实际安装目录调整)
source /opt/pkg/petalinux/2019.2/settings.sh

执行成功后,终端会显示 Petalinux 版本信息,代表环境配置完成。

1.2 创建 Petalinux 工程

基于 ZynqMP 模板创建多个工程(根据项目需求自定义工程名),--force参数强制覆盖已存在的同名工程:

# 基础工程
petalinux-create -t project --template zynqMP --force -n XX_XXX 
# 自定义工程1
petalinux-create -t project --template zynqMP --force -n OPT8_XXX
# 自定义工程2
petalinux-create -t project --template zynqMP --force -n TCC_XXX
  • -t project:指定创建工程类型
  • --template zynqMP:指定硬件平台为 Zynq UltraScale+ MPSoC
  • -n:指定工程名称

1.3 导入硬件描述文件(HDF/XSA)

FPGA 工程师提供的硬件描述文件(.hdf/.xsa) 包含 FPGA 引脚、外设、时钟等硬件配置,必须导入 Petalinux 工程才能匹配硬件平台。

操作步骤:

  1. 进入对应工程目录
  2. 执行命令导入硬件配置文件
  3. 特殊说明:将NR_HUB_XCZU11EG_TOP.bit比特流文件放入配置目录
# 示例1:进入NR_HUB工程并导入配置
cd NR_HUB
petalinux-config --get-hw-description=/opt/lwp/petalinux/config

# 示例2:OPT8_HUB工程配置
petalinux-config --get-hw-description=/opt/lwp/petalinux/OPT8_HUB/config

# 示例3:TCC_HUB工程配置
petalinux-config --get-hw-description=/opt/lwp/petalinux/TCC_HUB/config

# 示例4:NR-HUBLWP工程配置(需提前放入bit文件)
# 前置操作:将 NR_HUB_XCZU11EG_TOP.bit 复制到 /opt/xxx/petalinux/NR-HUBLWP/config
petalinux-config --get-hw-description=/opt/lwp/petalinux/NR-HUBLWP/config
  • /opt/lwp/petalinux/config:为 HDF/XSA 硬件文件统一存放路径(根据实际调整)
  • 执行命令后会弹出图形化配置界面,直接保存退出即可完成硬件导入

二、工程核心配置(U-Boot / 内核 / 根文件系统)

导入硬件后,需要对工程、U-Boot、Linux 内核、根文件系统进行定制化配置。

2.1 工程全局配置

# 进入工程图形化配置界面
petalinux-config

配置完成后务必保存配置,所有工程均需执行此操作。

2.2 U-Boot 配置

U-Boot 是嵌入式 Linux 的引导程序,配置硬件初始化、启动参数等:

petalinux-config -c u-boot

根据硬件需求配置串口、启动介质、网络等参数,保存退出。

2.3 Linux 内核配置

petalinux-config -c kernel

2.4 根文件系统配置(开启必备工具)

根文件系统配置用于添加系统运行所需的工具,本文需开启i2c-toolstcpdump

petalinux-config -c rootfs

配置步骤:

  1. 进入Filesystem -> Utilities目录
  2. 勾选i2c-tools(I2C 调试工具)
  3. 勾选tcpdump(网络抓包工具)
  4. 保存配置并退出

三、设备树(DTS)配置(核心外设驱动)

设备树是 Linux 内核识别硬件外设的关键,所有外设(串口、网口、NAND、SD 卡、SPI、共享内存等)均通过设备树配置。

3.1 设备树文件路径

Petalinux 用户自定义设备树文件路径:

project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

直接编辑该文件,添加外设配置。

3.2 完整设备树配置代码

以下配置包含共享内存、启动参数、串口、网口、NAND Flash、SD 卡、SPI等外设,直接复制替换即可:

/include/ "system-conf.dtsi"
/ {
    // 共享内存配置(AXI reserved-memory)
    reserved-memory {
        #address-cells = <2>;
        #size-cells = <2>;
        ranges;
        sharememory_reserved: sharemme@30000000 {
            reg = <0x0 0x30000000 0x0 0x00200000>;
        };
    };
    // 内核启动参数配置
    chosen {
        bootargs = "earlycon clk_ignore_unused root=/dev/ram rw cpuidle.off=1";
        stdout-path = "serial0:115200n8";
    };
};

// 使能UART1串口
&uart1 {
    status = "okay";
};

// GEM2网口 RGMII配置
&gem2 {
    local-mac-address = [00 0a 35 00 00 01];
    status = "okay";
    fixed-link{
        speed=<1000>;
        full-duplex;
    };
};

// NAND Flash分区配置
&nand0 {
    status = "okay";
    arasan,has-mdma;
    // 删除默认分区
    /delete-node/  partition@0x00000000; 
    /delete-node/  partition@0x00040000; 
    /delete-node/  partition@0x00060000; 
    nand@0 {
        reg = <0x0>;
        #address-cells = <0x2>;
        #size-cells = <0x1>;

        /* 30MB for BOOT.BIN */
        partition@0 {
            label = "BOOT.BIN 40M";
            reg = <0x0 0x00000000 0x2800000>;
        };

        /* 1MB for u-boot env */
        partition@1 {
            label = "u-boot env 1M";
            reg = <0x0 0x02800000 0x00100000>;
        };

        /* 1MB for u-boot env backup */
        partition@2 {
            label = "u-boot env backup 1M";
            reg = <0x0 0x02900000 0x00100000>;
        };

        /* 150MB for Image0 */
        partition@3 {
            label = "NAND Image-0 150M";
            reg = <0x0 0x03a00000 0x09600000>;
        };

        /* 150MB for Image1 */
        partition@4 {
            label = "NAND Image-1 150M";
            reg = <0x0 0x0d000000 0x09600000>;
        };

        /* 40M for log file */
        partition@5 {
            label = "log file 40M";
            reg = <0x0 0x16600000 0x02800000>;
        };

        /* 8M for rf data */
        partition@6 {
            label = "rf data 8M";
            reg = <0x0 0x18e00000 0x00800000>;
        };

        /* 100MB for mnt data */
        partition@7 {
            label = "mnt data 100M";
            reg = <0x0 0x19600000 0x06400000>;
        };

        /* 32MB for reserved */
        partition@8 {
            label = "reserved 22M";
            reg = <0x0 0x1fa00000 0x01600000>;
        };
    };
};

// SD卡1配置
&sdhci1 {
    status = "okay";
    max-frequency = <50000000>;
    no-1-8-v;
    disable-wp;
};	

// SPI0配置(用户态SPI驱动)
&spi0 {
    status = "okay";
  
    spidev@0x00 {
        buswidth = <32>;
        compatible = "spidev";
        status = "okay";
        reg = <0>;
        spi-max-frequency = <25000000>;
    };
};

3.3 SPI 内核驱动开启

设备树配置 SPI 后,需要在内核中开启 SPI 用户态驱动支持:

  1. 执行内核配置命令:petalinux-config -c kernel
  2. 进入路径:Device Drivers -> SPI support
  3. 勾选User mode SPI device driver support
  4. 保存配置退出

四、应用程序与启动脚本创建

Petalinux 支持创建 C 语言应用、安装型脚本,用于定制系统功能。

4.1 创建 C 语言应用程序

创建 C 语言模板应用,默认自动编译并集成到 rootfs:

# 基础应用
petalinux-create -t apps --template c -n myapp --enable
# SPI测试应用
petalinux-create -t apps --template c -n spidev-test --enable
# SPI工具应用
petalinux-create -t apps --template c -n spitools --enable
  • 应用存放路径:<PROJECT>/project-spec/meta-user/recipes-apps/
  • --enable:默认开启编译,自动打包到系统

4.2 创建安装型启动脚本 / 工具

创建安装型应用(用于启动脚本、bin 文件、shell 脚本部署):

# 系统启动脚本
petalinux-create -t apps --template install -n startup --enable
# si5383时钟配置脚本
petalinux-create -t apps --template install -n si5383 --enable
# GPIO控制脚本
petalinux-create -t apps --template install -n gpio  --enable
# 重启控制脚本
petalinux-create -t apps --template install -n reboot --enable
# SFP模块配置脚本
petalinux-create -t apps --template install -n sfp --enable

4.3 部署自定义 Bin/Shell 脚本

gpio脚本为例,将预编译的 bin 文件或 shell 脚本部署到系统:

  1. 脚本存放路径:<PROJECT>/project-spec/meta-user/recipes-apps/gpio/files/
  2. 将自定义gpio脚本替换该目录下的默认文件
  3. 编译后脚本会自动拷贝到系统/usr/bin/目录,可直接执行

五、工程编译与镜像打包

配置完成后,执行编译生成 Linux 镜像,再打包生成启动文件BOOT.BIN

5.1 编译 Linux 系统镜像

# 全编译工程,生成image.ub、内核、U-Boot等文件
petalinux-build

编译时间根据电脑配置而定,编译成功后输出文件在:images/linux/

5.2 打包 BOOT.BIN 启动文件

进入镜像目录,将 FSBL、U-Boot、PMUFW、FPGA 比特流打包为启动文件:

# 进入镜像输出目录
cd images/linux 

# 打包命令(当前目录存在bit文件)
petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga *.bit --force

# 打包命令(bit文件在上级目录)
petalinux-package --boot --format BIN --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf --fpga ../../*.bit --force
  • --force:强制覆盖已存在的 BOOT.BIN
  • 最终生成的BOOT.BINimage.ub为系统启动核心文件,烧录至开发板即可运行

六、总结

本文完整梳理了Petalinux 2019.2基于 ZynqMP 平台的工程开发全流程,核心要点如下:

  1. 环境配置与工程创建是基础,必须正确导入 FPGA 硬件描述文件;
  2. 设备树是外设驱动的核心,需根据硬件平台精准配置;
  3. 内核、U-Boot、根文件系统按需裁剪,开启必备工具与驱动;
  4. 自定义应用与脚本可快速扩展系统功能;
  5. 编译打包后生成的 BOOT.BIN 和 image.ub 为最终启动镜像。

本流程适用于 Xilinx Zynq UltraScale + 系列 FPGA 的 Linux 系统开发,可根据实际项目硬件调整配置参数,快速完成嵌入式 Linux 系统定制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值