ZYNQ三种基础开发方式

一、FPGA开发

这一部分就是使用zynq的PL部分,把它当做一个普通的FPGA,使用vivado编写verilog进行开发。

二、嵌入式(SDK)开发

1、zynq上面不仅有fpga,还集成了arm的A9核,所以可以进行嵌入式开发。

2、fpga对应PL部分,arm对应PS部分,这两部分之间可以通过AXI接口进行通信,这就把整个系统连接了起来。

3、我们在vivado中进行block design的时候,也即搭建自己的soc的时候,会首先添加一个PS的IP,这个IP可以理解为就是我们的arm A9核。然后我们还需要往这个cpu核上添加各种外设来组成具有不同结构不同功能的soc,最后创建出自己所需要的处理器系统。

4、上面也说了,我们需要往上挂不同的外设来组成不同结构和功能的soc,那么在进行嵌入式编程之前就需要我们先进行硬件设计,也即往A9核上面连接各种外设,比如uart,gpio,spi,i2c,ddr控制器,sd卡连接器等各种接口。如果资源不够,我们还可以通过上述的通信接口访问PL部分的资源。

5、硬件设计完成之后,我们就可以导出硬件供SDK使用。这个硬件其实就是我们搭建的soc,导出的硬件描述文件hdf就包含了该soc的配置信息。

6、搭建好硬件平台之后,我们就可以基于该硬件平台,在SDK上编写C/C++代码来进行嵌入式开发。那么我们进行嵌入式开发的时候,是怎么和上面搭建的soc硬件平台联系到一块的呢?我个人理解是在SDK中编程时,为了使编写好的代码可以运行在soc上面,它会基于由硬件平台生成的BSP,也即板级支持包。这个BSP对应我们上面设计的硬件平台,里面有运行嵌入式系统所需的引导程序、各种外设的驱动程序以及根文件系统和各种工具链等等。

三、嵌入式linux开发

1、在移植linux系统到zynq上的时候,我们也需要先构建自己的soc,可以认为没有soc就没有运行系统的平台。

2、hdf文件会在使用petalinux定制linux系统的时候被调用,用来完成系统中的一部分默认配置,例如各种外设的配置。

3、前面也提到我们需要给A9核添加各种外设,这样我们的soc中才有这些东西,在定制的linux系统中才会有这些外设对应的配置,我们才可以在定制的linux系统中编写这些外设的驱动程序,最后有了驱动程序我们就可以使用C/C++编写各种linux应用程序去调用这些驱动程序以完成对这些外设的操作。


附:关于linux系统移植

以下内容摘自正点原子的《领航者ZYNQ之嵌入式Linux开发指南》

使用Petalinux 对开发 Linux的非常方便,通过几个简单的命令就完成了 Linux 系统的搭建,极大的提升了 Linux 开发的效率,是开发 linux 系统的利器,然而就像硬币的两面一样,有利的一面当然也存在着不利的一面。

Petalinux 封装了细节,只提供了配置接口,对开发者是友好的,但对学习者就未必了。就像我们使用 Petalinux 搭建完 Linux 系统后,在领航者开发板上成功运行,但对 U-boot、linux 内核、根文件系统一无所知。

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

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 是第一阶段引导程序。

2、linux内核移植

当我们使用 Petalinux 工具的时候是不需要手动配置内核的,因为 Petalinux 工具可以根据硬件描述文件 hdf 使能相应配置

但是如果我们考虑一般情况下(不使用 Petalinux)的内核移植过程,我们就需要自己手动去配置内核,最后将半导体厂商提供的 Linux BSP 包移植到我们自己的平台上。

这个过程主要包括linux内核编译(获取镜像文件zImage和设备树文件dtb)、添加自己的开发板(添加默认配置文件和设备树文件)。 其中设备树文件很重要,不同的开发板因为外设不同,就需要添加属于自己的设备树。

3、根文件系统构建

根文件系统一般也叫做 rootfs,那么什么叫根文件系统?看到“文件系统”这四个字,很多人,包括我第一反应就是 FATFS、FAT、EXT4、YAFFS 和 NTFS 等这样的文件系统。在这里,根文件系统并不是 FATFS、EXT4 这样的文件系统,这些文件系统属于 Linux 内核的一部分。Linux 中的根文件系统更像是一个文件夹或者叫做目录(在我看来就是一个文件夹,只不过是特殊的文件夹),在这个目录里面会有很多的子目录。根目录下和子目录中会有很多的文件,这些文件是 Linux 运行所必须的,比如库、常用的软件和命令、设备文件、配置文件等等。以后我们说到文件系统,如果不特别指明,统一表示根文件系统。

根文件系统首先是内核启动时所 mount(挂载)的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

百度百科上说内核代码镜像文件保存在根文件系统中,但是我们嵌入式 Linux 并没有将内核代码镜像保存在根文件系统中,而是保存到了其他地方。比如 NAND Flash 的指定存储地址、EMMC 专用分区中。根文件系统是 Linux 内核启动以后挂载(mount)的第一个文件系统,然后从根文件系统中读取初始化脚本,比如 rcS,inittab 等。根文件系统和 Linux 内核是分开的,单独的 Linux 内核是没法正常工作的,必须要搭配根文件系统。如果不提供根文件系统,Linux 内核在启动的时候就会提示内核崩溃(Kernel panic)的提示。

根文件系统的这个“根”字就说明了这个文件系统的重要性,它是其他文件系统的根,没有这个“根”,其他的文件系统或者软件就别想工作。比如我们常用的 ls、mv、ifconfig等命令其实就是一个个小软件,只是这些软件没有图形界面,而且需要输入命令来运行。

  • 14
    点赞
  • 114
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
ZYNQ的ARM开发语言主要是Python和C语言。PYNQ希望借助Python语言的易用性、扩展库的多样性和社区的活跃贡献度来降低ZYNQ嵌入式系统的开发门槛,因此在PYNQ中可以使用Python进行开发。而对于SDK端主要进行UDP协议的实现时,通常会使用C语言进行开发。此外,在ZYNQ的PL部分,也可以将其视为普通的FPGA,并使用Vivado编写Verilog进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [PYNQ 基于Zynq架构添加了对python的支持](https://download.csdn.net/download/weixin_38625351/14812529)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ZYNQ三种基础开发方式](https://blog.csdn.net/qq_39507748/article/details/113913821)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [基于ZYNQ-7000的AI加速器设计之PS端(ARM)网络编程(TCP协议)](https://blog.csdn.net/m0_67403188/article/details/124115009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

耐心的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值