先说明一点,以下是我所从事工作的笔记,俗话说好记性不如烂笔头,在此分享给大家,请多多提意见。
开门见山,内核成功编译后生成的是ELF格式的可执行文件vmlinux,其大小为5M左右,st平台的uboot不能加载elf格式的内核镜像(有些平台是可以加载的),而它能加载的格式必须是经过以下步后所产生的内核格式,步骤如下:
1、使用sh4-linux-objcopy工具,把vmlinux转化成二进制格式
sh4-linux-objcopy -O binary vmlinux vmlinux.bin
2、使用gzip压缩工具,把二进制格式的vmlinux.bin进行压缩
gzip --best --force vmlinux.bin
3、使用mkimage工具给image添加64字节长的头信息
mkimage -A sh -O linux -T kernel -C gzip -a 0x80800000 -e 0x80801000 -n "Linux 2.6" -d vmlinux.bin.gz vmlinux.bin.gz.ub
4、贴上有关struct header的长64字节的头信息,来自uboot:include/image.h头文件
/*
* Operating System Codes
*/
#define IH_OS_INVALID 0 /* Invalid OS */
#define IH_OS_OPENBSD 1 /* OpenBSD */
#define IH_OS_NETBSD 2 /* NetBSD */
#define IH_OS_FREEBSD 3 /* FreeBSD */
#define IH_OS_4_4BSD 4 /* 4.4