uboot源代码的tools 目录下有mkimage工具,这个工具可以用来制作不压缩或者压缩的多种可启动镜像文件。
参数说明:
-A 指定CPU的体系结构:
取值 表示的体系结构
alpha Alpha
arm ARM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O 指定操作系统类型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
mkimage在制作镜像文件的时候,是在原来的可执行镜像文件的前面加上一个0x40字节的头,记录参数所指定的信息,这样uboot才能识别这个镜像文件的CPU体系结构的、操作系统、加载内存的位置, 入口地址等。
使用mkimage命令前,最好将mkimage 命令复制到 /usr/bin 目录下。这样使用的时候不需要mkimage 命令的路径,更为方便。
一、查看mkimage 参数
[root@codeMonkey]# mkimage
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' // 用于指定CPU类型,比如ARM
-O ==> set operating system to 'os' // 用于指定操作系统,比如Linux
-T ==> set image type to 'type' // 用于指定image类型,比如Kernel
-C ==> set compression type 'comp' // 指定压缩类型
-a ==> set load address to 'addr' (hex) // 指定image的加载地址
-e ==> set entry point to 'ep' (hex) // 指定内核的入口地址,一般是image的载入地址+0x40(信息头的大小)
-n ==> set image name to 'name' // image在头结构中的命名
-d ==> use image data from 'datafile' // 无头信息的image文件名
-x ==> set XIP (execute in place) // 设置执行位置
参数说明:
-A 指定CPU的体系结构:
取值 表示的体系结构
alpha Alpha
arm ARM
x86 Intel x86
ia64 IA64
mips MIPS
mips64 MIPS 64 Bit
ppc PowerPC
s390 IBM S390
sh SuperH
sparc SPARC
sparc64 SPARC 64 Bit
m68k MC68000
-O 指定操作系统类型,可以取以下值:
openbsd、netbsd、freebsd、4_4bsd、linux、svr4、esix、solaris、irix、sco、dell、ncr、lynxos、vxworks、psos、qnx、u-boot、rtems、artos
-T 指定镜像类型,可以取以下值:
standalone、kernel、ramdisk、multi、firmware、script、filesystem
-C 指定镜像压缩方式,可以取以下值:
none 不压缩
gzip 用gzip的压缩方式
bzip2 用bzip2的压缩方式
-a 指定镜像在内存中的加载地址,镜像下载到内存中时,要按照用mkimage制作镜像时,这个参数所指定的地址值来下载。
-e 指定镜像运行的入口点地址,这个地址就是-a参数指定的值加上0x40。(因为前面有个mkimage添加的0x40个字节的头)
-n 指定镜像名 。
-d 指定制作镜像的源文件 。
二、制作uImage 镜像文件
使用mkimage命令制作uImage 镜像文件
[root@codeMonkey boot]# mkimage -n 'linux-2.6.32' -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008040 -d zImage uImage
Image Name: linux-2.6.32
Created: Sat May 13 14:40:57 2017
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 5697876 Bytes = 5564.33 kB = 5.43 MB
Load Address: 30008000
Entry Point: 30008040
关于各个参数的使用,可以根据上面的实际命令再进行详细分析。
注意:执行这条命令的时候,要到arch/arm/boot 目录下执行!最终会在arch/arm/boot 目录下生成uImage镜像文件。