Learning Linux(2)-Petalinux(1)

写在前面:此博客的部分操作和介绍参考了正点原子关于Zynq嵌入式Linux的开发教程,并非原创,故确定为转载,写此博客的目的是为了梳理学习过程中的知识点,方便以后回顾。如有侵权,我会立即删除。
一、petalinux的简单介绍
Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件,包括了 u-bootLinux Kerneldevice-treerootfs(根文件系统) 等源码和库,以及 Yocto recipes,可以让客户很方便的生成、配置、编译及自定义 Linux 系统。 Petalinux 支持 Versal 、 Zynq UltraScale+ MPSoC、Zynq-7000 SoC 以及 MicroBlaze,可与 Xilinx 硬件设计工具 Vivado 协同工作,大大简化了Linux 系统的开发工作。

其中u-boot、Linux Kernel和rootfs是嵌入式Linux系统的最重要的组成部分,也是所有话题绕不开的核心问题。

petalinux的出现可以让Xilinx开发者随心所欲地、方便地配置U-Boot、Linux Kernel和根文件系统,快速的进行上板验证,大大简化了传统嵌入式Linux的开发流程。

二、petalinux的安装
petalinux的安装文件可以在Xilinx官方网站下载,随后通过文件传输服务传递到Linux虚拟机上完成petalinux开发套件的安装。
下载时的步骤如下:
点击支持——下载与许可

进入下载页面之后点击petalinux,左侧可以选择要下载的版本,这里我们可以选择任意一个历史版本,我使用的是petalinux2018.3
在这里插入图片描述
在这里插入图片描述
点击Petalinux 2018.3安装即可,此后可能需要登录Xilinx账户,登陆完成后开启下载:
在这里插入图片描述
下载完成之后解压到本地,通过FTP服务将解压出来的.run文件传输到Ubuntu,就像这样:
在这里插入图片描述
我将文件传输到了Ubuntu上,并且使用chmod为其赋予了执行权限,可以看到文件名变成了绿色,表示可执行
Petalinux在安装之前需要安装很多依赖库,复制下面的bash即可,如下所示:

sudo apt-get install tofrodos iproute2 gawk gcc g++ git make net-tools libncurses5-dev \
tftpd zlib1g:i386 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 gzip automake

安装完成之后可以开始Petalinux的安装,我首先在当前路径下建立了一个名为Petalinux的文件夹,然后直接使用下面的命令行将Petalinux安装到此文件夹中:

./petalinux-v2018.3-final-installer.run ./Petalinux/

在这里安装时,除了上面的依赖包,应该对python版本也是有要求的(上面没有体现出来),同时对ubuntu的版本也有要求,最好是16.04或18.04。我在学这部分的时候一开始安装的是20.04,后来发现不支持,换回了16.04就ok了。
在安装过程中需要接受一系列的agreements,看完之后按q推出输入y表示同意即可,接下来开始等待自动安装。
在这里插入图片描述
安装完成之后可以选择删除Petalinux的安装包来节省空间。
最后还要设置系统默认用于脚本解析的解释器,默认是dash,而Petalinux默认需要使用bash
,在终端输入以下命令来修改默认的解释器:

sudo dpkg-reconfigure dash

输入上述命令后会让确认是否继续使用dash,选择否即可:
在这里插入图片描述
再次确认现在使用的解释器是否发生了变化,输入以下命令:

# 确认当前使用的脚本解释器
ls -lh /bin/sh

说明当前的解释器已经切换到了bash
在这里插入图片描述
三、配置petalinux运行环境

  1. 执行settings.sh脚本来初始化运行环境:
    首先进入到Petalinux的安装路径下,输入以下命令:
source settings.sh

需要注意的是该命令只对当前终端有效,重新打开终端后需要重新执行这一命令。
在这里插入图片描述
如果认为这样非常麻烦,可以到home目录下修改.bashrc文件,打开此文件之后在文件尾添加上述初始化Petalinux环境的命令,这样在打开终端之后就会自动执行上述初始化脚本。

但是这样做每次打开终端之后都会要等待一段时间让settings.sh脚本执行完毕,才可以向终端中输入命令。

四、Petalinux的设计流程(Design Flow)

  1. 创建vivado工程,完成硬件系统的设计,综合实现,比特流的生成,最终导出硬件描述符文件(.hdf)。

  2. 创建一个Petalinux工程,并将上述.hdf文件导入Petalinux,就像Launch SDK一样,告诉Petalinux我们设计的硬件系统的细节信息。

  3. 配置Petalinux工程(其中就包括配置内核、配置U-BOOT和rootfs)

  4. 编译Petalinux工程(包含U-BOOT镜像、内核镜像、rootfs、比特流文件、第一阶段启动引导程序(FSBL)镜像文件)

  5. 将上述文件生成启动镜像,烧录到SD卡,启动开发板。

下面简单的走一遍这个流程,假设我们现在已经在vivado中完成了硬件系统的设计,导出了硬件描述符文件.hdf,启动SDK之后我们可以在SDK中完成嵌入式系统的软件设计部分,这部分代码将会运行在PS上,实现各种各样的功能,最后我们可能会使用JTAG接口来调试我们的设计,这是一般的在Zynq上完成嵌入式开发的步骤。
现在我们假设已经做完了上述操作,得到了如下的.hdf文件:
在这里插入图片描述
现在我们进入到petalinux安装路径下,使用命令行创建一个petalinux工程,需要注意的是,petalinux的所有命令都是以**petalinux-**开头的,连按两下tab键可以完成petalinux的命令行补全,就像这样:
在这里插入图片描述1. 创建一个petalinux工程:

# 使用petalinux-create 来创建一个petalinux工程
# 此命令行的详细用法可以使用petalinux-create --help来查看和学习
# 必选参数有两个:
# 1. -t 指定工程的类型 一般来说我们使用project表示创建一个petalinux工程
# 2. -n 指定工程的名称 如果创建的是petalinux工程且导入了板级支持包,则无需指定
# 可选参数常用的如下:
# 1. --template <zynq|zynqMP|MicroBlaze> 指定工程模板类型
# 2.-s <SOURCE> 指定一个特定的板级支持包
# 使用以下命令创建一个petalinux工程,工程创建后会放在当前路径下
petalinux-create -t project --template zynq -n my_project

执行之后的效果如下:
在这里插入图片描述
2. 导入硬件描述文件来配置petalinux工程

# 使用petalinux-config来导入hdf文件
# 此命令的用法使用petalinux-config --help来查看
# 1.导入硬件描述符时使用--get-hw-description [SRC]参数选项
# SRC指向目标工程的Vivado SDK的目录,petalinux会自动检测到hdf文件
# 2.-c指定要配置的模块,例如petalinux-config -c u-boot|kernel|rootfs
# 如果没有使用-c指明模块,那么自动默认打开顶层设计
# 下面只是一个示例,参数自己根据情况来指定
petalinux-config --get-hw-description ../../hdf/Navigator_7020.sdk/

命令执行完成之后打开如下界面:
在这里插入图片描述
3. 配置petalinux的调试串口(只做这一个配置)
上下键选中Subsystem AUTO Hardware Settings,操作选项为Select,回车,进入以下页面:
在这里插入图片描述
选中Serial Settings进入:
在这里插入图片描述
将第一个Primary stdin/stdout改为ps7_uart_0来切换调试串口。
在这里插入图片描述
保存退出petalinux,配置到此结束:
在这里插入图片描述
等待petalinux自动配置完成:
在这里插入图片描述
下次想再次进入配置界面,无需再导入hdf文件,而是直接输入petalinux-config即可进入配置界面。

4.编译petalinux工程
编译petalinux工程时既可以编译整个petalinux工程,也可以编译某一个组件(Component)

# petalinux-build的详细用法可以使用--help来学习
# petalinux-build直接编译整个工程
# petalinux-build -c 编译某个特定组件,如petalinux-build -c kernel
petalinux-build 

这里需要等待比较长的一段时间,完成之后如下图所示:
在这里插入图片描述
随后,在工程路径下会生成一个image文件夹,下面有一个linux文件夹,这就是编译整个工程生成的一些镜像文件。

5.生成BOOT.BIN文件,烧录到SD卡,启动开发板
原先我们可以使用xilinx SDK来生成启动镜像,烧录到QSPI来实现程序固化或烧录到SD卡来实现程序固化,这里也可以使用petalinux工具完成启动镜像的生成与固化,将镜像文件(fsbl镜像文件、bitstream文件、用户程序镜像文件)整合为一个BOOT.BIN文件。

之前,用户程序镜像文件指的是SDK中编写的代码,现在则是u-boot。

这时候需要使用petalinux-package指令,此指令的使用方法如下:

# petalinux-package使用方法可以使用petalinux-build -<模式> --help来查看
# 常用模式包括:
# 1.--boot 打包生成一个boot.bin文件
# 2.--bsp 打包生成一个bsp包
# 在boot模式下可以有以下参数选择:
# 0. --force 如果当前路径下已经有生成的boot.bin文件,那么覆盖之
# 1. --fsbl 指向fsbl镜像文件路径
# 2. --fpga 指向比特流路径
# 3. --u-boot 指向u-boot镜像文件路径
# 进入到之前生成的镜像文件夹下的linux文件夹,输入以下命令
petalinux-package --boot --fsbl zynq_fsbl.elf --fpga system.bit --u-boot u-boot.elf

执行成功之后的结果如下图:
在这里插入图片描述

到此为止,还不足以启动zynq开发板,还需要提供OS内核、设备树、根文件系统,这三者在imagel/linux文件夹下面已经生成了image.ub文件。
注意这两个文件:BOOT.BIN和image.ub文件:
在这里插入图片描述
五、制作启动SD卡
1.将SD卡插入读卡器,使用df -h来查看挂载点,输入

# 将SD卡取消挂载,之后我们将创建FAT32分区和格式化
umount <挂载点>

在这里插入图片描述
我使用的是一片4G的小SD卡,也就是上述图片中检测到的最后一个文件系统。
2. 在SD卡中使用fdisk工具创建一个FAT32分区

# 使用fdisk工具打开SD卡
sudo fdisk /dev/sdb

进入后按m打开帮助菜单,按p打印当前分区,可以看到当前没有分区。
在这里插入图片描述
按n开始创建一个新分区,下面会进行一些问答式的选项,一般来说保持默认即可,一路回车就行:
在这里插入图片描述
完成之后按p查看当前的分区情况,发现类型是linux:
在这里插入图片描述
接下来按t表示改变分区的类型,输入L来展示所有分区类型,我们选择W95 FAT32 (LBA),也就是输入c:
在这里插入图片描述
再次输入p,查看分区类型,发现已经成功切换为FAT32类型:
在这里插入图片描述
最后输入w将配置保存并退出:
在这里插入图片描述
3. 格式化上述的FAT32分区
使用以下命令来格式化分区

# 格式化/dev/sdb1分区,名称为boot,FAT表项大小为32
sudo mkfs.vfat -F 32 -n boot /dev/sdb1

在这里插入图片描述

注意,此命令需要使用sudo,格式化完成之后PC应该就可以立刻检测到此SD卡的存在了,点击一下USB图标,它会自动被挂载到PC,输入df -h,发现它已经被挂载到了一个特定路径:
在这里插入图片描述
现在只需要将之前的image.ub和BOOT.BIN拷贝到FAT32分区中即可。

# 首先进入到image/linux文件夹下
cp -a image.ub BOOT.BIN <挂载点路径>

随后同步一下,目的是保证数据已经从缓冲区写入SD卡。

# 同步命令
sync

然后弹出SD卡读卡器即可。
至此,启动SD卡也已经制作完毕了,现在将SD卡插入开发板并从SD卡方式启动即可。

猜你喜欢

转载自blog.csdn.net/zzy980511/article/details/112345845
今日推荐