基于Lemon Zynq 的Petalinux开发 章节二 在 Ubuntu 上完成 Petalinux 的工程创建及编译全过程(TF卡启动)

本文将在上一章hdf文件的基础上完成完整的Petalinux 工程的创建及编译流程。

  • 此章节内容适用于Lemon ZYNQ主板,如是其他板子请看对应板子目录
  • 本文在 vivado2018.3 以及 Petalinux2018.3 版本上进行演示

启动方式:

我们的Lemon ZYNQ,有两种可用的启动介质:16MB 的 FLASH 和 TF 卡。虽然两者都可以用来启动 Petalinux,但需要考虑以下因素:

  • FLASH:容量为 16MB,通常只适用于简单的Petalinux系统。
  • TF 卡:容量可自由扩展,能够容纳更大的应用和文件系统。

鉴于 Petalinux 应用通常超过 16MB,本教程将主要演示如何制作 TF 卡镜像。

硬件资源:

为了使本试验工程的 Petalinux 更加适合今后的二次开发,而不仅仅局限于实验目的,本工程将集成 Petalinux 可能用到的基础功能。这些功能包括 UART、千兆网络、USB HOST、SD、FLASH、LED 和按键等,以确保系统在后续开发中具备全面的功能支持。

根文件系统:

为了使本工程的 Petalinux 更加适合今后的二次开发和使用,本工程将不再采用 INITRAMFS 这种临时根文件系统(不保存数据),而是改用 SD 文件系统。这样,每次在 Petalinux 中的操作都将被系统持久保存,从而方便后续的开发和维护。

以下是完整的创建和编译操作:

一、PetaLinux 工程创建

1)打开虚拟机下的 Ubuntu系统

2)在Ubuntu下创建工程目录(这里用图形界面的方式,当然也可以用mkdir的方式)

在home文件夹下 创建一个Petalinux文件夹(如果之前已经创建可以忽略),也可以图形界面打开Home 文件夹然后直接右键新建一个Petalinux

3) 创建Petalinux 工程

a) 在工程文件夹(Petalinux)的空白处右键,然后点选Open in Terminal 打开终端命令行(这种方式打开命令行会自动定位到当前文件夹),当然也可以普通方式打开终端 ,再用CD的方式定位到此文件夹

b) 在命令行终端中输入 source /opt/pkg/petalinux/2018.3/settings.sh 对Petalinux 的环境进行加载

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

c )在命令行输入以下命令,来创建一个PetalinuxSystem的工程 (大家也可以根据需求自己改名)

petalinux-create --type project --template zynq --name PetalinuxSystem

按下回车后 名为Petalinux_Net_TEST的工程会被创建,并且刚才的文件夹下多了一个对应的工程文件夹

4) 复制hdf文件并粘贴到刚才创建的工程文件夹中 (本节工程建立在上一节的hdf基础上,可以直接从上一章节的工程中复制,也可以在本文最后下载得到)

二、启动Petalinux 配置页

1)在刚才的在命令行终端中输入cd 进入 工程文件夹(PetalinuxSystem) 备注(cd 的时候 可以输入文件夹的第一个字母然后按tab键,这样相同名称的文件夹就会跳出来)

cd PetalinuxSystem

进入文件夹后,按下下列代码, 指定导入hdf的路径(因为是当前命令行的路径所以这里 带一个”.”就可以了,不然=号后跟具体路径) 并按下回车

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

之后系统将启动配置页

2) 对Petalinux 进行配置

a) boot image settings

用键盘上的上下左右键移动光标,选择Subsystem AUTO Hardware Settings 按下回车(按两下ESC可以退回上一层)

选择Advanced bootable images storage Settings ,按下回车

选择 boot image settings选项 回车

(这个界面下方可以选image的名字,保持默认即可)接着我们选择 image storage media 回车

选择 primary sd并按回车(如果你在vivado 里设置了nand flash 等,这里就有多个选项可选了)

之后连按两次ESC 可以返回上一级, 一直返回,直到回到最初的初始界面。

b )kernel image settings

选择Subsystem AUTO Hardware Settings 按下回车

选择Advanced bootable images storage Settings ,按下回车

选择kernel image settings

如果上述界面不是默认primary sd,则点进去修改成primary sd,之后用多次双击ESC的方式回到初始菜单。

c ) Root filesystem type 选择(根文件系统)

选择Image Packaging Configuration

选择 Root filesystem type(这里系统可能默认会选择INITRAMFS)

将系统默认选择的INITRAMFS 修改成 我们需要的SD card (因为INITRAMFS文件系统的数据都是临时的,断电会恢复原样, 优点是不容易被修改并且操作简单,但是使用场景会因此受限,所以这里我们更换根文件系统类型为SD card类型)

之后按多次ESC回到根菜单

d) 保存配置并退出

保存设置 选择save 并点选ok 对设置进行保存

f )退出 设置界面

主菜单选择EXIT 退出

之后 系统进行配置 ,此时等待配置结束

备注:当然上述的设置界面还可以根据需求设置更多的内容,包括dtb的存放位置,env的存放位置等。如果有多串口 ,多网口的情况下还可以设置串口号和网口号,网络MAC地址等内容。(这里默认env 是存放在flash上, dtb是存放在boot image 中)。

三、对kernel 进行配置,增加网络和 USB_HOST部分驱动(kernel 网络和 USB HOST功能实际没有作更改)

输入下列命令进入kernel配置页面:

petalinux-config -c kernel

之后系统会进入kernel配置页。

1)网络部分:

因为我们的Lemon Zynq 主板网络默认是接在PS MIO端,所以这里保持默认不用修改即可,如果是像本站之前Smart Zynq网络是接在PL端,经过GMII2RGMII模块的话,则需要额外增加对应的驱动。

2) USB HOST部分:

根据刚才wiki 网站上的介绍,如果需要配置成USB HOST模式则需要 将kernel按照下图这样设置

因为kernel 设置中针对上图USB HOST中的设置默认都是打开的,所以kernel我们不需要更改设置,直接保存后退出即可

3 )保存并退出

因为上述两个部分我们都保持默认没有进行修改,所以这里我们直接点Save 然后Exit 退出kernel 配置界面

弹出来的菜单 直接选ok,并在之后出现的选项里点exit

之后多次按ESC键返回主菜单,然后按EXIT 退出kernel 设置(接着继续漫长的等待)

四、添加设备树部分

为了让USB功能正常使用,我们需要在设备树上增加USB的相关内容,路径在 我们创建的工程PetalinuxSystem路径下的 /project-spec/meta-user/recipes-bsp/device-tree/files 内的 system-user.dtsi文件。

双击打开这个文件,并按下图所示,在原先的代码后面增加如下内容,之后再保存与退出

/include/ "system-conf.dtsi"
/ {
};

/{
usb_phy0: usb_phy@0 {
compatible = "ulpi-phy";
#phy-cells = <0>;
reg = <0xe0002000 0x1000>;
view-port = <0x0170>;
drv-vbus;
};
};
&usb0 {
dr_mode = "host";
usb-phy = <&usb_phy0>;
};

上述内容中包含了USB 的设备树内容。之后保存并关闭即可。

备注:网上部分教程在这里都需要添加网络部分的设备树,但是经过实际调试,2018.3的petalinux不需要自己手动创建网络的设备树,系统会自动帮我们在设备树里添加网络,而不需要手动添加(在没有编译前看不到设备树,整个工程编译后系统会自动在 /components/plnx_workspace/device-tree/device-tree下的pcw.dtsi文件和和zynq-7000.dtsi文件中自动添加上网络部分的中为我们添加网络部分的设备树内容)。

五、编译整个工程

1) 回到命令行终端,输入以下代码 对Petalinux进行编译

petalinux-build

之后又是漫长的等待

直接到出现提示 successfully built project 代表编译完成了

六、打包Petalinux系统

编译完成后,项目工程文件夹下会有image文件夹,执行petalinux -package 命令 将zynq_fsbl.elf, system_wrapper.bit,u-boot.elf, image.ub 四个文件打包生成
boot.bin 文件,这条命令用于在 Petalinux 环境中创建一个完整的引导映像。

petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --u-boot --fpga --kernel --force

七、找到我们编译生成的镜像文件

1)打开工程文件夹内编译生成的images文件夹下的linux 文件夹

2)复制这2个文件 BOOT.bin、image.ub、rootfs.tar.gz 这3个文件

这三个文件的具体内容:

  • boot.bin:引导加载程序,包括 FSBL、U-Boot 和可选的 FPGA 配置。
  • image.ub:内核和设备树的映像文件。
  • rootfs.tar.gz:压缩的根文件系统映像,包含用户空间所需的所有文件。

下一节我们将介绍SD卡的分区以及文件系统的烧录。

本节的三个文件以及上一节的hdf文件下载:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注