直接修改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命令方便多了。
相关文章:
直接修改zynq petalinux编译出来的rootfs.cpio.gz文件内容
xilinx zynq petalinux 默认编译打包出的SPI flash烧写启动文件是BOOT.BIN,然而每次需要修改rootfs内的文件时都要重新build rootfs 然后再 package一次才能生成新的BOOT.bin文件,地球人都知道petalinux编译一次是很耗时间的,那么有没有什么简…...
什么是 Golang 类型断言
类型断言:用于检查某个接口是否包含某个具体类型,语法x.(T),x是一个接口类型表达式,T是具体的类型,如果x包含的值可以被转换成T类型,则是ok 在Go语言中,任何类型的值都属于空接口类型。空接口类…...
mysql数据库root权限读写文件
如果没有shell,只有数据库权限的情况下: 1. udf 提权提示没有目录:使用数据流创建目录 1. select xxx into outfile C:\\phpstudy_pro\\Extensions\\MySQL5.5.29\\lib\::$INDEX_ALLOCATION;2. select xxx into outfile C:\\phpstudy_pro\…...
力扣爆刷第88天之hot100五连刷26-30
力扣爆刷第88天之hot100五连刷26-30 文章目录 力扣爆刷第88天之hot100五连刷26-30一、142. 环形链表 II二、21. 合并两个有序链表三、2. 两数相加四、19. 删除链表的倒数第 N 个结点五、24. 两两交换链表中的节点 一、142. 环形链表 II 题目链接:https://leetcode.…...
Ethersacn的交易数据是什么样的(2)
分析 Raw Transanction RLP(Recursive Length Prefix)是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式,以便在以太坊中传输和存储。RLP 是一种递归的编码方式,允许对复杂的数据结构进行编码。所…...
学习Android的第二十二天
目录 Android ContextMenu 上下文菜单 ContextMenu 范例 参考文档 Android SubMenu 子菜单 范例 参考文档 Android PopupMenu 弹出菜单 范例 参考文档 Android ContextMenu 上下文菜单 在Android开发中,ContextMenu(上下文菜单)为…...
JavaScript——流程控制(程序结构)
JavaScript——流程控制(程序结构) 流程控制就是来控制我们的代码按照什么结构顺序来执行。更倾向于一种思想结构。 流程控制分为三大结构:顺序结构、分支结构、循环结构 1、顺序结构 代码从上往下依次执行,从A到B执行&#x…...
如何用ChatGPT+GEE+ENVI+Python进行高光谱,多光谱成像遥感数据处理?
原文链接:如何用ChatGPTGEEENVIPython进行高光谱,多光谱成像遥感数据处理? 第一:遥感科学 从摄影侦察到卫星图像 遥感的基本原理 遥感的典型应用 第二:ChatGPT ChatGPT可以做什么? ChatGPT演示使用 …...
AIGC工具( 7个 )
人工智能技术有好的一方面,又不好的地方,要区别对待,吸取精华,去其糟粕。目前市场上有很多AI大模型,可以支持聊天,写文稿,创作等,部分可以生成图片,以下是7个很不错的免费…...
学习Java的第一天
一、Java简介 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。 后来 Sun 公司被 Oracle (甲骨文)公司收购,Jav…...
【设计模式】工厂模式与抽象工厂模式
工厂方法 以图书馆管理系统为例,需要API提供查询不同专业分类的书目列表,一般实现, class LibraryManager { public:LibraryManager() {}//按专业分类查询BookList Query(Type type) {if(type TA) {return ...;} else if (type TB) {} el…...
使用plasmo框架开发浏览器插件,注入contents脚本和给页面添加UI组件
plasmo:GitHub - PlasmoHQ/plasmo: 🧩 The Browser Extension Framework plasmo是一个开发浏览器插件的框架,支持使用react和vue等技术,而且不用手动管理manifest.json文件,框架会根据你在框架中的使用,自…...
python并发 惰性处理大型数据集
惰性计算是一种编程策略,它使得程序在何时执行计算的决定推迟到需要结果时才进行。这种策略的好处在于,它允许程序处理大规模数据或者需要大量计算的任务时节省内存和计算资源。 举例来说,当我们调用 Python 中的 range() 函数时,…...
Docker将本地的镜像上传到私有仓库
使用register镜像创建私有仓库 [rootopenEuler-node1 ~]# docker run --restartalways -d -p 5000:5000 -v /opt/data/regostry:/var/lib/registry registry:2[rootopenEuler-node1 ~]# docker images REPOSITORY TAG IMAGE…...
[LeetBook]【学习日记】有效数字——状态机
题目 有效数字 有效数字(按顺序)可以分成以下几个部分: 若干空格一个小数或者整数(可选)一个’e’或’E’,后面跟着一个整数若干空格 小数(按顺序)可以分成以下几个部分:…...
学习目标2024
技术: 什么是 Nacos apifox 业务: 域统一...
引入js,刷新清除缓存
一、这种会让所有的css/js资源重新加载 <meta http-equiv"pragram" content"no-cache"> <meta http-equiv"cache-control" content"no-cache, no-store, must-revalidate">二、加时间戳 每次引入,后面版本号都…...
【VSCODE修改代码行间距】解决方案
在我们编码的过程中,由于显示字体和显示器的不同,会需要调整行间距,在vscode默认的选项中没有看到设定行间距的选项,不过,可以手动修改配置档达到目的。 1.打开设置 2.打开配置档,手动进行设定 3.在选项中添…...
lvs+keepalive
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP) VRRP能够在不改变组网的情况下,将多台路由器虚拟成一个虚拟路由器,通过配置虚拟路由器的IP地址为默认网关,实现网关的备份。 协议版本: VRRPv2(常用&…...
用spark读取及存储数据
文章目录 读取数据存储数据 读取数据 data spark.sql("""select * from temp.tables""") data.show(3)# 转成pandas方式 # df data.toPandas() # df.head(3)存储数据 table "temp.new_tables" data.write.format("hive"…...
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案
Video2X AI视频增强实用指南:零基础掌握高效画质提升解决方案 【免费下载链接】video2x A lossless video/GIF/image upscaler achieved with waifu2x, Anime4K, SRMD and RealSR. Started in Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Tr…...
Spring_couplet_generation 从零开始环境配置:Windows系统下的Python与CUDA安装
Spring_couplet_generation 从零开始环境配置:Windows系统下的Python与CUDA安装 你是不是也遇到过这种情况?看到别人用AI模型生成对联、写诗,觉得特别酷,自己也想动手试试。结果第一步——搭环境,就被卡住了。网上教程…...
Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压(AP)...
Comsol模拟混凝土中水分传递 低气压下水分转移引起的水泥浆龄期微观结构变化 低气压(AP)会影响混凝土中的水分传递,进而影响其微观结构和体积特性,但对其热力学机制却知之甚少 可文献复现 水泥基材料内部的水分运动会直接改变孔隙…...
别再为GEO数据注释发愁了!三种方法(TXT/Soft/R包)保姆级代码实战
GEO数据注释实战指南:TXT/Soft/R包三种方法全解析 刚接触生物信息学的研究者常常会在GEO数据分析的第一步就卡壳——面对五花八门的注释文件格式,如何准确高效地将探针ID转换为基因Symbol?这个问题看似简单,实则暗藏玄机。我曾见过…...
遇到复杂车线桥耦合分析总被建模效率卡脖子?试试Simpack+Abaqus/ANSYS这套组合拳,咱们直接上干货聊聊那些提效黑科技
simpack abaqus ansys车线桥耦合高效建模分析工具 1.快速生成非线性柔性轨节点处mark 2.桥梁纵向轨底处的对应的mark及坐标 3.快速建立力元并设置preload方向 4.免安装运行环境点击exe输入 5.基于ansys或者abaqus和simpack联合仿真的5跨、3跨简支梁车线桥耦合分析实例轨节点标记…...
从草图到文档:我用这5个Miro/PlantUML模板,高效搞定团队架构设计评审
从草图到文档:5个高效架构设计模板与团队协作实战指南 在敏捷开发环境中,架构设计往往陷入两难困境——既要快速响应需求变化,又要保证设计文档的准确性与可维护性。Tech Lead们经常面临这样的场景:在白板前与团队激情讨论出的架构…...
保姆级教程:在mmdetection v2.x上,用SSD300训练自定义VOC数据集(附完整配置文件修改清单)
从零到一:基于mmdetection的SSD300自定义VOC数据集训练全流程实战 当第一次接触mmdetection框架时,面对复杂的配置文件体系和各种_base_目录,很多开发者都会感到无从下手。本文将从一个实践者的角度,手把手带你完成从数据集准备到…...
一个普通程序员转型AI的崩溃日记:我做了一个“没用”的系统救了他
一位Java程序员在转型AI时遭遇严重崩溃,面对AI代码生成的失控感和同行成功的压力,同时因学习心理学而无法再通过"压榨自己"换取成功。在最痛苦之际,他创建了名为"LifeGame"的自我安抚系统,将困扰转化为游戏任…...
小迪安全第9天:算法逆向与加密解密基础
一、加密算法分类与核心特征1.1 三大加密类型对比表格类型代表算法核心特点解密条件成功率单向散列加密MD5、SHA、MAC、CRC不可逆、固定输出、碰撞破解只需密文依赖明文复杂度对称加密AES、DES、3DES加解密用同一密钥、速度快密文密钥模式偏移量99.9%非对称加密RSA、SSL、PKCS公…...
别再死记硬背了!用“状态集合并”和“划分法”图解DFA最小化,轻松搞定编译原理作业
图解DFA最小化:用状态集合并与划分法告别死记硬背 当你第一次翻开《编译原理》教材,看到"NFA转DFA"和"DFA最小化"这两个概念时,是不是感觉像在解一道没有提示的数学证明题?那些抽象的状态转换图和复杂的算法步…...
