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等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转