uImage
linux内核经过编译后会生成一个ELF格式的可执行程序,叫vmlinux或vmlinuz,是原始的未经任何处理加工的原版内核ELF文件;嵌入式系统烧录的一般不是这个vmlinuz/vmlinux,而是要用objcopy工具制作成二进制格式,经过制作加工成烧录镜像的文件就叫Image(这个制作烧录镜像主要目的就是缩减大小,节省空间,删除了符号表之类的信息)。原则上Image就可以直接被烧录到Flash上进行启动执行(类似于u-boot.bin),但是实际上并不是这样。实际上linux的大牛们觉得Image还是太大了所以对Image进行了压缩,并且在image压缩后的文件的前端附加了一部分解压缩代码,构成了一个压缩格式的镜像就叫zImage。解压的时候,通过zImage镜像头部的解压缩代码进行自解压,然后执行解压出来的内核镜像。uboot为了启动linux内核,还发明了一种内核格式叫uImage。uImage是由uboot编译生成的工具mkimage(位于uboot代码的/tools),可以将zImage加工生成uImage。这个加工过程其实就是在zImage前面加上64字节的uImage的头信息。uImage 是老版本 uboot 专用的镜像文件,新的 uboot 已经支持了 zImage 启动!所以已经很少用到 uImage 了,除非你用的很古老的 uboot。
uImage有两种类型,Legacy-uImage和FIT-uImage ,这两个类型的格式是不一样的,因此,uboot从这两种uImage解析出kernel信息的方式也是不一样的。
在编译uboot完后,在/tools目录下生成mkimage文件,然后copy到系统/usr/local/bin目录下,这样就可以了。然后在内核目录下运行make uImage ARM=arm CROSS_COMPILE=arm-linux-,如果成功,就会在arch/arm/boot/目录下找到uImage文件。说明编译成功
生成uImage的工具mkimage由arch/arm/boot/Makefile中的MKIMAGE定义
MKIMAGE:=$(srctree)/scripts/mkuboot.sh
mkuboot.sh的作用是去找到是否存在”mkimage”,此工具是用来生成最后的uImage。
mkuboot.sh 首先检查toolchain是否拥有mkimage (使用-z来判空),如果没有,再检查系统中是否拥有mkimage;如果没有则报错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
2018-01-24 Qt error ------ incomplete type 'QApplication' used in nested name specifier