作者:LiangChao | 来源:互联网 | 2023-09-03 23:54
篇首语:本文由编程笔记#小编为大家整理,主要介绍了uImage的制作工具mkimage详解(源码编译使用方法添加的头解析uImage的制作)相关的知识,希望对你有一定的参考价值。
篇首语:本文由编程笔记#小编为大家整理,主要介绍了uImage的制作工具mkimage详解(源码编译使用方法添加的头解析uImage的制作)相关的知识,希望对你有一定的参考价值。
1、mkimage工具的源码
(1)mkimage是uboot下面的一个工具,用来将zImage制作成uImage,制作内核启动镜像(给zImage镜像添加64字节的头信息成uImage);
(2)mkimage的源码在"uboot/tool"目录下,在编译uboot时默认会编译出mkimage工具;
2、mkimage工具的使用方法
root@daizhixin-virtual-machine:
Usage: ./mkimage -l image
-l ==> list image header information
./mkimage [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image
-A ==> set architecture to 'arch'
-O ==> set operating system to 'os'
-T ==> set image type to 'type'
-C ==> set compression type 'comp'
-a ==> set load address to 'addr' (hex)
-e ==> set entry point to 'ep' (hex)
-n ==> set image name to 'name'
-d ==> use image data from 'datafile'
-x ==> set XIP (execute in place)
./mkimage [-D dtc_options] -f fit-image.its fit-image
| |
---|
-A | 指定CPU的架构,比如:arm或者x86 |
-O | 指定操作系统的类型,比如:linux |
-T | 指定镜像的类型,比如:standalone、kernel、ramdisk、multi、firmware、script、filesystem |
-C | 指定压缩的方式,比如:none 不压缩、gzip 用gzip的压缩方式、bzip2 用bzip2的压缩方式 |
-a | 指定镜像在内存中的加载地址 |
-e | 指定镜像运行的入口点地址 |
-n | 指定镜像的名字 |
-d | 指定制作镜像的源文件 |
-x | 镜像是否可以片上执行 |
3、mkimage添加的64字节头解析
#define IH_OS_INVALID 0
#define IH_OS_OPENBSD 1
#define IH_OS_NETBSD 2
#define IH_OS_FREEBSD 3
#define IH_OS_4_4BSD 4
#define IH_OS_LINUX 5
#define IH_OS_SVR4 6
#define IH_OS_ESIX 7
#define IH_OS_SOLARIS 8
#define IH_OS_IRIX 9
#define IH_OS_SCO 10
#define IH_OS_DELL 11
#define IH_OS_NCR 12
#define IH_OS_LYNXOS 13
#define IH_OS_VXWORKS 14
#define IH_OS_PSOS 15
#define IH_OS_QNX 16
#define IH_OS_U_BOOT 17
#define IH_OS_RTEMS 18
#define IH_OS_ARTOS 19
#define IH_OS_UNITY 20
#define IH_ARCH_INVALID 0
#define IH_ARCH_ALPHA 1
#define IH_ARCH_ARM 2
#define IH_ARCH_I386 3
#define IH_ARCH_IA64 4
#define IH_ARCH_MIPS 5
#define IH_ARCH_MIPS64 6
#define IH_ARCH_PPC 7
#define IH_ARCH_S390 8
#define IH_ARCH_SH 9
#define IH_ARCH_SPARC 10
#define IH_ARCH_SPARC64 11
#define IH_ARCH_M68K 12
#define IH_ARCH_Nios 13
#define IH_ARCH_MICROBLAZE 14
#define IH_ARCH_NIOS2 15
#define IH_ARCH_BLACKFIN 16
#define IH_ARCH_AVR32 17
#define IH_ARCH_ST200 18
#define IH_TYPE_STANDALONE 1
#define IH_TYPE_KERNEL 2
#define IH_TYPE_RAMDISK 3
#define IH_TYPE_MULTI 4
#define IH_TYPE_FIRMWARE 5
#define IH_TYPE_SCRIPT 6
#define IH_TYPE_FILESYSTEM 7
#define IH_TYPE_FLATDT 8
#define IH_COMP_NONE 0
#define IH_COMP_GZIP 1
#define IH_COMP_BZIP2 2
#define IH_MAGIC 0x27051956
#define IH_NMLEN 32
typedef struct image_header
uint32_t ih_magic;
uint32_t ih_hcrc;
uint32_t ih_time;
uint32_t ih_size;
uint32_t ih_load;
uint32_t ih_ep;
uint32_t ih_dcrc;
uint8_t ih_os;
uint8_t ih_arch;
uint8_t ih_type;
uint8_t ih_comp;
uint8_t ih_name[IH_NMLEN];
image_header_t;
image_header_t结构体定义在uboot源码的image.h中,和mkimage工具的使用参数是对应关系,mkimage工具就是构建image_header_t这样一个64字节头;
4、uImage和zIMage的比较
参考博客:《uImage的制作过程详解》;
推荐
给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转