OpenWrt固件结构分析(uImage格式)

OpenWrt项目是一个针对嵌入式设备的Linux操作系统。OpenWrt不是一个单一且不可更改的固件,而是提供了具有软件包管理功能的完全可写的文件系统。这使您可以从供应商提供的应用范围和配置中解脱出来,并且让您通过使用适配任何应用的软件包来定制设备。对于开发人员来说,OpenWrt是一个无需围绕它构建完整固件就能开发应用程序的框架; 对于普通用户来说,这意味着拥有了完全定制的能力,能以意想不到的方式使用该设备。

OpenWrt固件采用的是uboot形式的固件,称为u-boot legacy uImage。

在浏览器中输入官网地址:https://openwrt.org/

选择一个型号固件进行下载SYSUPGRADE版本的映像:

使用本站的固件分析工具分析固件结构:

解析后结果如下:

序号偏移说明
10x0-0x3F固件头
20x40-0x1E613A压缩的内核映像 kernel
30x1E613B-0x1E613B文件系统映像 rootfs

其中固件结构的第一部分uImage( 0x0-0x3F )是比较关键的,下面我们通过本站固件分析工具的结果和16进制工具打开固件分析了解其具体结构:

序号偏移说明
10x00-0x03标识符,标记此为OpenWrt固件 \x27\x05\x19\x56
20x04-0x07固件校验值 CRC,值为0xB2E38022
30x08-0x0b时间戳,值为0x612EAB18
40x0c-0x0fkernel映像长度,值为0x1E60FB
50x10-0x13kernel加载点地址,值为0x80000000
60x14-0x17kernel入口点地址,值为0x80000000
70x18-0x1bkernel映像校验值 CRC,值为0x2283DF27
80x1c系统: Linux
90x1dCPU: MIPS
100x1e映像类型: OS Kernel Image
110x1f压缩类型: lzma
120x20-0x3f映像名称字符串

具体内容可以参考OpenWrt或Uboot源码。