Xilinxzynq-7000系列FPGA移植Linux操作系统详细教程
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版本
三:操作步骤
1.设置交叉编译环境
因为最终运⾏在arm9上,所以uboot、内核,⽂件系统编译都需要⽤arm-linux交叉编译⼯具,zynq2000使⽤的是arm-linux-gnueabihf,交叉编译⼯具可以从⽹上单独下载,也可直接使⽤vivado⾃带的交叉编译⼯具。使⽤⽅法也很简单
source /opt/Xilinx/SDK/2018.2/settings64.sh
dent或者
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  //编译开发所需要的⼯具
hibernate框架源码分析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中有编译好的设备树编译⼯具
xhtml与html能否兼容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)。
truncate 语法
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。//将安装好内核模块的根⽂件系统重新压缩
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环境变量
新建⼀个,输⼊内容:
optargs=console=tty0 consoleblank=0 vt.global_cursor_default=0
clean tablet什么意思这部分不是很懂,有清楚的请留⾔。
8.制作SD卡
linux操作系统镜像⼀张SD卡,通过系统⾃带的磁盘⼯具,⾸先格式化。然后创建两个分区,⼀个100M FAT格式,命名为UBOOT,剩余的8G ext4格式,命名为rootfs。如图所⽰:
将步骤6、7、4、3⽣成的BOOT.bin、、devicetree.dtb、uImage拷贝到UBOOT分区下
将步骤5⽣成的解压到rootfs分区下。
四:实验结果
五、结束语
⾄此,debian在zynq上的移植全部结束,之后,我将分享如何在linux基础上开发字符驱动,以及如何运⾏QT程序,并通过⼀个摄像头采集的例⼦作为具体应⽤。