Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程

一:前言

最近手上压了一块米联客的Miz7035,一块xilinx zynq-7000系列的开发板,想着正好学习一下linux在ARM9上的移植,网上基本都是ZC702、zed的教程,这对于买了非标准板的人来说就不太友好,很多文件都不知道是怎么生成的。本着学习加分享的心态,把这两天移植linux的过程写下来,尽可能详细。驱动和系统移植不是我的专长,很多地方我也是知其然不知其所以然,写得不对的地方欢迎指正。

二:前期准备 

1、一台安装好linux系统的主机,我安装的是centos7.2.

2、一块zynq-7000系列的FPGA开发板,我手上的是米联客miz7035,其他zynq系列一样通用。

3、vivado开发环境,我安装的2018.2版本

4、u-boot,device-tree,kernel下载。地址分别是:https://github.com/Xilinx/u-boot-xlnx (u-boot)、https://github.com/Xilinx/linux-xlnx(kernel)、https://github.com/Xilinx/device-tree-xlnx(device-tree)。

5、根文件系统,这里我裂墙推荐Debian,Debian这个Linux系统,底层非常稳定,内核和内存的占用都非常小,下载地址:https://pan.baidu.com/s/1eHmjGd-dTtgnITjG2D3CYA

三:操作步骤

1.设置交叉编译环境

因为最终运行在arm9上,所以uboot、内核,文件系统编译都需要用arm-linux交叉编译工具,zynq2000使用的是arm-linux-gnueabihf,交叉编译工具可以从网上单独下载,也可直接使用vivado自带的交叉编译工具。使用方法也很简单

source /opt/Xilinx/SDK/2018.2/settings64.sh

或者

gedit /opt/Xilinx/SDK/2018.2/.settings64-SDK_Core_Tools.sh

将该文件中的内容全部复制到bashrc,更新环境变量,这样在新的终端中打开,环境变量也不会消失。

2.u-boot编译

进入u-boot文件夹,

make distclean  //清除配置文件和编译中间结果
make CROSS_COMPILE=arm-linux-gnueabihf- zynq_mz7x_defconfig //重新配置,生成makefile,具体板子不一样,在U-Boot/configs文件夹下
make CROSS_COMPILE=arm-linux-gnueabihf- tools  //编译开发所需要的工具
make CROSS_COMPILE=arm-linux-gnueabihf-  //编译,完成后生成一个elf文件u-boot,uboot.bin,u-boot.srec等文件

最后把编译生成的u-boot后缀改成.elf,连同u-boot.img和spl/boot.bin,一共三个文件拷贝出来。

3.kernel内核编译

export PATH=${YOUR_UBOOT_DIR}/tools:$PATH  //编译内核如果要生成uImage,则需要用到mkimage工具,该工具在u-boot/tools下有提供

make distclean //清除配置文件和编译中间结果
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_mz7x_defconfig  //重新配置,生成makefile
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- prepare scripts  //编译开发所需要的工具
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x8000 uImage  //编译内核,且生成uImage

最后把{KERNEL_DIR}/arch/arm/boot/zImage,{KERNEL_DIR}/arch/arm/boot/uImage拷贝出来。

    # zImage  - compressed kernel image
    # uImage  - zImage plus U-Boot header
uImage是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。

4、设备树编译

经过内核编译,在kernel文件夹下script/dtc中有编译好的设备树编译工具

cd kernel/scripts/dtc
./dtc -I dts -O dtb -o devicetree.dtb /FPGA工程目录/SDK目录/device_tree_bsp_0/system-top.dts //dts为sdx工程中生成,编译后在当前目录下生成一个名为devicetree.dtb)。

5. 编译并安装内核模块,更新文件系统

本文提供的rootfs是已经编译好的,如果想要重新编译或者更新文件系统,可以下载后解压,然后执行以下步骤

cd your_downlood_kernel_dir //打开编译好的内核文件夹
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules //编译内核模块,
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=../rootfs  // 在上一步打开的终端中,重新安装内核模块,安装路径为解压出来的rootfs路径
tar -cvzf rootfs.tar.gz rootfs。//将安装好内核模块的根文件系统重新压缩

6.生成启动镜像文件

制作启动镜像需要用到三个文件:fsbl.elf、system.bit和第二步生成的u-boot.elf。

打开SDK工具,生成fsbl的方法网上很多,自己查阅,不赘述了,这里只介绍如何制作boot image

在fsbl工程目录上右键选择Create Boot Image

加入u-boot.elf的路径,然后Create Image,就会在指定的输出路径上生成BOOT.bin

7.设置UBOOT环境变量

新建一个uEnv.txt,输入内容:

optargs=console=tty0 consoleblank=0 vt.global_cursor_default=0

这部分不是很懂,有清楚的请留言。

8.制作SD卡

找一张SD卡,通过系统自带的磁盘工具,首先格式化。然后创建两个分区,一个100M FAT格式,命名为UBOOT,剩余的8G ext4格式,命名为rootfs。如图所示:

将步骤6、7、4、3生成的BOOT.bin、uEnv.txt、devicetree.dtb、uImage拷贝到UBOOT分区下

将步骤5生成的rootfs.tar.gz解压到rootfs分区下。

四:实验结果

五、结束语

至此,debian在zynq上的移植全部结束,之后,我将分享如何在linux基础上开发字符驱动,以及如何运行QT程序,并通过一个摄像头采集的例子作为具体应用。

 

转载于:https://www.cnblogs.com/yuzeren48/p/10282478.html

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程相关推荐

  1. Xilinx Zynq 7000 安装Linux 系统

    Xilinx Zynq 7000 安装Linux 系统 介绍 1 准备工作 2 工具的安装 2.1 支持库的安装 2.2 PetaLinux的安装 3 搭建硬件系统 3.1 建立工程 3.2 添加IP ...

  2. 北邮实验:ARM实验板移植Linux操作系统,LCD显示汉字

    ARM实验板移植Linux操作系统,LCD显示汉字 一. 实验目的 1. 熟悉点阵字库的使用2. 熟悉Linux操作系统的使用3. 熟悉ARM嵌入式系统开发的过程 二. 实验内容 1. pc端编写用* ...

  3. Xilinx ZYNQ 7000学习笔记三(qspi flash读写操作)

    参考文献:Zynq-7000 SoC Technical Reference Manual (UG585)-ch12 Quad-SPI Flash Controller 一.nor Flash介绍 z ...

  4. Ubuntu Linux操作系统实战教程(微课视频版)

    <Ubuntu Linux操作系统实战教程(微课视频版)> 21世纪高等学校计算机类课程创新系列教材·微课版 余健  编著 清华大学出版社 北京 ISBN 978-7-302-61462- ...

  5. Linux操作系统基础教程

                             Linux操作系统基础教程 福州大学信息学院计算机系 刘延华 2003.2 目 录 前言 2 第一讲 Linux基础 2 一.什么是Linux? 2 ...

  6. linux操作系统实验教程费翔林,实验一操作系统接口实验.doc

    实验一 操作系统交互式接口使用 (一)实验环境:linux 用户名和密码:user (二)实验的目的:了解linux的各种操作命令的使用 (三)实验要求 1.按照指导书完成各种命令的使用 2.写实验报 ...

  7. 在虚拟机中安装Linux操作系统详细步骤

    欢迎关注博主 Mindtechnist 或加入[Linux C/C++/Python社区]一起探讨和分享Linux C/C++/Python/Shell编程.机器人技术.机器学习.机器视觉.嵌入式AI ...

  8. linux6教程免费课件,《Linux操作系统实用教程》课件第6章_ vi编辑器的使用 PPT

    用户无论是建立文本文件,还是编写程序.配置系统环境,都要用到文本编辑器.Linux操作系统环境下提供了许多文本编辑器,本章重点讲解vi编辑器,启动.保存.退出和其工作模式等内容,并对利用vi编辑器建立 ...

  9. linux 用pe安装win7系统,在U盘PE上安装Linux操作系统的详细教程

    熟悉安装系统的朋友知道PE可以安装Windows系统,而U盘PE也可以安装Linux操作系统,但是仍有很多朋友仍然不知道U盘PE安装Linux的步骤. 操作系统. 因此,今天,U Daxia的编辑将与 ...

最新文章

  1. python 变量引用_Python 知识要点:变量及引用
  2. (一)编译器实现资料
  3. 解决升级 Office 2010 之后 Outlook 提示“无法打开 Microsoft Outlook”
  4. 从前,有只小仙女叫...
  5. springboot启动报错LoggerFactory is not a Logback LoggerContext but Logback...
  6. 3d激光雷达开发(圆柱分割)
  7. python读取多行函数_Python3基础 __doc__ 单行与多行函数文档
  8. 应该如何理解mobx_如何使用mobx观察observable数组上的object.property更改
  9. TCP/IP协议-三次握手四次挥手
  10. Java上传文件格式判断
  11. 2018最新Jrebel激活服务,Jrebel激活,Jrebel激活码,Jrebel破解
  12. 数据分析之 AB测试(AB Test)
  13. Python练习册(二)
  14. Vue Echarts绘制世界地图
  15. 题目;我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推现在,给定两个整数n和m,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素
  16. 开关调色新世界BP2888电源解决方案
  17. 爬虫入门教程 | 使用selenium爬取微博热门数据
  18. 下载电影、软件、工具的利器--讯雷
  19. 《笨方法学 Python 3》35.分支和函数
  20. 【报告分享】2020年中国食品冷链供应链研究报告-阿里研究院(附下载)

热门文章

  1. 【ZOJ - 2968 】Difference Game (贪心,思维模拟)
  2. 【牛客 - 318F】关于我转生变成史莱姆这档事(二分,搜索)
  3. 【CodeForces - 472A】Design Tutorial: Learn from Math (tricks,思维,数论,打表)
  4. java爬虫获取div内容_Java爬虫-简单解析网页内容
  5. win10一按右键就闪屏_升级Win10正式版后屏幕一直闪烁正确的解决办法
  6. 计算机网络技术基础教学内容,计算机网络技术基础
  7. 华为服务器怎么查看系统日志,华为日志服务器
  8. 约瑟夫环-(数组、循环链表、数学)
  9. 广义表的基本概念【数据结构】
  10. python 人气高的项目_给大家推荐:五个Python小项目,Github上的人气很高的!