Zynq嵌入式Linux开发

参考文献《3_领航者ZYNQ之嵌入式Linux开发指南_V1.5.2.pdf》

一、Petalinux开发

1.1 Petalinux简介

Petalinux 工具是 Xilinx 公司推出的嵌入式 Linux 开发套件,包括了 u-boot、LinuxKernel、device-tree、rootfs 等源码和库,以及 Yocto recipes,可以让客户很方便的生成、配置、编译及自定义 Linux 系统。Petalinux 支持 Versal 、Zynq UltraScale+ MPSoC、Zynq-7000 SoC 以及 MicroBlaze,可与 Xilinx 硬件设计工具 Vivado 协同工作,大大简化了Linux 系统的开发工作。

PetaLinux 工具提供了在 Xilinx 处理系统上自定义、构建和部署嵌入式 Linux 解决方案所需的一切。该解决方案旨在提高设计生产力,可与 Xilinx 硬件设计工具一起使用,以简化针对 Zynq-7000 SoC 的 Linux 系统的开发。

1.2 Petalinux 的设计流程概述

通常 PetaLinux 工具遵循顺序设计流程模型,如下表所示:

image-20230526142446442

从上表可以看到,使用 Vivado 搭建好硬件平台后,通过几个命令就完成了 Linux 系统的定制,极其方便。
需要说明的是以上设计流程不是按部就班的每一步都执行一遍,可以根据使用场景有选择的执行。一般的设计流程如下:

  1. 通过 Vivado 创建硬件平台,得到 hdf 硬件描述文件;

  2. 运行 source <petalinux 安装路径>/settings.sh,设置 Petalinux 运行环境

  3. 通过 petalinux-create -t project 创建 petalinux 工程;

  4. 使用 petalinux-config –get-hw-description,将 hdf 文件导入到 petalinux 工程当中并配置 petalinux 工程;

  5. 使用 petalinux-config -c kernel 配置 Linux 内核

  6. 使用 petalinux-config -c rootfs 配置 Linux 根文件系统

  7. 配置设备树文件设备树文件 project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

  8. 使用 petalinux-build 编译整个工程

  9. 使用 petalinux-package –boot 制作 BOOT.BIN 启动文件

  10. 制作 SD 启动卡,将 BOOT.BIN 和 image.ub 以及根文件系统部署到 SD 卡中;

  11. 将 SD 卡插入开发板,并将开发板启动模式设置为从 SD 卡启动;

  12. 开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入 Linux 系统。

二、Linux图形界面的使用

​ 一般我们使用 Linux 大多都是使用终端进行操作,也就是使用字符界面。其实 Linux 也是有图形界面的,比如我们使用的 Ubuntu 主机,默认就是 GNOME 图形界面。与 Windows 系统不同的是,Windows 的图形界面是不可以更换和卸载的,而且图形界面崩溃了,整个系统基本就崩溃了,而 Linux 的图形界面只是一个应用程序,可以更换和卸载,常用的图形界面有GNOME、KDE、Xfce、LXDE 等。

​ Linux 的图形界面,以下简称桌面有很多,如 GNOME、KDE、XFCE、LXDE 等,每个桌面都有属于自己的风格特点。与 GNOME、DE 不同的是,XFCE、LXDE 定位于轻量级的桌面,可用于硬件性能配置不高的电脑或嵌入式领域。因为图形界面对硬件性能还是有要求,正因为如此,我们平常使用的电脑都带有 GPU,当然了,嵌入式领域很少带 GPU 的,所以一般使用的是轻量级的桌面,或者用 Qt 搭建一个。桌面对于 Linux 系统来说,只是一个应用程序,所以是可以移植的。

一般 Linux 的发行版都是带有桌面的,像我们常用的 Debian 发行版、Ubuntu 发行版都是带有桌面的。所以我们只需要使用这些 Linux 发行版的根文件系统就可以了。这些发行版的根文件系统从哪儿来呢,需要移植吗?

Linaro,一间非营利性质的开放源代码软件工程公司,主要的目标在于开发不同半导体公司系统单芯片(SoC)平台的共通软件,以促进消费者及厂商的福祉。由 ARM、飞思卡尔、IBM、Samsung、ST-Ericsson 及德州仪器(TI)等半导体厂商联合,在 2010 年 3 月成立。针对于各个成员推出的 ARM 系统单芯片(SoC),它开发了 ARM 开发工具、Linux 内核以及 Linux发行版(包括 Android 及 Ubuntu)的主要自动建构系统

​ 一般我们使用的 ARM 编译工具链是由这家公司提供的。我们需要的 Linux 发行版的根文件系统该公司也已经做好了,提供在网站:https://releases.linaro.org/

可以看到 Linaro 提供了 debian 、ubuntu不同发行版的根文件系统。

image-20230526154425754

image-20230526154511011

其中根文件系统放在 linaro-jessie-alip-20161117-32.tar.gz 文件中,我们可单击该文件进行下载,本章我们使用的就是该文件。

2.1 配置 Petalinux 工程

进入到第六章创建的 Petalinux 工程目录下,输入如下命令,首先还是对 Petalinux 运行环境进行初始化:
source /opt/pkg/petalinux/2018.3/settings.sh
现在重新配置 petalinux,重新设置根文件系统类型,输入如下命令:
petalinux-config
在弹出的配置界面中,进入到“Image Packaging Configuration”菜单下的“Rootfilesystem type (INITRAMFS)”子菜单下,如下图所示:

image-20230526154719506

2.2 编译 Petalinux 工程

现在我们编译整个 Petalinux 工程,在终端输入如下命令:
petalinux-build
等待命令执行完毕。

2.3 制作 BOOT.BIN 启动文件并复制到 SD 卡

使用下面命令生成 BOOT.BIN 文件:
petalinux-package --boot --fsbl --fpga --u-boot --force
命令执行完毕之后,将前面制作好的 SD 启动卡通过读取器连接到 Ubuntu 系统,将image/linux 目录下的BOOT.BIN文件和 image.ub 文件拷贝到 SD 启动卡的 FAT32 分区。

2.4 拷贝根文件系统到 SD 卡的 ext4 分区

将前面下载的 linaro-jessie-alip-20161117-32.tar.gz 根文件系统压缩文件拷贝到Ubuntu 系统中.

image-20230526154943301

​ 前面我们制作的 SD 启动卡有两个分区,一个 FAT32 分区、一个 Ext4 分区,但是第二个分区在此之前我们一直没使用过,原因在于前面章节实验我们使用了 INITRAMFS 根文件系统,该类型根文件系统是使用内存模拟出来的,已经集成在 image.ub 镜像文件中了,适用于
根文件系统比较小巧的情况,所以不需要单独的分区来存放根文件系统。
​ 而接下来我们使用到的这个根文件系统压缩文件都有 500 多 M,所以需要单独的分区来存放;笔者使用的 SD 启动卡已连接到 Ubuntu 系统,并且第二个分区挂载目录为/media/zynq/rootfs/,接下来需要将 linaro-jessie-alip-20161117-32.tar.gz 压缩文件解/media/zynq/rootfs 目录下。

​ 解压后将 binary 目录下的所有文件及文件夹移动到binary 所在目录,也就是/media/zynq/rootfs/目录:

image-20230526155135611

​ 现在可以卸载 SD 卡了,特别注意的是,在卸载 SD 卡时,当前终端需要退出 SD 挂载目录,执行 sync 命令同步数据,将缓存中的数据写入到 SD 卡,之后再执行卸载命令,卸载完成之后才可以拔掉 SD 卡,过早拔出 SD 卡会导致开发板上的 Linux 系统启动失败。

三、系统移植

​ Petalinux是一个封装好得到Linux系统搭建工具,只需要按照第一章中的设计流程就能订制一个嵌入式linux系统。但是Petalinux 封装了细节,只提供了配置接口,对开发者是友好的,但对学习者就未必了。就像我们使用 Petalinux 搭建完 Linux 系统后,在领航者开发板上成功运行,但对 U-bootlinux 内核根文件系统一无所知。

​ 一般我们在搭建 Linux 系统时需要移植 Linux,在移植 Linux 之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动Linux 内核,bootloader 有很多,常用的是 U-Boot移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核以后 Linux 还不能正常启动,还需要**再移植一个根文件系统(rootfs)**,根文件系统里面包含了一些最常用的命令和文件。所以 U-Boot、Linux kernel 和rootfs 这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统。

​ 在每个使用 Petalinux 或 arm 交叉编译器 arm-linux-gnueabihf-的终端都需要先设置 Petalinux 的环境变量。如果只需要 arm 的交叉编译器,不需要 Petalinux,可以在终端输入如下命令:

sptl
echo 'export PATH=$PATH:'`which arm-linux-gnueabihf-gcc | xargs dirname` | tee -a ~/.bashrc

这样设置以后,我们就可以直接使用 arm 的交叉编译器,无需再设置 Petalinux 的工作环境。

3.1 U-Boot使用实验

3.1.1 U-Boot简介

​ 对于计算机系统而言,从开机上电到操作系统启动需要一个引导过程,这个引导过程由引导程序指定。引导程序是系统加电启动运行的第一段软件代码。在 PC 体系结构中,引导程序由主板上的 BlOS 和位于硬盘 MBR 中的启动代码组成。系统上电后,首先运行 BlOS,在完成硬件检测和资源分配后,将硬盘 MBR 中的引导程序读到系统的 RAM 中,然后将控制权交给引导程序。引导程序的主要运行任务就是将内核映像从硬盘读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。嵌入式 Linux 系统同样离不开引导程序,这个引导程序一般我们叫作启动加载程序(Bootloader)

Bootloader 是在操作系统运行之前执行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。也就是说芯片上电以后先运行一段 bootloader 程序。这段 bootloader 程序会
先初始化 DDR 等外设,然后将 Linux 内核从 flash(NAND,NOR FLASH,SD,MMC 等)拷贝到DDR 中,最后启动 Linux 内核。当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核

​ 对于嵌入式系统,bootloader 是基于特定硬件平台实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的 bootloader,不同的处理器架构都有不同的 bootloader。Bootloader 不仅依赖于 CPU 的体系结构,而且依赖于嵌入式系统板级设备的配置。对于两块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的 bootloader程序也能运行在另一块板子上,一般需要修改 bootloader 的源程序。庆幸的是,大部分bootloader 仍具有很多共性,某些 bootloader 能够支持多种体系结构的嵌入式系统。

​ 现成的 bootloader 软件有很多,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最为广泛。

​ 特别说明的是对于 ZYNQ 而言,在引导过程中,先运行 FSBL 来设置 PS,然后运行 U-Boot 用于加载 Linux 内核映像并引导Linux,所以 uboot 对于 zynq 而言是第二阶段引导程序,FSBL 是第一阶段引导程序。

​ uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件。uboot是一个裸机代码,可以看作是一个裸机综合项目。现在的 uboot 已经支持液晶屏、网络、USB等高级功能。uboot 官网地址:http://www.denx.de/wiki/U-Boot/

​ 我们可以在 uboot 官网下载 uboot 源码,但是我们一般不会直接用 uboot 官方的 U-Boot 源码的。uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个为其设计的芯片定制的 uboot 版本。既然是定制的,那么肯定对自家的芯片支持会很全,虽然 uboot 官网的源码中一般也会支持他们的芯片,但是绝对是没有半导体厂商自己维护的 uboot 全面。

​ Xilinx 维护的 uboot 版本可在网站 https://github.com/Xilinx/u-boot-xlnx 查看,下载地址为:https://github.com/Xilinx/u-boot-xlnx/releases

image-20230526164050728

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 lk
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信