使用Petalinux实现ZYNQ的linux程序开发(实现简单的socket通信程序)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


(一)实现功能及开发环境

一、实现功能

使用 Petalinux 定制 Linux 系统,使用 SD 卡引导 linux 系统启动,实现电脑与开发板的socket通信。
人话
(1)在电脑上创建petalinux工程,将开发板上linux系统启动需要的文件(BOOT.BIN 和 image.ub 文件)拷贝到开发板的SD卡中,然后插回开发板中就能在开发板中运行linux系统。
(2)接下来创建petalinux的应用程序,本文的应用程序为socket使用tcp的服务端程序:socket-tcp-server.c,然后通过网络将编译过的可执行文件发送到开发板上运行,运行电脑上的client程序向开发板发送消息开发板上的客户端程序能够成功接收。

二、开发环境

虚拟机系统:   Ubuntu:ubuntu-16.04-desktop-amd64.iso
开发板:     zynq系列zc706开发板
串口终端软件:  MobaXterm:MobaXterm_installer_22.0.msi
Petalinux 2018.3: petalinux-v2018.3-final-installer.run

解释一下什么是串口终端
终端的分类
(1)本地终端:例如对于我们的个人 PC 机来说,PC 机连接了显示器、键盘以及鼠标等设备,这样的一个显示器/键盘组合就是一个本地终端;同样对于开发板来说也是如此,开发板也可以连接一个 LCD 显示器、键盘和鼠标等,同样可以构成本地终端。
(2)串口终端:用串口连接的远程终端,对于嵌入式 Linux 开发来说,这是最常见的终端—串口终端。譬如我们的 开发板通过串口线连接到一个带有显示器和键盘的 PC 机,在 PC 机通过运行一个终端模拟程序, 譬如 Windows超级终端、putty、MobaXterm、SecureCRT 等来获取并显示开发板通过串口发出的数据、同样还可以通过这些终端模拟程序将用户数据通过串口线发送给开发板。 本文使用的就是MobaXterm。
(3)基于网络的远程终端:譬如我们可以通过 ssh、Telnet这些协议登录到一个远程主机。
以上列举的这些都是终端,前两类称之为物理终端;最后一个称之为伪终端。前两类都是在本地就直接关联了物理设备的,譬如显示器、鼠标键盘、串口等之类的,这种终端叫做物理终端,而第三类在本地则没有关联任何物理设备,注意,不要把物理网卡当成终 端关联的物理设备,它们与终端并不直接相关,所以这类不直接关联物理设备的终端叫做 伪终端。


(二)实现步骤

一、开发环境搭建

1、设置Ubuntu 和 Windows 文件本地共享

  设置完成后在Windows的拷贝也能在Ubuntu中进行粘贴,用于后续将文件拷贝到Ubuntu上。
  对于在 Windows 上安装虚拟机软件,在虚拟机软件中运行 Ubuntu 系统这类场景,Ubuntu和 Windows 文件互传可以使用本地共享的方式。这种共享的方式极大的免除了不同系统文件之间的文件复制和磁盘空间的双重占用。

(1)安装VMware Tools
首先在 Vmware 中启动 Ubuntu 系统,然后在 Vmware 的菜单栏,选择虚拟机(M)选项下的安装 VMware Tools(T) ,如下图所示:
在这里插入图片描述
(2)解压VMware Tools的压缩文件
稍等后,在 Ubuntu 系统里弹出挂载 VMware Tools 后的文件浏览器界面,如下图所示:
在这里插入图片描述
右键点击上图箭头所指的文件,在弹出的菜单中选择提取到……,弹出选择提取到的目录,这里选择Home目录,然后点击右下角的提取(E)按钮,如下图所示:
在这里插入图片描述
提取结束后,进入Home目录,可以看到有一个vmware-tools-distrib文件夹,进入该文件夹,在空白处单击鼠标右键,在弹出的菜单中,选择在终端打开(T),如下图所示:
在这里插入图片描述
(3)执行Vmware安装
然后输入命令sudo ./vmware-install.pl,会提示输入用户密码,输入密码后并回车,然后出现“Do you still want to proceed with this installation?[no]”后面输入yes。回车后,后面出现停下来进行选择的,直接一路回车
最后弹出下图所示信息,也就是安装完成了,需要重启图形界面,直接重启虚拟机里的Ubuntu 系统就好了。
在这里插入图片描述
(4)添加共享文件夹并启用
重启 Ubuntu 之后,在 VMware 的虚拟机菜单栏中选择设置(S),如下图所示:
在这里插入图片描述
在弹出的菜单中,选择选项,在该界面中,单击共享文件夹,在右边界面中选择总是启用(E),如下图所示:
在这里插入图片描述
现在我们需要添加共享的文件夹了。这里我们在 Windows 的 F 盘里新建一个名为share的文件夹,如下图所示。这个文件夹呢就是以后我们用来在 Windows 和 Ubuntu 系统之间共享文件的地方。当然了,任何一个文件夹都是可以的,名字也可以自定义,读者可以按自己的实际情况选择。

现在我们单击图中的添加(A)…按钮,弹出下图所示界面:
在这里插入图片描述
点击下一步(N)->,进入下图所示界面:
在这里插入图片描述
点击浏览(R)…,选择我们刚才新建的 share 文件夹,选择好以后点击确定。上图的名称此处保持默认 share,按个人喜好可以修改。点击下一步(N)->,进入下图所示界面:
在这里插入图片描述默认勾选启用此共享,如果不想该文件夹内的内容被修改,可以勾选只读,此处我们不勾选“只读”,点击完成按钮。

  现在共享文件功能就已经启用,如果我们需要向 Ubuntu 系统传文件,就可以直接将该文件复制到 share 目录就可以了。以后我们需要向 Ubuntu 系统传递的文件就都放在 share 文件夹下。那 Ubuntu 如何访问share 文件夹呢?
该文件夹在 Ubuntu 系统中对应的是/mnt/hgfs/share/目录,我们在终端中输入命令:ll /mnt/hgfs/share/如下图所示:
在这里插入图片描述
  可以看到该文件夹为空。如果需要从 Ubuntu 系统向 Windows 传递文件,可以用 cp 命令或mv 命令拷贝或移动相应的文件到该目录。
别忘了,我们还启用了拖曳和复制功能,可以用鼠标直接将文件或文件夹从 Windows 拖到Ubuntu 或从 Ubuntu 拖到 Windows 中。复制功能则可用于在 Ubuntu 和 Windows 中共享粘贴板。

2、Ubuntu 系统搭建 tftp 服务器

  TFTP 作为一种简单的文件传输协议,在嵌入式开发中会经常使用到,而且后面我们在安装 Petalinux 工具时也会提示需要 tftp 服务,所以我们需要在 Ubuntu 上搭建 TFTP 服务器。
(1)安装 tftp-hpa和 tftpd-hpa
需要安装 tftp-hpa(客户端软件包,如果不用可不装)和 tftpd-hpa 软件包,命令如下:
sudo apt-get install tftp-hpa tftpd-hpa

(2)创建tftp文件夹并修改文件夹权限
TFTP 需要一个文件夹来存放文件,我们在根目录下新建一个/tftpboot 目录做为 TFTP 文件存储目录,之所以使用该目录是因为后面使用的 Petalinux 工具默认使用该目录,省得我们每次建 Petalinux 工程的时候手动修改。创建/tftpboot 目录命令如下:
sudo mkdir -p /tftpboot
sudo chmod 777 /tftpboot
这样笔者就在电脑上创建了一个名为 tftpboot 的目录(文件夹),路径为/tftpboot。需要注意的是我们要给 tftpboot 文件夹权限,否则的话后面在使用过程中会遇到问题,所以使用了 chmod 777 命令。

(3)最后配置 tftp。
打开/etc/default/tftpd-hpa 文件,将其内容修改如下:
示例代码/etc/default/tftpd-hpa 文件内容

1 # /etc/default/tftpd-hpa
2
3 TFTP_USERNAME="tftp"
4 TFTP_DIRECTORY="/tftpboot"
5 TFTP_ADDRESS=":69" 
6 TFTP_OPTIONS="-l -c -s" 

TFTP_DIRECTORY 就是我们上面创建的/tftpboot 文件夹目录,以后我们就将所有需要通过TFTP 传输的文件都放到该文件夹里面。

(4)重启 tftp 服务器
输入如下命令:
sudo service tftpd-hpa restart
至此,tftp 服务器就已经搭建好了。

3、Ubuntu 下 NFS 服务开启

后面进行 Linux 驱动开发的时候需要 NFS 启动,因此要先安装并开启
(1)Ubuntu 中的 NFS 服务,使用如下命令安装 NFS 服务:
sudo apt install nfs-kernel-server

(2)创建nfs文件夹
  等待安装完成,安装完成以后在用户根目录下创建一个名为linux的文件夹,以后所有的东西都放到这个“linux”文件夹里面,在“linux”文件夹里面新建一个名为nfs的文件夹,如下图所示:
在这里插入图片描述
上图中创建的 nfs 文件夹供 nfs 服务器使用,以后我们可以在开发板上通过网络文件系统来访问 nfs 文件夹。

3)配置 nfs。
NFS 允许挂载的目录及权限在文件/etc/exports 中进行定义,使用如下命令,打开 nfs 配置文件/etc/exports:
sudo vi /etc/exports
打开/etc/exports 后在后面添加如下所示内容:

/home/zynq/linux/nfs *(rw,sync,no_root_squash)

/home/zynq/linux/nfs 是要共享的目录,*代表允许所有的网络段访问,rw 是可读写权限,sync 是文件同步写入存储器,no_root_squash 是 nfs 客户端分享目录使用者的权限。如果客户端使用的是 root 用户,那么对于该共享目录而言,该客户端就具有 root 权限。添加完成以后的/etc/exports 如下图所示:
在这里插入图片描述
(4)重启 NFS 服务,使用如下命令
sudo service nfs-kernel-server restart

(5)此时可以运行以下命令来显示共享的目录:
  showmount -e
(6)使改动生效
  在 nfs 运行的过程中,修改了/etc/exports 配置文件,可以使用 exportfs 命令使改动生效,具体命令:sudo exportfs -rv

4、Ubuntu 下 SSH 服务开启

开启 Ubuntu 的 SSH 服务以后我们就可以在 Windwos 下使用终端软件登陆到 Ubuntu,比如使用 SecureCRT。
Ubuntu 下使用如下命令开启 SSH 服务:
sudo apt-get install openssh-server
上述命令安装 ssh 服务,ssh 的配置文件为/etc/ssh/sshd_config,使用默认配置即可。

二、Petalinux的安装

1、下载Petalinux

官方下载地址为:https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击之后会出现一个页面,需要登录账户才能进行下载,没办法;如果之前注册过账户直接登录之后就可以下载了,如果还没有账户,则可以点击下方的“创建账号”字样进行注册,关于注册过程就不细说了,按照提供的步骤一步一步做就可以了。

2、安装Petalinux

1)首先将 petalinux 安装包文件 petalinux-v2018.3-final-installer.run 拷贝到 share 共享目录。
  打开终端,切换到/mnt/hgfs/share/目录,可以看到 petalinux 的安装文件 petalinux-v2018.3-finalinstaller.run 已在该目录,可直接访问,如下图所示:
在这里插入图片描述
(2)为 Ubuntu 系统安装必要的运行软件及依赖库
  在安装 Petalinux 之前我们需要为 Ubuntu 系统安装一些必要的运行软件以及依赖库,所以需要确保 Ubuntu 能够正常上网,打开 Ubuntu Terminal 终端执行以下命令:
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
等待软件以及库安装完成之后即可进入下一步。

(3)创建petalinux文件安装目录
  安装 Petalinux 就要考虑安装位置了,对于 Petalinux 这种体积庞大的工具,我们将其放在 /opt 目录下。在 /opt 目录下新建专门存放 Petalinux 的文件夹,如/opt/pkg/petalinux/2018.3,在终端输入以下命令即可:
sudo chown -R $USER:$USER /opt
mkdir -p /opt/pkg/petalinux/2018.3
chown 命令将/opt 目录的属主和属组更改为当前的用户名,如笔者的 Ubuntu 用户名为zynq,执行的 chown 命令就相当于“sudo chown -R zynq:zynq /opt”,然后通过 mkdir 创建安装目录。

(4)安装petalinux
  现在我们将 petalinux 安装在/opt/pkg/petalinux/2018.3 目录下,在终端中输入如下命令:
./petalinux-v2018.3-final-installer.run /opt/pkg/petalinux/2018.3
执行 Petalinux 的安装,运行上述命令后,需要等待一段时间,当出现“Press Enter to display the license agreements”字样为按下回车查看软件许可协议,此处我们就不详细看了,直接按下Q键退出,回到之前的界面之后会出现一个选择项,询问我们是否接受 xilinx 最终用户协议。这个显然是没得选,必须接受,否则无法进行下面的安装;输入Y按回车接受。除了 xilinx最终用户协议之外,还有两个协议也需要大家接受,会依次显示在终端上,同理也是输入 Y 按下回车接受。

接受所有协议之后便会进行下面的安装步骤了,直到安装完成。安装完成之后,我们进入到安装目录下,目录内容如下图所示:
在这里插入图片描述

3、修改 bash

安装完成之后,我们还需要进行最后一个设置,petalinux 工具需要主机系统的/bin/sh 是 bash,而 Ubuntu 默认的/bin/sh 是 dash,所以这里需要进行更改,运行 sudo dpkg-reconfigure dash 命令,如下:
sudo dpkg-reconfigure dash
执行后选择No按下回车禁用dash即可。

4、设置 Petalinux 环境变量

在正式使用 petalinux 工具之前,需要先运行 petalinux 安装目录下的 settings.sh 脚本文件设置 petalinux 工作环境,settings.sh 脚本用于 bash,还有一个 settings.csh 用于 Cshell,如下图所示:
在这里插入图片描述
linux 所需的运行环境进行配置,命令如下:
source settings.sh
需要注意的是该命令只对当前终端有效,重新打开终端后需要重新执行这一步。
鉴于每次打开终端使用 Petalinux 都需要设置相应的环境变量,我们为了方便,将设置Petalinux 环境变量的命令设置成别名,这样我们使用起来就方便些。设置别名方法的很简单,
在终端输入如下命令:
echo "alias sptl='source $PETALINUX/settings.sh'" >> ~/.bashrc
以后我们打开终端后,输入 sptl 就可以设置 Petalinux 的环境变量了,无需输入长长的路径。sptl 的记忆法是 Source PeTaLinux 的环境变量。提醒:在使用 linux 的时候要善用别名但不要滥用别名。
另一种方法是输入命令:vi settings.sh
在文件末尾输入${PETALINUX}"/tools/common/petalinux//utils/petalinux-env-check在每次启动终端后自动就会配置petalinux的环境变量,这也是笔者采用的方法。

三、使用Petalinux定制linux系统

一般Petalinux设计流程概述

(1)搭建vivado工程,导出hdf文件
(2)设置 Petalinux 运行环境:
  source <petalinux 安装路径>/settings.sh
(3)创建一个petalinux工程:
  petalinux-create -t project
(4)需要将hdf文件导入到petalinux.工程(将vivado设计应用到petalinux.工程)
   petalinux-config --get-hw-description
(5)配置petalinux工程(其中就包括配置内核、配置U-Boot以及根文件系统)
   petalinux-config -c kernel 配置 Linux 内核
   petalinux-config -c rootfs 配置 Linux 根文件系统;
   配置设备树文件;
(6)编译petalinux工程(U-Boot镜像、 内核镜像以及rootfs,bitstream, fsbl
  镜像文件)
  petalinux-build 编译整个工程
  petalinux-package --boot 制作 BOOT.BIN 启动文件;
(7)制作 SD 启动卡,将 BOOT.BIN 和 image.ub 以及根文件系统部署到
  SD 卡中;
(8) 将 SD 卡插入开发板,并将开发板启动模式设置为从 SD 卡启动;
(9)开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入
  Linux 系统。

1、创建 petalinux 工程

petalinux工程的创建有两种方法:
  第一种是:使用官方提供的BSP建立工程。
  第二种是:使用vivado生成的xxx.sdk文件建立工程。

创建方法可以参照:https://blog.csdn.net/Challenge_and_smiles/article/details/79268076

本文采用第一种方法,不搭建vivado工程导出hdf文件,而是基于BSP建立工程

PetaLinux BSP简要介绍
PetaLinux BSP(Board Support Package)板级支持包,是一个文件包,包括所有必要的设计配置文件、也测试的镜像等。当你使用特定的硬件平台时,可以帮你隔离底层硬件,更方便地进行上层开发,比如为开发板做准备或者在QEMU仿真环境中使用。
Xilinx的开发板基本上都有对应BSP,在PetaLinux环境下可以很方便地生成一个基础工程,在基础工程的基础上进行配置和增删修改等,会比从零开始做简单得多。这里详细介绍了BSP的安装流程。
你可以把BSP文件看做一个种子,通过特定的命令可以让其“成长”为一个工程,一个模板工程,一个基于特定板子的基础工程,让你可以在此基础上直接进行开发而不需要关心板子上的具体电路等。

根据所需版本和开发板型号在官网选择下载需要的板级支持包BSP。比如我这里选的就是2018.3的开发板型号为ZC706的BSP,则下载文件为xilinx-zc706-v2018.3-final.bsp。

官方下载链接:https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools/archive.html

在这里插入图片描述
(1)配置petalinux环境变量
source /opt/pkg/petalinux/2018.3/settings.sh
(2)基于BSP文件创建petalinux工程
  将BSP文件(xilinx-zc706-v2018.3-final.bsp)从Windows拷贝到petalinux工程创建的路径,如我的路径为/opt/pkg/petalinux。
使用如下命令创建工程:
petalinux-create -t project -s xilinx-zc706-v2018.3-final.bsp -n ALIENTEK-ZYNQ
-t 表示的是 type,类型是project; -s 表示 source,源是你的BSP文件;
-n 表示的是name,为自定义的工程名称。

2、配置 PetaLinux工程

为 SD 卡 ext 文件系统启动和构建系统镜像而配置petalinux工程。
cd 进入工程根目录:

  1. 启动顶层系统配置菜单
    petalinux-config
  2. 选择“Image Packaging Configuration → Root filesystem type”。
  3. 选择 “SD card”作为 RootFS 类型。
  4. 退出菜单配置并保存配置设置。
    注释: 启动实参将在
    <plnx-proj-root>/components/plnx_workspace/device-tree/device-tree/ syst em-conf.dtsi中自动更新。这些更改只有在构建之后才予以反映。

3、编译 Petalinux 工程,构建PetaLinux镜像

cd 进入工程根目录
petalinux-build
该命令将构建系统镜像,生成设备树 DTB 文件、fsbl 文件、U-Boot 文件,Linux 内核和根文件系统映像。编译完成后,生成的映像将位于工程的 images 目录下。

4、生成启动镜像。

制作启动镜像:BOOT.BIN 启动文件

  Petalinux 提供了 petalinux-package 命令将 PetaLinux项目打包为适合部署的格式,其中“petalinux-package --boot”命令生成可引导映像,该映像可直接与 Zynq系列设备(包括 Zynq-7000 和 Zynq UltraScale + MPSoC)或基于 MicroBlaze 的 FPGA 设计一起使用。对于Zynq 系列设备,可引导格式为 BOOT.BIN,可以从 SD 卡引导。对于基于 MicroBlaze的设计,默认格式为 MCS PROM 文件,适用于通过 Vivado 或其他 PROM 编程器进行编程。
  ZYNQ 的启动文件BOOT.BIN 一般包含 fsbl 文件、bitstream 文件和 uboot 文件。

使用下面命令可生成 BOOT.BIN 文件:
petalinux-package --boot --fsbl --fpga --u-boot --force

--fsbl用于指定 fsbl 镜像文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是 images/linux/zynq_fsbl.elf;
--fpga用于指定bitstream 文 件 所 在 位 置 ,后面接该文件对应的路径信息,默认对应的是images/linux/system.bit;
--u-boot用于指定 U-Boot 镜像所在位置,后面接该文件所在路径信息,默认为 images/linux/u-boot.elf。这里笔者均没有指定对应的文件的路径信息,那么 Petalinux 会自动使用默认文件。执行结果如下图所示:
在这里插入图片描述
生成的 rootfs.tar.gz 文件将出现在 images/linux 目录中。后续需要将 rootfs.tar.gz 文件拷贝至 SD 卡的 RootFS 分区并提取文件系统。

5、制作 SD 启动卡

注:在使用 SD 卡前需要先将 sd 卡中的数据做备份,否则会丢失 SD 卡中的数据。
(1)查看当前SD卡分区
将 SD 卡插入到读卡器中、并将读卡器插入电脑并连接到 Ubuntu 系统,在 Ubuntu 系统中找到 SD 卡所对应的设备节点,笔者插入的 SD 卡对应的设备节点为/dev/sdb。现在我们先给 SD卡分区。
在终端中输入如下命令:
umount /dev/sdb*
sudo fdisk /dev/sdb
执行后输入p,执行结果如下图所示:
在这里插入图片描述
(2)删除旧分区:
可以看到 SD 卡目前的分区表,笔者的 SD 卡有一个 FAT32 的分区,在开始新分区之前需要将以前的分区删除,键入“d”,删除该分区,再次键入“d”时会出现下图所示的红色字体提示,表明已无存在的分区;如果大家的 SD 卡存在多个分区,需要全部删除,存在多个分区的情况下,键入“d”时会提示选择需要删除的分区编号。
在这里插入图片描述
(3)新建分区。
输入n创建一个新分区。通过选择p使其为主,使用默认分区号 1 和第一个扇区 2048。设置最后一个扇区,也就是设置第一个分区的大小,这里我们设置 100M就行了,通过输入+100M,为该分区预留 100MB,如下图所示:
在这里插入图片描述
(4)设置分区类型:
输入t”,然后输入c,设置为W95 FAT32 (LBA),如下图所示:
在这里插入图片描述
输入a,设为引导分区,第一个分区就创建好了,如下图所示:
在这里插入图片描述
开始创建第二个分区。
通过键入n来创建根文件系统分区。后面一路默认就可以了,如下图所示:
在这里插入图片描述
(5)写入SD卡:
如果现在输入p检查分区表,会看到刚刚创建的 2 个分区。
如果没问题,键入w以写入到 SD 卡并退出。如下图所示:
在这里插入图片描述
(6)格式化分区
完成了分区创建后,就可以格式化分区了。将第一个分区格式化成 FAT32 分区并命名为 boot,将第二个分区格式化成 ext4 分区并命名为 rootfs。
在终端输入如下命令:
sudo mkfs.vfat -F 32 -n boot /dev/sdb1
sudo mkfs.ext4 -L rootfs /dev/sdb2
在这里插入图片描述
格式化完成之后,在 Ubuntu 系统桌面的左边会出现两个 USB U 盘类设备图标,分别点击两个图标即可自动将这两个分区挂载到 Ubuntu 系统,如下所示:
在这里插入图片描述
当然也可以使用 mount 命令进行挂载,挂载完成后,使用 df -h 命令来查看 SD 卡的两个分区所对应的挂载目录,如下所示:
在这里插入图片描述
(7)将 BOOT.BIN 和 image.ub 以及根文件系统拷贝到SD 卡的boot分区中
接下来我们将 petalinux 工程目录 image/linux 目录下的 BOOT.BINimage.ub 文件拷贝到名为 boot 的分区也即/dev/sdb1 分区中。
image.ub 文件将具有设备树和内核镜像文件。
cp images/linux/BOOT.BIN /media/BOOT/
cp images/linux/image.ub /media/BOOT/

rootfs.tar.gz 文件拷贝至 SD 卡的 RootFS 分区并提取文件系统。
sudo tar xvf rootfs.tar.gz -C /media/rootfs
缺少 rootfs.tar.gz这一步的话将导致每一次开发板断电重启之后,上一次发送到开发板上的文件都不会被保存。

四、使用SD卡启动开发板

1、开发板启动模式设置

将领航者底板上的启动模式开关 BOOT_CFG 的两个开关均拨到下面(都置为 OFF), 即设置为从 SD 卡启动。不同的启动方式与两个拨码开关的状态对应关系如下图所示:(如果没有也没关系,笔者的开发板也没有)
在这里插入图片描述

2、将开发板连接电脑

在这里插入图片描述
为了让开发板能够使用网络,网线另一头可以接路由器LAN口也可插在笔记本电脑的网线口,与笔记本电脑共享网络。笔记本电脑与开发板共享网络的设置如下:
右键单击任务栏的无线图标,单机打开"网络和Internet"设置,找到更改适配器选项,打开如下图界面右键WLAN,点击属性
在这里插入图片描述
找到开发板接入的网络,在属性中点击共享,勾选允许其他网络用户通过此计算机的Internet连接来连接,选择家庭网络连接选中开发板接入的以太网名称,这里为以太网,如此开发板就能共享计算机的网络。(注意:这个共享可能导致之后主机在使用有线网络时候出现问题,例如笔者在使用学校的有线网络时候需要取消掉这个共享才能跳转校园网账号登陆界面)
在这里插入图片描述
为了使得开发板和虚拟机之间可以进行通信,就要求开发板和虚拟机同处于一个网段。所以此时还要设置Ubuntu虚拟机的网络连接方式为桥接模式。在虚拟网络编辑器中需要桥接到有线网卡,不能设置为自动,否则会分配无线网卡,无法与开发板进行通信。
在这里插入图片描述
注意:虚拟机设置桥接模式时,电脑主机连接的无线网最好不要是需要账号验证的网络,例如笔者使用需要学号密码验证的校园无线网时,虚拟机无法通过桥接模式上网

3、打开 MobaXterm 串口终端上位机软件

在这里插入图片描述
新建一个会话,按照下图顺序修改相应内容:
(如果serial port没有找到接入的开发板,可以使用驱动精灵扫描一下安装所需的驱动
在这里插入图片描述
(该控制台的波特率需要设置为115200,如上图。)
会话建立后如果为黑屏可以敲一下回车就能显示登录界面:
输入账号、密码即可进入,一般默认的账号、密码都为:root
在这里插入图片描述
在命令行键入ifconfig查看开发板的IP地址,如下图所示:
在这里插入图片描述

五、通过Petalinux开发linux应用程序

1、在Petalinux工程下创建linux应用程序工程

在创建的petalinux工程目录下(如我的目录为:/opt/pkg/petalinux/ALIENTEK-ZYNQ)的终端输入以下命令:
petalinux-create -t apps -n linux-app --template c
-t表示创建的工程类型,“apps"表示创建的工程类型为用户应用
-n表示创建的工程名,这里工程名取为"linux-app”
--template表示创建的应用类型,“c"代表是c语言应用,若是c++应用则输入"c++”
运行结果如下:
在这里插入图片描述
工程创建后显示了c语言源代码所在文件夹:
(/opt/pkg/petalinux/ALIENTEK-ZYNQ/project-spec/meta-user/recipes-apps/linux-app/files)
在这里插入图片描述

2、编写源代码

进入c语言程序源代码所在文件夹:
/opt/pkg/petalinux/ALIENTEK-ZYNQ/project-spec/meta-user/recipes-apps/linux-app/files
编写linux-app.c所需的代码。

3、编译应用程序工程

在创建的petalinux工程目录下(/opt/pkg/petalinux/ALIENTEK-ZYNQ)输入以下命令:petalinux-build -c linux-app -x do_compile
-c后接工程名字
-x do_compile表示编译操作
结果如下:
在这里插入图片描述

4、将得到可执行文件发送给开发板

可执行文件的位置在文件夹:
/opt/pkg/petalinux/ALIENTEK-ZYNQ/build/tmp/work/cortexa9hf-neon-xilinx-linux-gnueabi/linux-app/1.0-r0
在当前目录下输入以下命令:
scp linux-app root@192.168.1.117:/home/root
注意:此命令基于ssh协议,要求开发板需要运行ssh服务。
回车后输入yes,然后输入开发板账号的密码
linux-app:表示发送的文件名
root:表示开发板用户名
192.168.1.117:表示开发板的ip地址
/home/root:表示开发板存放文件的路径
运行结果如下:
在这里插入图片描述

5、在开发板上运行应用程序

在MobaXterm命令行中输入ls命令即可看到多了一个"linux-app"的文件。
使用命令./linux-app即可运行程序。

(三)成果展示

说明:
开发板上运行的程序为使用TCP协议的socket通信的服务端,
Ubuntu系统上运行的程序为使用TCP协议的socket通信的客户端。
运行步骤:
在开发板上使用./linux-app运行程序,等待客户端发送数据,
在Ubuntu系统中使用./client运行程序,向服务端发送数据。

客户端显示结果如下表明成功发送数据:
在这里插入图片描述
服务端显示结果如下表明成功接收客户端数据:
在这里插入图片描述
注意:要使得开发板和虚拟机之间能够通信需要使得开发板和虚拟机处在统一网段,通俗点讲就是IP地址的前三段需要相同,因此如果虚拟机设置的网络适配器为NAT模式(NAT模式应该是映射了一个新的网段)将导致与开发板无法通信,需要将网络适配器设置为桥接模式(最好固定IP,手动设置虚拟机的IP,DNS,子网掩码。这有助于以后做实验电脑主机和开发板进行通信。因为只有固定了虚拟机的IP,才能设置开发板的IP保证两者在同一网段内,然后虚拟机设为桥接模式,板子和虚拟机就可以通信了。)
具体设置可以参考:https://blog.csdn.net/wuzhiwuweisun/article/details/79815160

以上程序为使用c语言编写的使用TCP协议实现socket通信的server程序和client程序,具体socket通信的程序笔者将于之后完成文章撰写后发布,如果有需要可以先私信我索要。


作者水平有限,也是通过学习掌握的以上内容,参考资料为正点原子资料,具体网址为:www.yuanzige.com的《领航者 ZYNQ 之嵌入式 Linux 开发指南》,如有错误欢迎批评指正。

  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更换 PetaLinuxzynqmp.dtsi 文件需要以下步骤: 1. 编辑新的 zynqmp.dtsi 文件。可以在 PetaLinux 工程目录下执行以下命令来获取原始的 zynqmp.dtsi 文件: ``` petalinux-config -c kernel ``` 在 kernel 配置菜单中选择 Device Tree ,然后选择 View DTS Source File 选项。将生成的文件保存到本地。 2. 将编辑好的 zynqmp.dtsi 文件复制到 PetaLinux 工程目录下,例如 $PETALINUX_PROJECT_DIR/project-spec/meta-user/recipes-bsp/device-tree/files/。 3. 更新 PetaLinux 工程的配置,以包含新的 zynqmp.dtsi 文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-config ``` 在 PetaLinux 配置菜单中选择 Device Tree ,然后选择 User Overlays 选项。将新的 zynqmp.dtsi 文件添加到用户重叠列表中。 4. 重新生成 PetaLinux 工程的设备树文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-build -c device-tree ``` 5. 重新生成 PetaLinux 工程的镜像文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-build ``` 或者只重新生成镜像文件而不重新构建整个工程: ``` petalinux-package --boot --fsbl image/linux/zynqmp_fsbl.elf --fpga images/linux/your_fpga.bit --u-boot --force ``` 其中,your_fpga.bit 替换为您实际使用FPGA 位流文件名。 6. 在目标设备上刷写新生成的 PetaLinux 镜像文件。 如果一切顺利,您的 PetaLinux 工程现在应该已经使用了新的 zynqmp.dtsi 文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值