采用分步式的方式编译启动开发板所需要的各种镜像文件,虽然步骤比较繁琐,但灵活性比较高

一个完整的linux系统包含PS和PL两个构件,其中PS构件包含fsbl、uboot、设备树文件、linux内核、根文件系统共5个要素,PL构件包含bit文件一个要素。

将bit文件从原先的BOOT.BIN文件独立出来;

将image.ub文件分开为内核zImage和设备树dtb;

将根文件系统放到SD卡的EXT4分区,加载启动速度。

1、创建Vivado硬件平台

①在Windows系统下使用Vivado生成项目工程,生成.SDK后缀的文件

②创建了一个名为petalinux的目录,并在petalinux目录下创建了hdf目录用于存放这个sdk文件夹,将sdk文件夹拷贝到用户节目路下的petalinux/hdf目录

tgz也是镜像文件嘛 tib镜像文件_tgz也是镜像文件嘛


2、设置Petalinux环境变量

指令:source /opt/pkg/petalinux/2018.3/settings.sh

或者 指令: sptl (echo “alias sptl=‘source $PETALINUX/settings.sh’” >> ~/.bashrc)

//输入sptl就可以设置Petalinux的环境变量

tgz也是镜像文件嘛 tib镜像文件_fpga开发_02


3、创建petalinux工程

指令:petalinux-create -t project --template zynq -n ZYNQ_DIS_BUILD

创建一个名为“ZYNQ_DIS_BUILD”的Petalinux工程,

template参数表明创建的petalinux工程使用的平台模板,

此处的zynq表明使用的是zynq平台模板的petalinux工程,用于zynq-7000系列的芯片。

name参数(此处简写为“-n”)后接的是petalinux工程名,如此处的“ZYNQ_DIS_BUILD”。

tgz也是镜像文件嘛 tib镜像文件_linux_03


4、配置petalinux工程

4.1 petealinux-config

指令:cd ZYNQ_DIS_BUILD /进入到petalinux工程目录下

指令:petalinux-config --get-hw-description …/hdf/Navigator_7020.sdk/ //导入hdf文件

tgz也是镜像文件嘛 tib镜像文件_分布式_04


5、制作BOOT.BIN启动文件

5.1 将 dtb 文件从 image.ub 文件中独立开来,并将根文件系统放到 SD 卡的 EXT4分区

(1)“Subsystem AUTO Hardware Settings”

tgz也是镜像文件嘛 tib镜像文件_linux_05


(2)“Advanced bootable images storage Settings”

tgz也是镜像文件嘛 tib镜像文件_分布式_06


(3)“dtb image settings”

tgz也是镜像文件嘛 tib镜像文件_fpga开发_07


(4)image storage media设置为primary sd

tgz也是镜像文件嘛 tib镜像文件_分布式_08


(5)“Image Packaging Configuration”

tgz也是镜像文件嘛 tib镜像文件_分布式_09


(6)“Root filesystem type (INITRAMFS)”选择“SD card”

tgz也是镜像文件嘛 tib镜像文件_设备树_10


(7)注意将串口修改至与开发板一致的硬件串口

5.2 编译uboot,生成BOOT.BIN文件

指令:petalinux-build -c u-boot

指令:petalinux-build -c bootloader(生成fsbl.elf)

指令:petalinux-package --boot --fsbl --u-boot --force

tgz也是镜像文件嘛 tib镜像文件_设备树_11


tgz也是镜像文件嘛 tib镜像文件_分布式_12


tgz也是镜像文件嘛 tib镜像文件_设备树_13


tgz也是镜像文件嘛 tib镜像文件_fpga开发_14


6、生成设备树文件

使用Petalinux工具的hsi命令和xilinx的device-tree仓库

(1)拷贝并确认xilinx的device-tree仓库文件和工程hdf文件的路径

tgz也是镜像文件嘛 tib镜像文件_分布式_15


(2)指定路径下生成设备树文件

打开hdf文件

指令:open_hw_design /home/moonin/Petalinux/hdf/Navigator_7020.sdk/navigator_7020_wrapper.hdf

设置device-tree仓库所在路径

指令:set_repo_path /home/moonin/Device_tree/device-tree-xlnx-xilinx-v2018.3

create_sw_design创建软件设计,”-os device_tree”指定了软件设计的类型,

device-tree表示一个设备树类型,”-proc ps7_cortexa9_0”指定处理器的名称

指令:create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0

在指定路径下,生成设备树文件

指令:generate_target -dir /home/moonin/Petalinux/dts

tgz也是镜像文件嘛 tib镜像文件_linux_16


7、编译内核kernel

tgz也是镜像文件嘛 tib镜像文件_linux_17


tgz也是镜像文件嘛 tib镜像文件_tgz也是镜像文件嘛_18


7.1 添加设备树文件

将设备树文件pcw.dtsi、pl.dtsi、system-top.dts、zynq-7000.dtsi拷贝至内核路径下

指令:cp -r /home/moonin/Petalinux/dts/pcw.dtsi /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot/dts

指令:cp -r /home/moonin/Petalinux/dts/pl.dtsi /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot/dts

指令:cp -r /home/moonin/Petalinux/dts/system-top.dts /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot/dts

指令:cp -r /home/moonin/Petalinux/dts/zynq-7000.dtsi /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot/dts

tgz也是镜像文件嘛 tib镜像文件_设备树_19


修改system-top.dts文件以及Makefile增加system-top.dtb文件(/ZYNQ 搜索ZYNQ字符)

tgz也是镜像文件嘛 tib镜像文件_设备树_20


7.2 编译内核kernel

指令:cd /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/

指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

tgz也是镜像文件嘛 tib镜像文件_设备树_21


指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10

tgz也是镜像文件嘛 tib镜像文件_linux_22


7.3 编译设备树

指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

tgz也是镜像文件嘛 tib镜像文件_分布式_23


7.4 编译rootfs

指令:petalinux-build -c rootfs

tgz也是镜像文件嘛 tib镜像文件_fpga开发_24


tgz也是镜像文件嘛 tib镜像文件_tgz也是镜像文件嘛_25


8、制作SD卡启动

8.1 显示挂载点

指令:df -Th

tgz也是镜像文件嘛 tib镜像文件_fpga开发_26


8.2 拷贝zImage文件至SD boot区

指令:cd /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot

指令:cp -r zImage /media/moonin/BOOT/

tgz也是镜像文件嘛 tib镜像文件_分布式_27


8.3 拷贝system-top.dtb文件至SD boot区

指令:cd /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot/dts

指令:cp -r system-top.dtb /media/moonin/BOOT/

tgz也是镜像文件嘛 tib镜像文件_fpga开发_28


8.4 拷贝BOOT.BIN & system.bit文件至SD boot区

指令:cd /home/moonin/Petalinux/ZYNQ_DIS_BUILD/images/linux

指令:cp -r BOOT.BIN /media/moonin/BOOT/

指令:cp -r system.bit /media/moonin/BOOT/

tgz也是镜像文件嘛 tib镜像文件_linux_29


8.5 将根文件系统rootfs.tar.gz解压到SD rootfs区

指令:cd /home/moonin/Petalinux/ZYNQ_DIS_BUILD/images/linux

指令:sudo tar -xzf rootfs.tar.gz -C /media/moonin/rootfs

指令:sync

指令:umount /dev/sdb*

tgz也是镜像文件嘛 tib镜像文件_tgz也是镜像文件嘛_30


9、启动开发板

设置uboot启动指令

9.1将uboot的环境还原到当前设置

指令:env default -a

9.2设置bitstream_load_address变量存放bitstream文件从SD卡中拷贝到内存中的地址

指令:setenv bitstream_load_address 0x100000

9.3设置bitstream_image变量等于SD卡中bitstream文件的名字

指令:setenv bitstream_image system.bit

9.4设置bitstream_size变量等于bitstream文件的大小

指令:setenv bitstream_size 0x300000

9.5设置kernel_img变量等于SD卡中内核镜像的名字zImage

指令:setenv kernel_img zImage

9.6设置dtbnetstart变量设备树dtb文件从SD卡拷贝到内存中的地址

指令:setenv dtbnetstart 0x2000000

9.7设置netstart变量内核镜像文件从SD卡拷贝到内存中的地址

指令:setenv netstart 0x2080000

9.8设置default_bootcmd变量

指令:setenv default_bootcmd ‘if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM… && load mmc 0 ${bitstream_load_address} ${bitstream_image} && fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && run cp_kernel2ram && run cp_dtb2ram && bootz ${netstart} - ${dtbnetstart}; fi’

9.9显示并保存设置,重新启动

指令:printenv default_bootcmd

指令:saveenv

指令:boot