Linux镜像打包-解包-使用
什么是FITFIT(Flattened Image Tree)是uboot的一种新的镜像打包方案它是由uboot负责解析的生成的文件名是xxx.itb在一个itb镜像中我们可以打包进去多个内核、设备树、ramdisk的镜像然后按照实际需求进行组合使用。他通过its文件进行配置然后通过内核编译出来的mkimage工具进行编译mkimage -f xxx.its abc.itb。FIT不仅能打包内核镜像也能打包二进制文件支持的格式可以通过mkimage -T list指令列出。下面是内核、设备树、ramdisk打包的一个示例 abc.its注打包成FIT格式的内核设备树在uboot中通过bootm启动bootm启动之前要先将fit镜像给load进去fatload或者ext4load或者load/dts-v1/; / { description Various kernels, ramdisks and FDT blobs; #address-cells 1; images { kernel-1 { description vanilla-2.6.23; data /incbin/(./vmlinux.bin.gz); type kernel; //类型是kernel arch arm; os linux; compression gzip; load 0x00200000; //U-Boot 把这个 image 解压/加载到哪个内存地址 entry 0x00200000; //CPU 跳转执行的地址 //mkimage 会计算hash值存在FIT中u-boot启动是会计算校验和是否一致 hash-1 { algo md5; }; hash-2 { algo sha1; }; }; kernel-2 { description 2.6.23-denx; data /incbin/(./2.6.23-denx.bin.gz); type kernel; arch arm; os linux; compression gzip; load 0x00200000; entry 0x00200000; hash-1 { algo sha1; }; }; kernel-3 { description 2.4.25-denx; data /incbin/(./2.4.25-denx.bin.gz); type kernel; arch arm; os linux; compression gzip; load 0x00200000; entry 0x00200000; hash-1 { algo md5; }; }; ramdisk-1 { description eldk-4.2-ramdisk; data /incbin/(./eldk-4.2-ramdisk); type ramdisk; arch arm; os linux; compression gzip; load 0x0a200000; hash-1 { algo sha1; }; }; ramdisk-2 { description eldk-3.1-ramdisk; data /incbin/(./eldk-3.1-ramdisk); type ramdisk; //类型是ramdisk arch arm; os linux; compression gzip; load 0x0a200000; hash-1 { algo crc32; }; }; fdt-1 { description tqm5200-fdt; data /incbin/(./tqm5200.dtb); type flat_dt; //类型是设备树 arch arm; compression none; hash-1 { algo crc32; }; }; fdt-2 { description tqm5200s-fdt; data /incbin/(./tqm5200s.dtb); type flat_dt; arch arm; compression none; load 00700000; hash-1 { algo sha1; }; }; }; //uboot 启动时可以选择不同的配置去启动如 //fatload 0:1 0x43000000 abc.itb //bootm 0x43000000#config-1 configurations { default config-1; config-1 { description tqm5200 vanilla-2.6.23 configuration; kernel kernel-1; ramdisk ramdisk-1; fdt fdt-1; }; config-2 { description tqm5200s denx-2.6.23 configuration; kernel kernel-2; ramdisk ramdisk-1; fdt fdt-2; }; config-3 { description tqm5200s denx-2.4.25 configuration; kernel kernel-3; ramdisk ramdisk-2; }; }; };打包二进制文件示例 firmware.its/dts-v1/; / { description MyFirmware; images { myfw { description My Firmware Image; data /incbin/(/home/cmb/smios/uboot_TYsys/u-boot-2023.10/examples/standalone/hello_world.bin); type firmware; //类型是固件 arch arm; os linux; compression none; load 0x80007800; entry 0x80007800; }; }; };镜像打包、解包工具打包解包工具目前用的比较好的有 mkimage、dumpimage、binwalk 、cpiomkimage dumpimage - U-Boot自带的打包、解包工具使用mkimage打包出来的FIT镜像就可以使用dumpimage进行解包用法dumpimage -l image.itb作用解析 U-Boot image header显示镜像信息dumpimage -T flat_dt -p 0 -o kernel.gz image.itb作用从FIT镜像中提取第0个image,输出到kernel.gz,格式是FIT image格式其实看下FIT和配置文件its,他就是设备树的写法然后打包出来的FIT镜像的保存方式其实跟dtb是一样的所以还可以通过 “dtc -i dtb -o dts image.itb” 把FIT镜像的配置文件its给解析出来。binwalk - 基于python的解包工具binwalk 是 嵌入式固件分析中非常常用的工具主要用来 扫描和自动提取固件中的各种文件系统、压缩数据、内核、DTB、uImage、squashfs、cpio 等。安装sudo apt install binwalk用法binwalk firmware.bin作用扫描固件列含义DECIMAL偏移十进制HEXADECIMAL偏移十六进制DESCRIPTION识别到的格式binwalk -e firmware.bin作用自动提取运行后生成目录_firmware.bin.extracted/binwalk -Me firmware.bin作用递归提取会把提取出来的镜像继续解包cpio - ramdisk 镜像打包解包工具cpio是Linux的一种归档工具和tar类似常用语ramdisk的打包和解包。用法cpio -idmv ramdisk.cpio作用从ramdisk.cpio读取归档内容并解压到当前目录注意是使用 “ ramdisk.cpio” 因为cpio默认是从stdin读归档数据的。find . | cpio -o -H newc ramdisk.cpio作用将当前目录下的所有文件打包成ramdisk.cpiouboot 中的load指令在U-Boot中load指令就是将EMMC中的数据读到DDR中然后其他指令才能去执行。load有好几个指令可以分为两大类原始块读取按扇区读和文件系统读取按文件名读load 指令语法load dev:partition例子load mmc 0:1 0x43000000 image.itb含义从mmc0的第1分区读取image.itb文件到0x43000000地址load会自动识别文件系统FAT、EXT2、EXT4,所以等价于fatload、ext4loadfatload 指令语法fatload dev:partition例子fatload mmc 0:1 0x43000000 image.itb还可以支持USB 设备如fatload usb 0:1 0x43000000 a.pngext4load 指令语法ext4load dev:partition filename例如ext4load mmc 0:2 0x42000000 /boot/image.itbext2load 指令ext4向下兼容ext2,所以现在基本都用ext4load.tftpboot 指令从TFTP服务器下载文件语法tftpboot filename例如 tftpboot 0x43000000 image.itbmmc read 原始扇区读取这个指令不是按照文件名读取而是按照扇区读取。语法 mmc read例如 mmc read 0x42000000 0x8000 0x200从mmc的第0x8000扇区开始读取0x200个扇区保存到DDR的0x42000000地址nand read(NAND Flash)如果设备是NAND Flash则使用nand read指令语法nand read例如nand read 0x43000000 0x200000 0x800000从NAND Flash的第0x200000字节开始读取0x800000字节保存到DDR的0x43000000地址sf read (SPI NOR Flash)如果设备是SPI NOR Flash则使用sf read指令语法sf read例如sf read 0x43000000 0x200000 0x800000loadx/loady/loadb通过串口传输文件PC → 串口 → U-Boot → RAMloadx语法loadx例如loadx 0x43000000意思是等待PC通过XMODEM发送文件接收后存到0x43000000PC 端发送文件Linux下sx file.bin /dev/ttyUSB0 /dev/ttyUSB0loady语法loady和loadx类似不过他用YMODEM协议传输速度比XMODEM快PC 端发送文件Linux下sb file.bin /dev/ttyUSB0 /dev/ttyUSB0loadb语法loadbPC 端发送文件Linux下kermit 然后 send file.bin优点是可靠支持错误恢复适合长距离通信但是使用复杂用的比较少调试的时候使用这个就不用烧Flash了直接通过串口下载kernel到RAM命令协议特点loadxXMODEM最简单、最常见loadyYMODEM支持文件名、批量loadbKermit兼容性好常见配套指令查看文件fatls mmc 0:1ext4ls mmc 0:2 /查看分区mmc part查看设备mmc listuboot中分区的格式化当我们使用fatloada/ext4load从EMMC分区中读文件的时候要求对应的mmc是带格式化的分区的这是怎么实现的呢其实uboot仅仅知道EMMC的分区是怎么分的比如说第几个分区的起始位置是多少大小是多少他是不知道这个里面是什么格式的决定分区格式的其实是我们烧录进去的镜像比如说我想在LCD屏上画一个开机界面然后把图片放到了EMMC的分区4中使用fatload加载图片这要怎么做呢首先创建一个FAT格式的镜像里面保存该开机图片如# 制作FAT镜像ddif/dev/zerooffat.imgbs1Mcount5mkfs.vfat fat.imgsudomount-oloop ./fat.img ./mntcdmntsudomkdirlogosudocp/home/cmb2204/github/smios/baremetal/uboot-ubl/logo/ST75161/black_cell.bmp ./sudoumount./mnt然后将fat.img烧录到EMMC的分区4中在uboot中加载图片# uboot 中加载图片fatload mmc0:4 0x12340000 logo/black_cell.bmp# 使用bmp指令显示图片bmp info 0x12340000bmp display 0x12340000

相关新闻

Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析

Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net Flutter 三方库 image_compare 的鸿蒙化适配指南 - 实现毫秒级图像相似度评估、支持像素级对比与余弦相似度算法分析 前言 在进行 Flutter for OpenHarmony 的视觉类应用(如相…

2026/7/2 21:40:11 阅读更多 →
AI时代开发者的身份重构:决策栈的价值

AI时代开发者的身份重构:决策栈的价值

上周,我填写了一份托斯卡纳修道院读书会的注册表格。学者们正在编撰一本关于伊万伊里奇思想遗产的著作。标准的字段——姓名、所属机构、国家。我填写了"网络国家"。 提交前我盯着它坐了十分钟。诚实的回答——“我不知道了”——却填不进这个字段。 同样…

2026/7/2 21:40:32 阅读更多 →
构建标准化ICT运维体系 解决企业网络运行不稳定问题

构建标准化ICT运维体系 解决企业网络运行不稳定问题

企业网络运行稳定性提升方案 摘要 为企业IT部门、信息化负责人及运维团队提供可落地的标准化运维路径,通过可视化运行监控系统,支撑系统规划、标准化交付与平台化运维,实现高确定性的ICT基础设施管理,降低网络异常发生率&#x…

2026/7/4 19:34:18 阅读更多 →

最新新闻

从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

从TT100K到YOLO:一份完整的交通标志数据集转换与实战指南

1. 为什么需要转换TT100K数据集格式第一次接触TT100K数据集时,我完全被它复杂的目录结构和标注格式搞懵了。这个由清华大学和腾讯联合发布的交通标志数据集,包含了10万张图片和3万多个标注实例,但它的JSON标注格式和YOLO完全不兼容。当时为了…

2026/7/4 23:19:08 阅读更多 →
数据科学转行实战路径:问题驱动的认知构建法

数据科学转行实战路径:问题驱动的认知构建法

1. 这不是一张“通关地图”,而是一份我带过37个转行学员后画出的实战路标 数据科学学习路径——这个词听起来像一份标准化的课程表,但实际操作中,它更接近于在浓雾里徒步时手绘的地形草图:有标记、有涂改、有折痕,甚至…

2026/7/4 23:19:08 阅读更多 →
2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

2026普通人AI使用指南:看懂参数、混合思考与国产模型三大核心

1. 这不是科幻预告片,是普通人下周就该打开手机查的“技术天气预报”2026年4月这个时间点,听起来像科幻小说里随手写的年份,但如果你最近刷过几条国产大模型发布会的短视频,或者留意过身边朋友突然开始用“文心一言新版本”写周报…

2026/7/4 23:17:06 阅读更多 →
Let‘s Encrypt泛域名证书申请与自动化续期实战指南

Let‘s Encrypt泛域名证书申请与自动化续期实战指南

1. 项目概述与核心价值最近在折腾自己的个人博客和几个内部服务,域名下挂了好几个子域名,每次给每个子域名单独申请SSL证书,不仅麻烦,续期更是让人头大。直到我开始用Let‘s Encrypt的泛域名证书,配合自动化续期脚本&a…

2026/7/4 23:17:06 阅读更多 →
多维聚合实战:超越GROUP BY的OLAP数据操作指南

多维聚合实战:超越GROUP BY的OLAP数据操作指南

1. 项目概述:多维聚合中的数据操作,远不止GROUP BY那么简单“Part 20: Data Manipulation in Multi-Dimensional Aggregation”这个标题乍看像教科书某章编号,但实际踩中了数据分析和商业智能工程中最常被低估、最易出错、也最具业务价值的一…

2026/7/4 23:17:06 阅读更多 →
AMD ROCm 7.1.1正式支持Windows:本地AI电影制作全栈落地

AMD ROCm 7.1.1正式支持Windows:本地AI电影制作全栈落地

1. 项目概述:当本地AI电影制作从“概念图”变成“开机键”2025年11月26日,我盯着终端里一行绿色的True输出,手有点抖。不是因为咖啡喝多了,而是因为torch.cuda.is_available()终于没再报错——它真真切切地返回了True,…

2026/7/4 23:15:05 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻