⼏种linux内核Image⽂件的区别
内核编译(make)之后会⽣成两个⽂件,⼀个Image,⼀个zImage,其中Image为内核映像⽂件,⽽zImage为内核的⼀种映像压缩⽂
件,Image⼤约为4M,⽽zImage不到2M。
那么uImage⼜是什么的?
linux内核文件放在哪它是uboot专⽤的映像⽂件,它是在zImage之前加上⼀个长度为64字节的“头”,说明这个内核的版本、加载位置、⽣成时间、⼤⼩等信息;其0x40之后与zImage没区别。
如何⽣成uImage⽂件?
⾸先在uboot的/tools⽬录下寻mkimage⽂件,把其copy到系统/usr/local/bin⽬录下,这样就完成制作⼯具。然后在内核⽬录下运⾏make uImage,如果成功,便可以在arch/arm/boot/⽬录下发现uImage⽂件,其⼤⼩⽐zImage多64个字节。
其实就是⼀个⾃动跟⼿动的区别,有了uImage头部的描述,u-boot就知道对应Image的信息,如果没有头部则需要⾃⼰⼿动去搞那些参数。
U-boot的U是“通⽤”的意思。
zImage是ARM Linux常⽤的⼀种压缩映像⽂件,uImage是U-boot专⽤的映像⽂件,它是在zImage之前加上⼀个长度为0x40的“头”,说明这个映像⽂件的类型、加载位置、⽣成时间、⼤⼩等信息。换句话说,如果直接从uImage的0x40位置开始执⾏,zImage和uImage没有任何区别。另外,Linux2.4内核不⽀持uImage,Linux2.6内核加⼊了很多对嵌⼊式系统的⽀持,但是uImage的⽣成也需要设置,这个以后我会介绍。
⼏种linux内核⽂件的区别:
1、vmlinux 编译出来的最原始的内核⽂件,未压缩。
2、zImage 是vmlinux经过gzip压缩后的⽂件。
3、bzImage bz表⽰“big zImage”,不是⽤bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第⼀个640K),bzImage解压缩内核到⾼端内存(1M以上)。如果内核⽐较⼩,那么采⽤zImage或bzImage都⾏,如果⽐较⼤应该⽤bzImage。
4、uImage U-boot专⽤的映像⽂件,它是在zImage之前加上⼀个长度为0x40的tag。
5、vmlinuz 是bzImage/zImage⽂件的拷贝或指向bzImage/zImage的链接。
6、initrd 是“initial ramdisk”的简写。⼀般被⽤来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态
⼀般情况下都在⽣成 vmlinux 后,再对内核进⾏压缩成为 zImage,压缩的⽬录是
kernel/arch/arm/boot。
下载到 flash 中的是压缩后的 zImage ⽂件, zImage 是由压缩后的 vmlinux 和解压缩程序组成,如下图所⽰:
查看 2410 的 datasheet ,发现内存映射的基址是 0x3000 0000 ,那么 0x30008000 ⼜是如何来的呢?
在内核⽂档 kernel/Document/arm/Booting ⽂件中有:
Calling the kernel image
Existing boot loaders: MANDATORY
New boot loaders: MANDATORY
There are two options for calling the kernel zImage. If the zImage is stored in flash, and is linked correctly to be run
from flash, then it is legal for the boot loader to call the zImage in flash directly.
The zImage may also be placed in system RAM (at any location) and called there. Note that the kernel uses 16K of
RAM below the image to store page tables. The recommended placement is 32KiB into RAM.
看来在 image 下⾯⽤了 32K(0x8000)的空间存放内核页表,
0x30008000 就是 2410 的内核在 RAM 中的启动地址,这个地址就是这么来的。
⽤U-Boot启动Linux内核
1、下载u-boot.bin到SDRAM的0x30008000处
tftp 0x30008000 uImage
2、启动内核
bootm 0x30008000
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论