【分享】使用Petalinux的boot文件、根文件系统,和开源Linux的Image启动

使用Petalinux的boot文件、根文件系统,和开源Linux的Image启动

概述

作者: 付汉杰 hankf@xilinx.com hankf@amd.com
测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0,VCK190

image.ub启动

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启动

在调试时,也可以使用分开的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的boot文件、根文件系统,和开源Linux的Image启动

使用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文件和根文件系统。

posted @ 2022-03-02 18:01  HankFu  阅读(1765)  评论(0编辑  收藏  举报