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= vt.global_cursor_default=

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

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程序,并通过一个摄像头采集的例子作为具体应用。

 

Xilinx zynq-7000系列FPGA移植Linux操作系统详细教程的更多相关文章

  1. VM安装linux操作系统详细教程

    1.首先我们新建一个虚拟机,先不安装操作系统,稍后再对其安装Linux系统. 新建虚拟机步骤如下: 打开VMware软件,菜单栏点击“文件(F)”–>选择“新建虚拟机(N)”,如下图1,(或者直 ...

  2. ZYNQ FLASH+EMMC手动移植LINUX启动

    前言 虽可使用Petalinux进行移植,简单方便,但为了更清楚明白的了解整个流程,还是尝试了一波手动移植. 参考资料 ZYNQ Linux 移植:包含petalinux移植和手动移植debian9 ...

  3. VMware虚拟机12安装linux系统详细教程

    亲测有效,附图: 工具/原料 VM ware workstation12虚拟机(百度下载) 深度linux镜像ios系统文件 链接:https://pan.baidu.com/s/1RY1Plgru4 ...

  4. Zynq ZC706 传统方式移植Linux -- 编译kernel 文件系统 devicetree

    1.kernel 实际操作时候,下面两条命令就够了. make ARCH=arm xilinx_zynq_defconfig make ARCH=arm CROSS_COMPILE=arm-xilin ...

  5. Zynq ZC706 传统方式移植Linux -- 编译u-boot

    我用的是zc706不是zed 基本思路是: 1.安装交叉编译工具(见 https://www.cnblogs.com/idyllcheung/p/10532654.html ) 2.下载xilinx ...

  6. Linux操作系统入门教程

    http://www.linuxidc.com/Linux/2015-07/120815p8.htm

  7. u盘安装Linux系统详细教程

    2012-05-06 02:30:44 分类: LINUX 想不想体验一下Linux下呢?刻盘太浪费钱,而U盘却可以多次利用.本文就是要介绍如何通过U盘安装Linux系统的.只要用Universal- ...

  8. VMware虚拟机安装Linux系统详细教程

    VMware14虚拟机安装RedHad6系统步骤 redhat网盘资源:链接:https://pan.baidu.com/s/1GlT20vevqbZ9qTxsGH1ZzA 提取码:oh57 如果网盘 ...

  9. VMware上安装Kali Linux 超详细教程

    一.下载镜像文件 下载好系统对应镜像文件  https://www.kali.org/downloads/ 二.创建新的虚拟机 1.创建新的虚拟机 我们使用自定义的配置方法. 2.添加镜像文件的路径 ...

随机推荐

  1. statistics_level 参数的应用

    转自 http://blog.csdn.net/zengmuansha/article/details/5149398 statistics_level 参数是oracle9.2开始引入的一个控制系统 ...

  2. ExpressRoute 先决条件和清单

    若要使用 ExpressRoute 连接到 Azure 服务,需确认是否符合以下部分中所列的要求. 帐户要求 使用中的有效 Azure 帐户.需有此帐户才能设置 ExpressRoute 线路. 连接 ...

  3. ASP.NET 通过配置hiddenSegment禁止目录下资源通过Url形式访问

    根据默认的ASP.NET配置,App_Data下的资源是禁止通过Url形式直接访问的,在实际开发中,可能也会有这样的需求,比如某些是系统资源目录,该目录下的资源也需要像App_Data目录一样禁止访问 ...

  4. Oracle 补丁那些事儿(PS、PSU、CPU、SPU、BP、DBBP…)

    当前ORACLE数据库提供两种方式的补丁一种是主动的Proactive Patches和另一种被动的Reactive Patches,其中Reactive Patches是指过去的ONE-OFF Pa ...

  5. [C++] 用Xcode来写C++程序[3] Constants

    用Xcode来写C++程序[3] Constants 以下是一些基本数据的含义: 75 // int 75u // unsigned int 75l // long 75ul // unsigned ...

  6. Oracle Order By 排序 非主键时 紊乱 重复 问题

    Oracle的分页查询是没有进行任何排序操作的,Oracle是顺序的从数据块中读取符合条件的数据返回到客户端. 而Oracle的排序算法不具有稳定性,也就是说,对于排序键值相等的数据,这种算法完成排序 ...

  7. 阿里云MaxCompute被Forrester评为全球云端数据仓库领导者

    参考消息网3月19日报道 日前,全球权威调研机构佛瑞斯特研究公司(Forrester)发布<2018年一季度云端数据仓库>报告.报告对大数据服务商的主要功能.区域表现.细分市场和典型客户等 ...

  8. Basestation函数解析(一)

    ---恢复内容开始--- 1._tmain   _tmain()是微软操作系统(windows)提供的对unicode字符集和ANSI字符集进行自动转换用的程序入口点函数. 首先,这个_tmain() ...

  9. python第三方库——xlrd和xlwt操作Excel文件学习

    python第三方库——xlrd和xlwt操作Excel文件学习 1安装: C:\Users\Lenovo>pip install xlwtCollecting xlwt  Downloadin ...

  10. URL地址理解

    / 表示相对目录的根目录./ 表示相对目录的本层目录../ 表示相对目录的上层目录