作者: 付汉杰 hankf@xilinx.com hankf@amd.com 测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0,VCK190
Petalinux编译后,在images/linux里,既有Image,也有image.ub。image.ub已经带文件系统,可以独立启动。查看boot.scr,可以看到uboot加载image.ub后,执行命令“bootm 0x10000000”,启动了Linux。
fitimage_name=image.ub
if test -e ${devtype} ${devnum}:${distro_bootpart} /${fitimage_name}; then
fatload ${devtype} ${devnum}:${distro_bootpart} 0x10000000 ${fitimage_name};
bootm 0x10000000;
fi
使用image.ub,只有一个文件,使用起来最简单方便。
在调试时,也可以使用分开的Image、rootfs.cpio.gz.u-boot、system.dtb。查看boot.scr,可以看到uboot依次检查上述3个文件是否存在。如果存在,就加载。加载完rootfs.cpio.gz.u-boot后,执行命令“booti 0x00200000 0x04000000 0x00001000”,启动了Linux。
kernel_name=Image
rootfs_name=rootfs.cpio.gz.u-boot
if test -e ${devtype} ${devnum}:${distro_bootpart} /${kernel_name}; then
fatload ${devtype} ${devnum}:${distro_bootpart} 0x00200000 ${kernel_name};
fi
if test -e ${devtype} ${devnum}:${distro_bootpart} /system.dtb; then
fatload ${devtype} ${devnum}:${distro_bootpart} 0x00001000 system.dtb;
fi
if test -e ${devtype} ${devnum}:${distro_bootpart} /${rootfs_name} && test "${skip_ramdisk}" != "yes"; then
fatload ${devtype} ${devnum}:${distro_bootpart} 0x04000000 ${rootfs_name};
booti 0x00200000 0x04000000 0x00001000
fi
如果Image和image.ub都存在,优先使用image.ub启动。
使用PetaLinux编译时,会自动生成根文件系统,耗时较长,导致调试不方便。在编译PetaLinux工程后,把Linux kernel的代码和配置文件复制出来。修改Linux kernel的代码后,直接编译,得到对应的Image和ko文件,也可以使用上述命令启动。
hankf$ find -name "kernel-source"
./build/tmp/work-shared/versal-generic/kernel-source
hankf$ find -name ".config" | xargs -n 1 ls
./build/tmp/work/versal_generic-xilinx-linux/linux-xlnx/5.10+git999-r0/linux-xlnx-5.10+git999/.config
./build/tmp/work/versal_generic-xilinx-linux/u-boot-xlnx/v2021.01-xilinx-v2021.2+gitAUTOINC+63b6d260db-r0/build/.config
./build/tmp/work-shared/versal-generic/kernel-build-artifacts/.config
其中体积最大的文件,是Linux的配置文件。复制到默认配置文件夹,比如arm64的是“arch/arm64/configs/”中,命名为xilinx_xxx_defconfig,比如命名为 xilinx_vck190_defconfig。
hankf$ ls arch/arm64/configs/ -l
total 236
-rw-r--r-- 1 hankf hankf 25682 Mar 1 15:41 defconfig
-rw-r--r-- 1 hankf hankf 11334 Mar 1 15:41 xilinx_defconfig
-rw-r--r-- 1 hankf hankf 179126 Mar 2 10:37 xilinx_vck190_defconfig
-rw-r--r-- 1 hankf hankf 5635 Mar 1 15:41 xilinx_versal_defconfig
-rw-r--r-- 1 hankf hankf 9726 Mar 1 15:41 xilinx_zynqmp_defconfig
在Linux kernel的代码的代码目录,执行“make xilinx_vck190_defconfig”,再编译,就能得到对应的Image和ko文件。相对PetaLinux编译,这种方式更快,也能使用PetaLinux的boot文件和根文件系统。