0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于zynq7000的linux系统搭建设计

电子设计 来源:AI加速微信公众号 作者:AI加速微信公众号 2020-11-30 11:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Zynq器件将armFPGA结合,利用了两者各自的优势,arm可以实现灵活的控制,而FPGA部分可以实现算法加速,这大大扩展了zynq的应用。比如深度学习加速,图像处理等等。PL侧表示FPGA的逻辑部分,PS侧为arm端以及一些AXI接口控制部分,二者实际上通过AXI接口实现通信和互联。PS可以通过AXI来对PL逻辑部分进行配置和控制,PL侧通过AXI和PS进行数据交互。本章基于zynq7020器件来搭建Linux系统,描述搭建Linux系统过程中PL侧的配置以及对u-boot,kenel,桌面系统的配置和编辑。

1. vivado工程创建

本文使用的是黑金的zynq7020开发板。搭建一个最基本的linux系统需要以下基本配置:

1)arm核的添加和配置。

打开vivado,新建工程。然后创建block,添加zynq processing system。图中iic是后边在开发IIC驱动时添加的,最基本的linux系统可以不适用IIC。

图1.1 添加zynq系统

2) bankIO电压设置。

根据原理图设置bank IO的电压。如图1.2所示。SD卡配置。

Linux系统安装在SD卡中,所以需要完成SD卡配置,根据原理图选择SD卡的使用引脚。

图1.2 IO电压和SD卡配置

3) UART口配置。

需要用到串口进行调试,所以配置串口MIO引脚。

图1.3 串口引脚配置

4) DDR配置。

内存是必须的。这里面已经有内存型号供你选择,不需要在对DDR参数做配置,只选择MT41J256M16RE-125就行了。

图1.4 DDR配置

这样就完成了一个Linux系统启动需要的最基本配置。接下来对工程进行综合和实现,生成bit,并在file菜单项中选择export/export hardware,选择include bitstream,点积OK就生成了linux系统需要的硬件工程。

接下来还需要生成启动u-boot的fsbl。这里简单说一下linux系统启动的基本过程:

FSBL(完成IO电压,SD卡,UART等硬件的检测和基本配置,然后启动u-boot。)->U-boot(这个主要完成arm硬件的一些更进一步检测和配置,然后去启动kernel)->kernel(这个是linux系统需要的所有驱动)->文件系统。

我们launch SDK,打开SDK生成fsbl和需要的设备树。

New->application project->zynq FSBL,然后进行编译,就生成了fsbl.elf文件。如果我们也已经生成了u-boot文件,就可以用SDK来制作boot.bin。我们可以选择fsbl的工程,右键create boot image,然后选择u-boot的路径,partition type选择dtafile。然后create image就会生成boot.bin了。我们在fsbl工程目录中的bootimage文件夹下看到boot.bin。

图1.5 选择u-boot路径

生成devicetree需要zynq的基本divecetree文件,可以在git上下载:https://github.com/Xilinx/device-tree-xlnx。下载的设备树文件添加到SDK中的repositories中:

图1.6 添加设备树文件来生成设备树

然后new->board support package project->device_tree,这样就生成了设备树源文件。源文件有以下几个:

Zynq-7000.dtsi,这个是zynq-7000的默认硬件配置,通常不需要修改。

pcw.dtsi,这个文件是针对自己的硬件平台进行进一步配置的。比如在zynq-7000中sdhci都是不使能的,在pcw.dtsi中就需要进行使能,并配置sdhci0的statue为okay。

System-top.dtsi,其配置一些别名,并配置chosen,这个主要是选择在启动硬件的时候如何和操作系统进行通信,比如stdout-path选择boot输出介质,一般都是串口输出。

用这三个文件就可以了。

图1.7 设备树源文件生成

以上就完成了linux系统启动的硬件工程搭建,设备树产生,以及fsbl产生。

2. u-boot编译

下载u-boot源码:https://github.com/Xilinx/u-boot-xlnx。

主要配置u-boot中的./configs/*_defconfig文件,这个主要是对arm端硬件进行配置。这里我们就使用zynq_zc702_defconfig,当然这里可以修改默认设备树文件和board_name. 比如将defconfig文件命名为board_name_defconfig,相应有文件./include/configs/board_name.h来描述板卡信息。

然后在./include/configs中复制一份zynq_zc70x.h为你想要的板级名称。这个时候我们需要修改zynq_common.h中的配置。由于我们的文件系统在SD卡的第二分区,所以需要修改宏定义:CONFIG_EXTRA_ENV_SETTINGS,去除了ramdisk的启动。

然后建立uEnv.txt,在其中设置环境变量。如图2.3所示。指定了文件系统所在位置为SD卡分区2。文件系统格式为ext3。

图2.1 defconfig文件,红框可以修改成为你的板卡的名字和设备树名字


图2.2 sdboot变量修改前和修改后

图2.3 uEnv.txt中设置

接下来就是编译u-boot了。需要用到交叉编译工具arm-xilinx-linux-gnueabi。目前的vivado工具中已经没有这个交叉编译工具了,可以到网上下载这个工具链。然后export PATH=$PATH: dir/bin。可以在Makefile中设置默认的编译工具:

图2.4 Makefile中设置编译工具

然后make board_name_defconfig进行配置,最后make就可以编译出u-boot了。根目录下的u-boot.elf正是我们需要的文件,用于合成boot.bin。在1节中已经介绍了。

3. 编译kernel

Kernel可以到git上下载,kernel包含所有的驱动,如果进行驱动修改的话,可以在其中进行配置。比如筛选某些驱动。通常开发新的驱动,并不需要在其中进行修改。因为驱动可以通过命令行在系统启动后动态加载。所以只仅仅对驱动编译就行了,在Makefile中添加编译工具,这个核u-boot一样。然后make uImage LOADADDR=0x00008000就可以了。编译完成后再arch/arm/boot中产生uImage,这个是我们要用到的内核文件。

设备树文件的编译也很简单,就是通过设备树编译工具dtc将dtsi文件编为dtc文件就行了,这里注意dtc文件名称要和在u-boot中zynq-common.h中的设备树文件名称一样。通常都为devicetree。编译命令为:

dtc –I dtx –O dtb –o devicetree.dtb your.dts

文件系统可以使用linaro Ubuntu文件系统,从网上下载,解压。这个时候需要对SD卡进行分区,1区为fat格式,有200M就够了,存放boot.bin,uImage,devicetree.dtb,uEnv.txt文件。第二区用ext3格式,存放linaro Ubuntu文件系统。

4. linux系统启动过程

图4.1 fsbl启动

图4.2 fsbl完成

图4.3 u-boot启动:读取env,uImage和设备树

图4.4 启动kernel

图4.5 文件系统的启动

总结

本篇在zynq7000的基础上,制作一个最基本的linux系统。整个流程包括工程创建,fsbl和设备树生成,u-boot的配置和编译,kernel编译以及文件系统制作。

linux系统

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217950
  • Zynq
    +关注

    关注

    10

    文章

    625

    浏览量

    49236
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于AXI DMA IP核的DDR数据存储与PS端读取

    添加Zynq Processing System IP核,配置DDR控制器和时钟。7000系列的Zynq可以参考正点原子DMA回环测试设置。
    的头像 发表于 11-24 09:25 2628次阅读
    基于AXI DMA IP核的DDR数据存储与PS端读取

    ZYNQ PS与PL数据交互方式

    ZYNQ SoC 的 PS (Processing System) 和 PL (Programmable Logic) 之间的数据交互是系统设计的核心。
    的头像 发表于 10-15 10:33 529次阅读
    <b class='flag-5'>ZYNQ</b> PS与PL数据交互方式

    RTthread怎么加载zynq的支持包?

    RTthread有xilinx zynq的芯片支持包了么,SDK管理器里面怎么下载ZYNQ的支持包呢?求助
    发表于 09-23 06:05

    Zynq7100 BSP移植,MSH终端不能正确显示是为什么?

    由于新版本的RT Thread的BSP不再提供Zynq7000的支持。所以同事从RT Thread(4.0.3)中的Zynq7000移植了一份Zynq 7100的BSP。但是MSH终端和串口输出
    发表于 09-19 06:26

    fpga开发板 璞致ZYNQ 7000 系列之 PZ7035/PZ7045/PZ7100-FH 核心板与开发板用户手册

    本文介绍了Xilinx Zynq-7000系列可扩展处理平台及其开发板应用。Zynq-7000采用双核ARM Cortex-A9处理器与28nm FPGA架构,支持高性能嵌入式开发。开发板采用核心板
    的头像 发表于 09-15 15:54 5853次阅读
    fpga开发板 璞致<b class='flag-5'>ZYNQ</b> <b class='flag-5'>7000</b> 系列之 PZ7035/PZ7045/PZ7100-FH 核心板与开发板用户手册

    开发环境一键部署 | 如何搭建Docker环境编译ARM程序?

    智能化科技领域,嵌入式系统开发占据着极为重要的地位。瑞迅科技RK3568、RK3588主板及核心板以其卓越的性能,为众多应用场景赋能。基于Linux系统搭建其开发环境,为用户开启高效开
    的头像 发表于 08-15 11:06 691次阅读
    开发环境一键部署 | 如何<b class='flag-5'>搭建</b>Docker环境编译ARM程序?

    正点原子Z15I ZYNQ 开发板资料发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

    USB2.0 Host接口和RGB LCD接口等外设。开发板提供了丰富的开发文档和软件资源,涉及FPGA开发、Vitis开发、Linux系统开发和PCle开发! 一、资料下载 正点原子Z15I
    发表于 05-30 16:59

    正点原子Z20 ZYNQ 开发板发布!板载FMC LPC、LVDS LCD和WIFI&amp;蓝牙等接口,资料丰富!

    接口等外设。开发板提供了丰富的开发文档和软件资源,涉及FPGA开发、Vitis开发、Linux系统开发和Qt开发! 一、资料下载 正点原子Z20 ZYNQ开发板/核心板:http
    发表于 05-30 16:55

    不借助Linux系统,在Windows下如何搭建ZMC900E交叉编译环境

    不需要依赖笨重的虚拟机,也不需要安装双系统。抛开繁琐的环境准备,在Windows上轻松搭建交叉编译环境。本文将介绍如何在Windows上搭建交叉编译环境,不借助Linux
    的头像 发表于 05-21 11:34 648次阅读
    不借助<b class='flag-5'>Linux</b><b class='flag-5'>系统</b>,在Windows下如何<b class='flag-5'>搭建</b>ZMC900E交叉编译环境

    Zynq7000处理器的配置详解

    添加好ZYNQ7 Processing System IP核后,需要对其进行配置,双击弹出如下窗口。绿色部分表示ZYNQ PS部分中可配置的项目,可以双击转向相应的设置界面,也可以直接在左边的导航列表中选择。
    的头像 发表于 03-27 09:37 2249次阅读
    <b class='flag-5'>Zynq7000</b>处理器的配置详解

    从零开始驯服Linux(一):ZYNQ-Linux启动文件构建全解析

    源码需要在linux系统(虚拟机)中安装相应的交叉编译工具链。安装ZYNQ-7000系列芯片的交叉编译工具链需要sdk.sh文件。把开发板资料盘B盘:\sdk\202002\sdk.sh拷贝到
    发表于 03-20 16:48

    zynq通过什么接口去控制DLP?

    我是用ZYNQ控制DLP,DLP的投影,给sensor采集。我的问题是zynq通过什么接口去控制DLP。DLP和sensor没有物理连接,sensor会直接拍DLP的投影
    发表于 02-21 06:56

    迅为RK3588开发板实时系统编译-Preemption系统/ Xenomai系统编译-获取Linux源码包

    3.1 Preemption 系统/ Xenomai 系统编译 3.1.1 获取 Linux 源码包 编译环境说明: 本手册使用的是迅为提供的编译环境 ubuntu20.04,在网盘资料
    发表于 01-09 11:03

    如何通过PMC_GPIO唤醒AMD Versal™ Adaptive SoC Linux系统

    ://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842232/Zynq+UltraScale+MPSoC+Power+Management+-+Linux+Kernel 我们这里采用 VPK120 板卡作为平台,这个板卡上面没有通过 PMC MIO 连接 GPI
    的头像 发表于 12-17 10:07 1256次阅读
    如何通过PMC_GPIO唤醒AMD Versal™ Adaptive SoC <b class='flag-5'>Linux</b><b class='flag-5'>系统</b>

    基于Xilinx ZYNQ7000 FPGA嵌入式开发实战指南

    电子发烧友网站提供《基于Xilinx ZYNQ7000 FPGA嵌入式开发实战指南.pdf》资料免费下载
    发表于 12-10 15:31 39次下载