采用分步式的方式编译启动开发板所需要的各种镜像文件,虽然步骤比较繁琐,但灵活性比较高
一个完整的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目录
2、设置Petalinux环境变量
指令:source /opt/pkg/petalinux/2018.3/settings.sh
或者 指令: sptl (echo “alias sptl=‘source $PETALINUX/settings.sh’” >> ~/.bashrc)
//输入sptl就可以设置Petalinux的环境变量
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”。
4、配置petalinux工程
4.1 petealinux-config
指令:cd ZYNQ_DIS_BUILD /进入到petalinux工程目录下
指令:petalinux-config --get-hw-description …/hdf/Navigator_7020.sdk/ //导入hdf文件
5、制作BOOT.BIN启动文件
5.1 将 dtb 文件从 image.ub 文件中独立开来,并将根文件系统放到 SD 卡的 EXT4分区
(1)“Subsystem AUTO Hardware Settings”
(2)“Advanced bootable images storage Settings”
(3)“dtb image settings”
(4)image storage media设置为primary sd
(5)“Image Packaging Configuration”
(6)“Root filesystem type (INITRAMFS)”选择“SD card”
(7)注意将串口修改至与开发板一致的硬件串口
5.2 编译uboot,生成BOOT.BIN文件
指令:petalinux-build -c u-boot
指令:petalinux-build -c bootloader(生成fsbl.elf)
指令:petalinux-package --boot --fsbl --u-boot --force
6、生成设备树文件
使用Petalinux工具的hsi命令和xilinx的device-tree仓库
(1)拷贝并确认xilinx的device-tree仓库文件和工程hdf文件的路径
(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
7、编译内核kernel
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
修改system-top.dts文件以及Makefile增加system-top.dtb文件(/ZYNQ 搜索ZYNQ字符)
7.2 编译内核kernel
指令:cd /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/
指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig
指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10
7.3 编译设备树
指令:make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10
7.4 编译rootfs
指令:petalinux-build -c rootfs
8、制作SD卡启动
8.1 显示挂载点
指令:df -Th
8.2 拷贝zImage文件至SD boot区
指令:cd /home/moonin/Linux_kernel/linux-xlnx-xilinx-v2018.3/arch/arm/boot
指令:cp -r zImage /media/moonin/BOOT/
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/
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/
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*
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