https://blog.csdn.net/u010580016/article/details/80430138?utm_source=blogxgwz1
开发环境:window10, vivado 2017.1, ubuntu 16.04, Eclipse+cdt
硬件环境:米尔科技zturn board,zynq7z010
本笔记详细介绍了开发ZYNQ7000系列的基础软件系统构建,介绍了Vivado的使用以及IP核的配置,最后搭建能让ZYNQ运行arm linux系统的软件环境,在今后的开发过程中将在此基础上进行。在完整搭建好本系统之后建议保存为模板工程。
首先简单介绍一下ZYNQ开发linux的基本流程:ZYNQ的开发也是先硬件后软件的方法。具体流程如下:
在Vivado中新建工程,增加一个嵌入式的源文件。
在Vivado里添加和配置PS和PL部分基本的外设,或需要添加自定义的外设。
在Vivado里生成顶层HDL文件,并添加约束文件。再编译生成比特流文件system.bit。
导出到SDK软件开发环境,在SDK环境里可以编写一些调试软件验证硬件和软件,结合比特流文件单独调试ZYNQ系统
在SDK里生成FSBL文件。
在VMware虚拟机里生成u-boot.elf bootloader镜像。
在SDK里通过FSBL文件, 比特流文件system.bit和u-boot.elf文件生成一个boot.bin文件。
在VMware里生成Linux的内核镜像文件zImage和Linux的文件系统ramdisk。另外还需要对FPGA自定义的IP编写驱动。
把boot.bin,zimage和ramdisk三个文件放入到SD卡的FAT分区中,启动开发板电源,Linux操作系统会从SD卡里启动。
一. 准备Linux系统的内核、uboot、文件系统、设备树等文件
1.1 编译uboot
在工作空间建立uboot目录,进入uboot目录,解压uboot源码
<workdir>$ cd uboot
uboot$ tar -jxvf u-boot-xlnx.tar.bz2
uboot$ cd u-boot-xlnx
编译uboot:
u-boot-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- distclean
u-boot-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zturn_config
u-boot-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
编译完成后,在当前目录下会生成"u-boot"ELF文件,将其重命名为"u-boot.elf"。
1.2 编译linux内核
在工作空间建立kernel目录,进入kernel目录,解压内核源码:
<workdir>$ cd kernel
kernel$ tar -xvjf linux-xlnx.tar.bz2
kernel$ cd linux-xlnx
开始编译:
linux-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- distclean
linux-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- zynq_zturn_defconfig
linux-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- uImage
linux-xlnx$ make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- dtbs
编译完成后,在arch/arm/boot目录下生成uImage文件,在/arch/arm/boot.dts/生成zynq_zturn.dtb文件。
1.3 制作randisk
在工作空间建立filesystem目录,进入filesystem目录,将uramdisk.image.gz拷贝至该目录。
<workdir>$ cd filesystem
filesystem$ mkdir -p rootfs
去掉mkimage生成的64bytes文件头,生成新的ramdisk.image.gz
filesystem$ dd if=uramdisk.image.gz of=ramdisk.image.gz bs=64 skip=1
gunzip解压ramdisk.image.gz生成ramdisk.image
filesystem$ gunzip ramdisk.image.gz
将ramdisk.image挂在在rootfs目录
filesystem$ sudo mount -o loop,rw ramdisk.image rootfs
进入rootfs目录,根据需要做修改。
经笔者实验发现,米尔科技的开发板Zturn board在直接使用光盘文件时,以太网不能正常运行,经调试发现其ramdisk文件系统中关于网络的配置文件不完整,在ramdisk文件目录中,打开/etc/network/interfaces文件,发现其中没有关于eth0的配置,因此添加网络配置如下:
auto eth0
iface eth0 inet dhcp
重新生成ramdisk, 同步文件系统并卸载ramdisk
filesystem$ sync
filesystem$ umount rootfs
用gzip压缩ramdisk.image,生成ramdisk.image.gz
filesystem$ gzip -9 ramdisk.image
用mkimage添加头文件,生成新的uramdisk.image.gz供u-boot使用。
filesystem$ mkimage -A arm -T ramdisk -C gzip -n Ramdisk -d ramdisk.image.gz uramdisk.image.gz
至此,我们已经得到了u-boot.elf, uImage, devicetree.dtb, uramdisk.image.gz文件。
原文:https://www.cnblogs.com/idyllcheung/p/10524623.html