这篇文章将向大家介绍向Zynq SoC移植Linux操作系统,具体划分为制作Boot.bin文件、设备树文件、内核镜像以及根文件系统。开始之前需要大家对u-boot、Linux内核以及Git工具具有一定的了解,这样下面的步骤才能够顺利的进行。
资源下载:
U-boot:与ZYBO板卡硬件设计相关
Linux 内核源码
根文件系统
注:相关资料可以在Digilent的GitHub账户上找到(即https://github.com/DigilentInc)
步骤一:编译生成u-boot.elf文件
使用git clone命令从github上下载u-boot源码,注意使用主分支(master),使用tar命令对下载的压缩文件解压,tar zxvf u-boot-digilent-2012.04-digilent-13.01.tar.gz。 如果下载的是zip文件用unzip u-boot-digilent-2012.04-digilent-13.01.zip
编译u-boot之前我们要先设置好交叉编译环境变量,设置环境变量方法为source settings64.sh(见第一篇文章),然后根据上图编译u-boot,使用命令make CROSS_COMPILE= arm-xilinx-linux-gnueabi-
编译完成后会在u-boot-Digilent-Dev目录下生成u-boot文件,我们要给其加上‘.elf’,并且预先拷贝到sd_image目录下。
步骤二:制作FSBL文件
首先打开vivado,点击File->Export->Export Hardware for SDK,选择第一篇文章建立好的硬件工程,注意Launch SDK选项要打勾。
在新打开的SDK界面下选择File->New->Project新建工程
根据上图完成各项配置,将工程名字设置为FSBL,选择hw_platform_0,OS platform选择standalone。然后点击Next弹出下面对话框。
SDK为我们提供了Zynq FSBL应用模板,FSBL(first stage bootloader)即为第一阶段启动引导文件。SDK会自动编译生成FSBL.elf文件,位于目录zybo_base_system/source/vivado/hw/zybo_bsd.sdk/SDK/SDK_Export/FSBL/Debug/。
步骤三:生成boot.bin文件
首先,我们需要在fsbl hook中设置mac地址。可以将FSBL project中的fsbl_hooks.c文件和source/vivado/SDK/fsbl目录下的fsbl_hooks.c互换。然后点击build重新编译。
在SDK界面选择Xilinx Tools->Create Zynq Boot Image弹出上面对话框来生成boot文件。依次按顺序添加FSBL.elf、system.bit和u-boot.elf文件。System.bit在zybo_base_system/source/vivado/hw/zybo_bsd/zybo_bsd.sdk/SDK/SDK_Export/hw_platform_0/目录下, u-boot.elf在zybo_base_system/sd_image/目录下。最后制定输出目录生成BOOT.BIN文件。
步骤四:编译Linux内核
编译Linux内核首先我们也要先下载源码并解压,设置交叉编译环境,导入内核配置,然后编译(具体命令如上图所示)。
步骤五:制作uimage
经过步骤四编译后生成的文件为zImage,位于arch/arm/boot/目录下,这里我们需要制作未经压缩过的内核镜像uImage。
步骤六:制作根文件系统uramdisk.image.gz
这里我们要借助u-boot目录下的mkimage工具,首先从本文开头的连接下载ramdisk8M.image.gz文件,设置好文件路径根据上图命令生成uramdisk.image.gz文件。
步骤七:制作设备树文件
在下载的Linux内核源码目录下已经有预先设备号的设备树源文件zynq-zybo.dts,按照上图命令即可生成devicetree.dtb文件(注意生成文件名字不可修改)。