首页 > 编程知识 正文

zynq开发软件,zynq是什么

时间:2023-05-03 07:11:10 阅读:45382 作者:3730

另一方面,FPGA开发这一部分使用zynq的PL部分,将其作为普通的FPGA,使用vivado写verilog进行开发。

二、嵌入式(SDK )开发1、zynq上不仅集成了fpga,还集成了arm的A9内核,可以实现嵌入式开发。

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

3、我们在vivado上进行区块设计,即构建自己的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编程时,它基于在硬件平台上生成的BSP (板级支持包),以便编写的代码可以在soc上运行。这个BSP对应我们上面设计的硬件平台,里面有运行嵌入式系统所需的引导程序、各种外设的驱动程序以及根文件系统和各种工具链等等。

三、嵌入式linux开发1、将linux系统移植到zynq时,我们也需要先构建自己的soc,没有soc就没有运行系统的平台。

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

3、如前所述,我们需要在A9内核中添加各种外围设备。 那样的话,我们的soc里就有这些东西了。 定制的linux系统中有这些外围设备的配置。 我们可以在定制的linux系统上写这些外围设备的驱动程序。 最后,有了驱动程序,您可以使用I/O创建各种Linux APP应用程序来完成这些外围设备的操作。

附件:关于linux系统移植以下内容摘自正点原子《领航者ZYNQ之嵌入式Linux开发指南》

使用Petalinux对Linux的开发非常方便,用一些简单的指令完成Linux系统的构建,大大提高了Linux开发的效率,是开发Linux系统的利器,但像硬币的两个方面,当然不利于有利的一面

Petalinux封装细节,仅提供配置接口,对开发人员很友好,但对学习人员来说并非总是如此。 正如我们使用Petalinux构建Linux系统后在导航开发板上取得的成功一样,我们对U-boot、linux 内核、根文件系统一无所知。

一般来说,构建Linux系统时需要移植Linux。 在移植Linux之前,必须移植用于启动Linux内核的bootloader代码。 引导加载器有很多东西,常用的是U-Boot。 移植U-Boot后,移植Linux内核。 移植Linux内核后,Linux仍无法正常启动。 需要移植根文件系统(rootfs )。 根文件系统包含最常用的命令和文件。所以 U-Boot、Linux kernel 和rootfs 这三者一起构成了一个完整的 Linux 系统,一个可以正常使用、功能完善的 Linux 系统

1、u盘介绍

对于计算机系统,从打开电源到启动操作系统,都需要引导过程。 此引导过程由引导程序指定。 引导程序是打开系统电源并开始运行的第一个软件代码。 在PC体系结构中,引导程序由主板上的BlOS和硬盘MBR上的引导代码组成。 系统通电后,首先运行BlOS,在硬件发现和资源分配完成后,将硬盘MBR引导程序加载到系统的RAM中,并将控制权交给引导程序。 引导程序的主要执行任务是将内核映像从硬盘读取到RAM中,然后跳转到内核的入口点并执行,从而开始启动操作系统。 嵌入式Linux系统也离不开引导装载器。 此引导装载器通常称为引导装载器。

Bootloader是一个在操作系统运行之前运行的小程序。 使用此applet,您可以初始化硬件设备,创建内存空间映射表,以创建适当的系统硬件和软件环境,并准备最终调用操作系统内核。 也就是说,在芯片通电后运行引导加载程序。 此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等命令其实就是一个个小软件,只是这些软件没有图形界面,而且需要输入命令来运行。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。