记录一下如何直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容

        xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN,然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件,地球人都知道petalinux编译一次是很耗时间的,那么有没有什么简单的办法能修改rootfs呢?

为了达到这么个目的,我花点时间研究了一下petalinux编译打包过程,执行build命令后最终会生成linux内核,rootfs,dtb,u-boot,fsbl,fpga.bit这些最终文件,然后package时将这些文件一起打包成BOOT.bin才可以烧写spi flash,其中kernel,rootfs,dtb会被预先打包成image.ub文件才会参与到package过程,如果要修改rootfs,可以把image.ub文件解包,出rootfs,修改其中的内容,再重新打包成新的rootfs,就可以了,下面过程是经过多次尝试后总结出的步骤,以供参考

首先需要准备 image.ub文件,这个文件在编译完成后自动生成,petalinux2019.2中这个文件在xxxx/images/linux目录下,使用dumpimage命令拆包,如下面的样子,可以解出kernel,设备树文件和rootfs

dumpimage -i image.ub -T flat_dt  -p 0 kernel.bin
dumpimage -i image.ub -T flat_dt  -p 1 devicetree.dtb
dumpimage -i image.ub -T flat_dt  -p 2 rootfs.cpio.gz

第二步,对rootfs解压出原始文件

mkdir ramdisk_unzip
gunzip -c rootfs.cpio.gz | sh -c 'cd ramdisk_unzip/ && cpio -i'

经过上面两步骤后就可以在ramdisk_unzip文件夹下看到原始的rootfs目录结构,这个时候就可以对rootfs随意修改了

第三部,修改完成后重新对rootfs再打包成rootfs.cpio.gz,使用如下命令进行打包

sh -c 'cd ramdisk_unzip/ && find . | cpio -H newc -o' | gzip -9 > repack_ramdisk.cpio.gz

第4步,重新生成一个新的image.ub文件,使用mkimage命令,如下

mkimage -f package_image_ub.its repack_image.ub

其中的package_image_ub.its是告诉mkimage打包需要的参数,这个文件在petalinux编译路径下有模板,我这里复制出petalinux的模板,修改了一下,主要是几个文件路径,改成自己的文件

/dts-v1/;

/ {
        description = "U-Boot fitImage for PetaLinux/4.19-xilinx-v2019.2+git999/plnx-zynq7";
        #address-cells = <1>;

        images {
                kernel@1 {
                        description = "Linux kernel";
                        data = /incbin/("刚才第一步解压出来的kernel.bin文件路径");
                        type = "kernel";
                        arch = "arm";
                        os = "linux";
                        compression = "none";
                        load = <0x8000>;
                        entry = <0x8000>;
                        hash@1 {
                                algo = "sha1";
                        };
                };
                fdt@system-top.dtb {
                        description = "Flattened Device Tree blob";
                        data = /incbin/("刚才第一步解压出来的devicetree.dtb文件路径");
                        type = "flat_dt";
                        arch = "arm";
                        compression = "none";
                        
                        hash@1 {
                                algo = "sha1";
                        };
                };
                ramdisk@1 {
                        description = "petalinux-user-image";
                        data = /incbin/("重新打包生成的repack_ramdisk.cpio.gz文件路径");
                        type = "ramdisk";
                        arch = "arm";
                        os = "linux";
                        compression = "gzip";
                        
                        
                        hash@1 {
                                algo = "sha1";
                        };
                };
	};

        configurations {
                default = "conf@system-top.dtb";
                conf@system-top.dtb {
			description = "1 Linux kernel, FDT blob, ramdisk";
			kernel = "kernel@1";
			fdt = "fdt@system-top.dtb";
			ramdisk = "ramdisk@1";
			
                        hash@1 {
                                algo = "sha1";
                        };
                };
	};
};

第5步,使用原本petalinux自带的package命令重新打包生成BOOT.BIN

petalinux-package --boot --fsbl ./fsbl.elf --fpga --u-boot ./u-boot.elf --kernel ./repack_image.ub -o ./BOOT.BIN --force

其中的fsbl,u-boot都是原先build后自动生成的,在xxxx/images/linux路径下就有,经过上面的步骤后就重新生成了烧写文件,理论上烧写到spiflsh就可以正常启动了

简单几步就完成了rootfs的重新修改和配置,想添加删除什么文件比原先的build命令方便多了

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更换 PetaLinuxzynqmp.dtsi 文件需要以下步骤: 1. 编辑新的 zynqmp.dtsi 文件。可以在 PetaLinux 工程目录下执行以下命令来获取原始的 zynqmp.dtsi 文件: ``` petalinux-config -c kernel ``` 在 kernel 配置菜单中选择 Device Tree ,然后选择 View DTS Source File 选项。将生成的文件保存到本地。 2. 将编辑好的 zynqmp.dtsi 文件复制到 PetaLinux 工程目录下,例如 $PETALINUX_PROJECT_DIR/project-spec/meta-user/recipes-bsp/device-tree/files/。 3. 更新 PetaLinux 工程的配置,以包含新的 zynqmp.dtsi 文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-config ``` 在 PetaLinux 配置菜单中选择 Device Tree ,然后选择 User Overlays 选项。将新的 zynqmp.dtsi 文件添加到用户重叠列表中。 4. 重新生成 PetaLinux 工程的设备树文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-build -c device-tree ``` 5. 重新生成 PetaLinux 工程的镜像文件。在 PetaLinux 工程目录下执行以下命令: ``` petalinux-build ``` 或者只重新生成镜像文件而不重新构建整个工程: ``` petalinux-package --boot --fsbl image/linux/zynqmp_fsbl.elf --fpga images/linux/your_fpga.bit --u-boot --force ``` 其中,your_fpga.bit 替换为您实际使用的 FPGA 位流文件名。 6. 在目标设备上刷写新生成的 PetaLinux 镜像文件。 如果一切顺利,您的 PetaLinux 工程现在应该已经使用了新的 zynqmp.dtsi 文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值