ZYNQ 7030 Linux系统移植

手上有一块 ZYNQ-7030的演示板,是仿照Xilinx Zedboard设计的,但是与Zedboard又有所不同,因此花时间移植一下Linux系统。记录下这个过程,希望能够帮助到有类似需要的朋友。自己动手移植Zedboard Linux系统的过程和这个类似。

(0)准备SD卡

首先应当准备一张SD卡(8G即可),并利用分区工具分成两个区。

Linux上比较好用的分区工具是GParted.

至于Windows的话,可以使用Partition Manager.

第一个区大小为1G,FAT32格式,卷标为BOOT,存放引导文件Boot.bin和linux内核镜像uImage。实际上这个分区用到的大小是很小的,只有10M左右的样子。但是考虑到以后我们可以在这里备份一些源码的压缩包,所以设定为1G。

第二个区利用剩余的空间,划分为EXT3/EXT4格式,卷标为rootfs,用来存放根放文件系统。

玩过linux的同学可能都知道BootLoader,例如U-BOOT就是一种经常用到的BootLoader,那么BOOT.BIN是什么呢?其实BOOT.BIN是包含UBOOT的一种BootLoader。

ZYNQ芯片和其他纯ARM芯片有所差异,是ARM+FPGA的结构,所以上电后除了在ARM(称为PS端,Processing System,处理器系统)引导操作系统之外,还要做FPGA(称为PL端,Programmable Logic)的一些操作。

Boot.bin的构成如下:

FSBL(第一阶段启动代码,用来完成全局初始化和硬件配置)

[system.bit](可选,用来配置PL端,若不添加此项,可启动后由软件配置)

u-boot(用来初始化ARM端,引导linux操作系统)

(1)硬件位流(BitStream)生成

硬件位流决定了总体的系统结构。虽然说位流文件主要是用来配置PL端的,实际上和PS端关系也十分密切,FSBL的生成依赖于具体的硬件(主要是依赖于hdf文件(Hardware Definination File)),所以这里首先要生成硬件位流。

新建一个Vivado工程,选择合适的器件(我这里是xc7z030fbg484-3),然后建立原理图文件。把zynq添加进来。

点击Run Block Automation,自动连接DDR和FIXED_IO。把FCLK_CLK0连接到M_AXI_GPO_ACLK上。

在原理图上Creat HDL Wrapper,综合,生成位流文件。这样就完成了zynq的“最小系统”设计,并生成了比特流。

然后将我们的硬件设计(虽然我们没加什么硬件模块进来)导出到SDK。方便起见,直接选择File->Export->Export Harware。SDK工程直接和Vivado共享一个工程根路径。

选择OK。

(2)第一阶段启动代码BootLoader(FSBL)生成

不要关闭刚才的Vivado工程。选择File->Lauch SDK。OK。基于Eclipse的SDK就启动了。可以看到硬件配置信息都导入进来了。

新建一个应用工程,工程名字叫zc703_fsbl,类型选择StandAlone,选择下一步。

在工程模板中选择fsbl工程。

为了方便调试,可以查看fsbl阶段的打印结果。可以通过查看fsbl阶段打印输出,结合JTAG调试排查问题所在。

具体做法是在fsbl_debug.h文件中增加宏定义

#define FSBL_DEBUG_INFO

然后生成zc703_fsbl.elf.

(3)U-boot生成

从xilinx 官方下载uboot源码。

https://github.com/Xilinx/u-boot-xlnx

在linux系统里面解压。

当然Linux系统里面要提前配置好arm-xilinx-linux-gnueabi- 交叉编译环境。

解压好之后,进入uboot-xlnx-master目录,

修改一下Makefile.为了方便起见,直接修改ARCH和CROSS_COMPILE的设置。在250行左右,修改成下图:

保存。

然后拷贝一份zc702的配置文件。

在configs目录下,cp zynq_zc702_defconfig zynq_zc703_defconfig,然后把702相关的内容改成703。

可以通过make menuconfig配置一下选项,也可以不修改。试你的硬件而定。

这时候默认生成的uboot默认使用的是ramdisk作为文件系统。我们使用sd卡上的文件系统,所以还需修改一下 include/configs/zynq-common.h

我是通过sd卡启动的,所以把sd卡启动处的ramdisk代码删掉了一行,并且修改了bootm命令执行的内容。

然后拷贝到windows系统中来。

还要修改一下设备树(zynq_zc702.dts)里面的启动配置,默认是没有的,需要自己添加:

bootargs = "console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0";

具体的rootfstype根据你格式化的格式来。不过选ext4是可以兼容ext3的。

make

等待大概2分钟,就可以生成uboot了。

修改u-boot的文件名为u-boot.elf

mv u-boot u-boot.elf

同时把dts目录下生成的dt.dtb拷贝到windows系统中,改名为devicetree.dtb

可能有一部分开发人员想要限制PS端使用的内存大小,以往的修改方式是修改zynq_xxxx.h头文件里面的一个宏定义(CONFIG_SYS_SDRAM_SIZE),并且修改设备树的memory分支。在新版本的u-boot里面,把这个宏定义删掉了,所以直接修改设备树即可,但必须在编译u-boot的时候修改,否则单独编译设备树是不会起到实质性的作用的。按照我的理解,应该是u-boot编译的时候参照设备树的一些定义生成了一些配置,具体机制尚不明了,还希望有大牛能够多多指教~

(4)生成引导文件Boot.bin

在SDK中,选择Xilinx Tools->Create Boot Image,依次将生成的zc703_fsbl.elf、zc703_test.bit(可选)和u-boot.elf添加进来。即可生成BOOT.BIN文件。

(5)Linux内核定制

从xilinx Git下载内核源码,运用与u-boot类似的方法,即可编译内核。解释一下为什么这里选zc702,这是由于zc703与zc702的ARM核心是相同的,而且不像zedboard在板上集成了那么多外设。具体的配置可以根据你自己的硬件来。

注意生成uImage时,命令为:

Make uImage LOADADDR = 0x8000

这个loadaddr可以根据需要进行修改。

将Boot.bin、devicetree.dtb、uImage拷贝到sd卡的boot分区。

(6)解压根文件系统

在linux系统下,将其解压到rootfs分区。

解压命令:

tar -xvf --strip-components=1 liaro-[tab] /media/rootfs

即可。

但是要做一个软链接,否则执行可执行文件会出现如下错误(No such file or directory):

执行如下命令,即可:

ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3

(7)测试

将SD卡插入板卡,连接好串口,打开串口终端,即可看到启动信息:

FSBL启动信息:

Uboot启动信息:

linux启动过程:

剩下的时间,尽情享受开发的乐趣吧~~

zynq linux环境移植,ZYNQ 7030 Linux 系统移植相关推荐

  1. Linux环境变量:不可或缺的系统组成部分

    目录标题 引言(Introduction) Linux环境变量的概念(Concept of Linux Environment Variables) 环境变量的作用与重要性(Roles and Imp ...

  2. QT在linux环境下读取和设置系统时间

    QT在linux环境下读取和设置系统时间 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:Fedora12 开发软件:QT 读取系统时间 ...

  3. 林世霖. linux环境编程图文指南,linux环境编程图文指南

    linux环境编程图文指南是一本linux编程环境配置指南,由林世霖.钟锦辉和李建辉三人共同编著.本书定位Linux环境编程入门与提高,全书拥有近400余幅案例图表,200多篇源代码,作者很多编程初入 ...

  4. Linux环境高级编程函数,Linux环境高级编程--出错处理(CLStatus)

    很多程序库对外提供若干类,每个方法出错时如何告知调用者是否出错,以及出错码(在Linux上在error.h中的全局errno就是保存我们Linux程序执行的出错码的)?方法很多,为了简化起见,函数将返 ...

  5. linux 环境变量详解,Linux 环境变量详解及实例

    Linux环境变量 ~/.bash_profile && ~/.bashrc 用户登陆Linux操作系统的时候,"/etc/profile", "~/.b ...

  6. linux环境下添加定时任务,linux下添加定时任务。

    这周要做一个定时增量更新Elasticsearch索引的功能,以前没有做过定时更新,所以请教了下同事,使用crontab添加linux下的定时任务. 一.linux下定时执行任务的方法 在linux中 ...

  7. linux环境下查看进程,Linux下查看进程(程序)启动时的环境变量

    背景: 因最近试安装Linux下的jira,有一个中文插件安装后,一旦设置开机启动后,它是英文,而在终端再重新启动一次后呢,似乎插件生效,它又恢复为正常中文界面,我首先想这这涉及到一个环境变量的问题, ...

  8. linux环境搭建实践总结,linux实习心得体会

    linux实习心得体会 linux实习心得体会1 学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者 ...

  9. linux环境编程从应用,linux环境编程:从应用到内核

    <UNIX环境高级编程>(简称APUE)几乎是Linux领域程序员人手必备的一本书.但在掌握和理解APUE的内容后,又该如何继续提高自己的技能,如何更深入地理解Linux环境编程及其背后的 ...

  10. linux环境变量设置方法,Linux环境变量设置指南

    以配置java环境变量为例 [编辑]修改/etc/profile文件 此法对所有用户生效 在文件末尾加入以下内容: JAVA_HOME=/usr/share/jdk1.5.0_05 PATH=$JAV ...

最新文章

  1. 差点被人类消灭的疾病,科学家说是苏联让它重新肆虐全球?
  2. mysql及mybatis知识点_MyBatis知识点详解
  3. Jenkins中切换devtoolset
  4. 二倍图三倍图什么意思_香港读研,图什么?
  5. System.Web.HttpException: 无法验证数据解决办法
  6. 应用统计学比上比不上计算机,计算机技术在医学统计学教学中应用的思考
  7. c++学习————VC报错解决方案(vc2013)
  8. 关于利用DEM生成水系图
  9. flash动画转html5 效果,一键把SWF转HTML5 canvas动画的工具-Fanvas
  10. Linux下进行微信小程序开发
  11. 华硕的主板装的服务器系统改win7,华硕主板win10改win7系统怎么操作
  12. 生成二维码并将Bitmap保存成图片
  13. java判断图片相同_java 识别图片相似度及图片是否相同
  14. Spring Boot修改启动神图
  15. shell脚本的坑坑洼洼
  16. 重新启动网卡时出错: failed because the control process exited with error code.
  17. k8s之pod资源管理
  18. 如何在局域网服务器部署网站,局域网如何对服务器配置
  19. 几款市面上的网管软件比较
  20. 从人工智能到人工心灵

热门文章

  1. html5div随窗口大小,css怎么设置div随着窗口大小变换
  2. HTTP/2 协议详解
  3. 前端复习之DOM、BOM
  4. Terracotta学习文档
  5. 关于vs新建项目时只有空白项
  6. C#数据库图书管理系统
  7. 利用Ajax访问后台数据
  8. 网络工程——HCNA网络技术的简单配置
  9. 零基础自学Java路线总结,有效利用网络各机构课程资源
  10. Java中的boolean类型