ZYNQ linux开发 章节五 Petalinux 设计zynq的linux启动镜像——TF卡启动(Smart ZYNQ版)

本文将跑一遍Petalinux 制作zynq的 linux启动镜像,以此来熟悉zynq的linux开发流程(和前一章节不同,这一节将制作TF卡启动的镜像)。

PS本文仅适用于 Smart ZYNQ板, 如是Tiny ZYNQ的板子请看对应章节

这一节和前一节90%的内容是相同的,但是由于我自己linux是弱项,加上大部分看TF启动教程的人可能没有看过QSPI FLASH启动linux 的教程,所以这一节我也按完整的手把手的去介绍,也当作给自己的一个知识点回顾。 老玩家可以选择性的跳看

本节因为只是为了熟悉开发流程,所以功能会做的尽量简单, linux部分 只保留uart命令提示行的功能,来查看系统是否正常启动了。

以下是开发的完整图文过程:(程序都是在 2018.3版本下 进行的,其他版本请自行测试)

Vivado 部分的工程创建(Vivado 创建过程和之前uart 工程的一致,可以选择性对的跳看)

1)打开Vivado 新建一个项目, 新建一个VIVADO 工程,打开软件 选中Create Project, 如下图所示

2)点击NEXT ,在出现的第二个对话框“Project name”中输入工程名;在“Project location”中选择保存路径;勾选“Create project subdirectory”(默认),最后点击“Next” 备注,所有的路径均不能出现中文名称

3)点击 RTL PROJECT 选项,点击NEXT

4) 第四步Add Sources 选项直接留空,NEXT

5)第五步Add Constraints 选项直接留空,NEXT

6)

选择芯片型号 (板子生产了多个芯片型号,请根据自己板子的型号来进行选择,下图以XA7Z020来进行演示,其余型号自行选择,必须要按照实际型号去填写)

  • XA7Z020 (直接选择xc7z020CLG400-1,因为系统识别到的是xc7z020-1)
  • XC7Z010-1 (xc7z010CLG400-1) (7010 芯片)
  • XC7Z020-1 (xc7z020CLG400-1) 后续生产
  • XC7Z020-2 (xc7z020CLG400-2) 后续生产

备注 (7020 车规级版在vivado2018.3识别出的是xc7z020,如果工程选择xa7z020 ,在SDK环境下有时候会弹出警告,所以这里直接选择Xc7z020CLG400-1)

7)确认所选信息 点击“Finish”,完成vivado的工程创建

之后 工程就新建好了, vivado 进入到开发界面

Block Design 部分创建

此处需要创建一个ZYNQ CORE ,并在ZYNQ CORE中设置DDR 以及UART等参数

UART此处用 EMIO方式连接(Tiny FPGA 以及 EBAZ4205转接板都用EMIO的方式连接)

1)创建一个BLOCK设计

2)搜索并添加ZYNQ7 Processing System,添加ZYNQ7 PROCESSING SYSTEM模块

3)软件自动生成了一个 zynq的block 如下图所示,接下来要做一些相应的设置,双击下图中的ZYNQ核

4)在zynq中设置DDR功能:

依次在弹窗里找到DDR Configuration→DDR Controller Configuration→DDR3,在Memory Part下拉菜单中根据自己板子上的DDR来选择相应的DDR3,本实验所用到型号:MT41K256M16RE-125,数据位宽选择16bit 最后点击“OK”,如下图所示。

5)添加UART功能

由下图可知, 主板的UART功能接在 ZYNQ PS端的 B13脚和B9脚了,即 ZYNQ的TX是 连接MIO51,ZYNQ的RX是连接MIO50

使能UART 0 并在IO选项力 选择MIO方式,下拉菜单里选择MIO50-51

6). 这一步和上一个工程不一样,需要在block design 的设置界面 使能SD的功能(之前的工程是QSPI)

7)随后点OK 保存修改, 点击“Run Block Automation”如下图所示。在弹出的选项中保持默认,点击“OK”,即可完成对ZYNQ7 Processing System的配置

8) 用鼠标连接FCLK_CLK和 M_AXI_GP0_ACLK,得到下图

9)source→Design Source ,右键我们创建的BLOCK工程,点击create HDL wrapper,打包BLOCK文件并生成.v代码

在弹出的菜单里直接点选OK

10) 点击绿色箭头RUN 对代码进行编译

11) 因为这边用的是原生MIO 资源,并且没有使用任何PL的IO口,所以这边不需要额外创建管脚约束

12) 生成bit文件 :按下Generate Bitstream 完成综合以及生成bit文件,等待弹出综合完成的窗口

11)File→Export→Export hardware…在弹出的对话框中勾选“include bitstream”,点击“OK”确认,如下图所示。

12)File→Lauch SDK,在弹出的对话框中,保存默认,点击“OK”,如下图所示。

系统将自动打开SDK开发环境

其中SDK工程下的 下图hdf文件就是我们需要的系统硬件描述文件,这个需要交给petalinux 进行交叉编译用。

PetaLinux 工程创建

1)打开虚拟机下的 Ubuntu系统,打开命令行

输入 source /opt/pkg/petalinux/2018.3/settings.sh 对Petalinux 的环境进行加载

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

2)在Ubuntu下创建工程目录(两种方式 a 命令行,或者 b 图形界面 可二选一)

a 用mkdir 命令创建一个文件夹(普通用户 非root用户)

mkdir Petalinux

b 其实这个文件夹就被创建在 普通用户(这里是user)的home文件夹下 ,图形界面打开home可以直接找到(这里也可以在Home 文件夹图形界面下直接右键新建一个Petalinux 效果一样)

3) 创建Petalinux 工程

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

(备注 如果用此方法,必须重新在这个新打开的命令行中对petalinux 开发环境进行预加载,否则后面会失败,每次打开新的命令行都需要执行这个命令)

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

在命令行输入

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

(为了和上一个工程作区分 这里用的工程的名字并不完全相同)

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

为了方便以后的工程管理,我们将刚才生成的system.hdf 也拖到Petalinux_TF文件夹中

4) 复制hdf文件到刚才创建的工程文件夹中

在图形界面下双击打开这个Petalinux 文件夹

打开刚才SDK的软件界面, 右键hdf文件,选择copy 复制

然后在图形界面打开 Ubuntu 的Petalinux 文件夹下的Petalinux_TF文件夹内, 右键空白处 点选Paste (粘贴)

5)设置路径并启动Petalinux 配置页

在刚才的界面下先CD进入 工程文件夹(Petalinux_TF) 备注(CD 的时候 可以输入文件夹的第一个字母然后按tab键,这样相同名称的文件夹就会跳出来)

cd Petalinux_TF

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

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

之后系统将启动配置页

6) 对Petalinux 进行配置

a) 修改启动项

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

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

选择 boot image settings选项 回车

选择 image storage media 回车

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

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

b )同理 对kernel image settings 也进行设置 ,ubsystem AUTO Hardware Settings 按下回车

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

之后用多次双击ESC的方式回到初始菜单

c) root 文件系统 类型选择

选择Image Packaging Configuration

选择 Root filesystem type

选择 INITRAMFS(这里不要因为是TF启动就选择SD CARD,否则需要构建根文件系统,这个有时间后面章节再写)

之后按多次ESC回到根菜单

d)因为板子上的DDR是512MB 的,所以加载位置保留默认即可 (对于Tiny ZYNQ256MB的板子需要设置加载位置)

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

f )退出 设置界面

主菜单选择EXIT 退出

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

g ) 编译整个工程

petalinux-build

之后系统就开始编译了 ,需要等很久 视机器性能而定

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

h) 打包boot.bin

编译完成后,项目工程文件夹下会有image文件夹,执行petalinux -package 命令 将zynq_fsbl.elf, system_wrapper.bit,u-boot.elf,image.ub 四个文件打包生成
BOOT.bin 文件

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

如下图所示,代表打包完成(有警告,直接忽略)

TF启动测试

在Ubuntu 系统内 打开 工程文件夹内 编译生成的image文件夹

再打开linux 文件夹

复制这2个文件 BOOT.bin、image.ub

然后回到windows 下,粘贴到格式为FAT32的 TF卡的根目录

之后正常退出TF卡, 并将卡插入到 我们的主板上

上电测试

将跳线位置换回到SD上

备注 实际测试过程中会发现 虚拟机 和windows 争抢串口的资源的情况,导致windows 下 无法访问串口,所以这里测试的时候(把串口默认设置连接到windows ) 或者临时挂起虚拟机

设置成SD启动后重新上电后,打开串口助手,波特率设置成115200 ,之后我们就能看到linux 发出来的命令行了(这里也可以用 SDK 自带的Terminal 功能,如下图打开,串口号根据实际的选择,备注:部分JTAG下载器带串口功能,选择串口根据实际用的哪路串口去选择

系统此时停留在等待输入账号密码的状态, 此时输入用户名 root 输入密码 root (不同的串口助手有些需要带回车)

之后就正式登录 petalinux 了

之后就可以进行linux 的操作了 ,以上就是完整的zynq linux 开发简易流程

另外备注 一般linux 的命令行远程调试习惯上用 putty这样的专业工具替代串口助手(这样诸如CTRL+C这样的指令就可以用键盘的形式直接发送了,putty官网可以免费下载到)

打开后配置界面如下 模式选择serial ,并设置好串口号(查看设备管理器得到) 和波特率115200就行

以下是 VIVADO 的工程 (里面的image文件夹 里面是 Ubuntu 下编译的镜像文件,将image 文件夹里的镜像复制到fat32的TF卡也能看效果)

发表回复

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