汽车门户网站管理系统的详细设计与实现,怎么做网站何做网站,广告牌免费设计在线生成,新手开公司怎么找项目xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN#xff0c;然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件#xff0c;地球人都知道petalinux编译一次是很耗时间的#xff0c;那么有没有什么简… xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件地球人都知道petalinux编译一次是很耗时间的那么有没有什么简单的办法能修改rootfs呢
为了达到这么个目的我花点时间研究了一下petalinux编译打包过程执行build命令后最终会生成linux内核rootfsdtbu-bootfsblfpga.bit这些最终文件然后package时将这些文件一起打包成BOOT.bin才可以烧写spi flash其中kernelrootfsdtb会被预先打包成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.2git999/plnx-zynq7;#address-cells 1;images {kernel1 {description Linux kernel;data /incbin/(刚才第一步解压出来的kernel.bin文件路径);type kernel;arch arm;os linux;compression none;load 0x8000;entry 0x8000;hash1 {algo sha1;};};fdtsystem-top.dtb {description Flattened Device Tree blob;data /incbin/(刚才第一步解压出来的devicetree.dtb文件路径);type flat_dt;arch arm;compression none;hash1 {algo sha1;};};ramdisk1 {description petalinux-user-image;data /incbin/(重新打包生成的repack_ramdisk.cpio.gz文件路径);type ramdisk;arch arm;os linux;compression gzip;hash1 {algo sha1;};};};configurations {default confsystem-top.dtb;confsystem-top.dtb {description 1 Linux kernel, FDT blob, ramdisk;kernel kernel1;fdt fdtsystem-top.dtb;ramdisk ramdisk1;hash1 {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
其中的fsblu-boot都是原先build后自动生成的在xxxx/images/linux路径下就有经过上面的步骤后就重新生成了烧写文件理论上烧写到spiflsh就可以正常启动了
简单几步就完成了rootfs的重新修改和配置想添加删除什么文件比原先的build命令方便多了。