uImage的制作过程详解

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uImage的制作过程详解相关的知识,希望对你有一定的参考价值。

1、uImage镜像介绍

参考博客:《vmlinuz/vmlinux、Image、zImage与uImage的区别》

2、uImage镜像的制作

2.1、mkimage工具介绍

参考博客:《uImage的制作工具mkimage详解(源码编译、使用方法、添加的头解析、uImage的制作)》

2.2、内核源码中编译uImage

//下面是摘抄的内核编译uImage的打印
······
/usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-mkimage -A arm -O linux -T kernel -C none -a 0x30008000 -e 0x30008000 -n Linux-2.6.35.7 -d arch/arm/boot/zImage arch/arm/boot/uImage
Image Name:   Linux-2.6.35.7
Created:      Sun Dec  4 20:31:24 2022
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    3722092 Bytes = 3634.86 kB = 3.55 MB
Load Address: 30008000
Entry Point:  30008000
  Image arch/arm/boot/uImage is ready

(1)mkimage可以使用uboot下的工具,有的编译链有自带了mkimage工具,两者都是可以的;
(2)内核源码中能够编译uImage,执行编译指令:make uImage;
(3)编译uImage的脚步是kernel/scripts/mkuboot.sh,会被主Makefile调用;

3、uImage和zImage的比较

(1)uImage比zImage多64字节的头,这是mkimage工具添加上去的,上面的64字节的头信息需要结合image_header_t结构体和生成uImage时调用mkimage的参数进行解读(调用mkimage的参数请看2.2节中摘抄的打印);
(2)1-4字节:0x27051956是mkimage添加64字节头的魔数,是固定不变的;
(3)17-20字节:0x30008000是内核镜像的内存加载地址;
(4)21-24字节:0x30008000是内核镜像的入口地址;
(5)33-64字节:是镜像的名字,在上面的内核镜像是"Linux-2.6.35.7",表示内核的版本;

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转

以上是关于uImage的制作过程详解的主要内容,如果未能解决你的问题,请参考以下文章

内核的解压缩过程详解

嵌入式开发——uboot如何启动内核(以zImage详解)

vmlinuz/vmlinuxImagezImage与uImage的区别

自定义 UITableViewCell 中的 UIImageView 在单击时调整大小

uImage是什么

vmlinux Image, zImage uImage 的区别