linux内核镜像(linux的镜像有哪些)

Linux内核镜像格式

Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等。

格式的镜像是可引导的、未压缩、可压缩的内核镜像,vm代表Virtual Memory。它是通过用户编译内核源码得到的,实质上是elf格式的文件。vmlinuz则是vmlinux的压缩文件,一般是一个软链接。

指的是ELF(Executable and Linkable Format)格式的文件,它是UNIX实验室发布的一种应用程序二进制接口,扩展名为elf。在elf格式的文件中,包含除了二进制代码外的其他信息,如符号表等。

是由编译内核时通过命令"make zImage"或"make bzImage"创建的,是一种可执行的Linux内核,位于/boot/vmlinuz,通常是一个软链接。

格式的内核镜像经过objcopy处理,只包含二进制数据,不是elf格式,未经过压缩。

是GNU的一个工具程序,用于拷贝目标文件的内容到另一个目标文件中,可以将一种格式的目标文件转换成另一种格式的目标文件。通过使用binary作为输出目标(-o binary),可产生一个原始的二进制文件,抛弃了所有的符号和重定位信息,只保留二进制数据。

是ARM Linux常用的一种压缩镜像文件,由vmlinux经过objcopy处理,加上解压代码经gzip压缩而成,命令格式是#make zImage。这种格式的Linux镜像文件多存放在NAND上,适用于小内核的情况。

的格式与zImage类似,但采用不同的压缩算法,压缩率更高。它不仅是一个压缩文件,而且在文件的开头部分内嵌有解压缩代码。老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。

是uboot专用的镜像文件,是在zImage之前加上长度为0x40的头信息(tag),说明了镜像文件的类型、加载位置、生成时间、大小等信息。它在arch/arm/boot/目录下生成,大小比zImage多64个字节,可以与bootloader共存。

的Linux镜像文件多存放在NorFlash上,运行时不需要拷贝到内存SDRAM中,可以直接在NorFlash中运行。

在嵌入式Linux中,内核的启动过程分为两个阶段。第一阶段启动代码在arch/arm/kernel/head.S文件中,与体系结构相关,主要初始化ARM内核等。第二阶段启动代码在init目录下的main.c。当编译Linux内核源码时,生成可执行文件vmlinux,它经过objcopy处理,只包含二进制数据的内核代码,形成image镜像文件。image文件经过gzip压缩后,与解压程序文件一起链接生成压缩后的镜像文件compress/vmlinux,压缩比约为2:1。compress/vmlinux经过二进制化,最终生成镜像文件zImage。

【boot】Linux Kernel 镜像的生成以及加载

Linux Kernel镜像格式包括:vmlinux、Image、zImage、bzImage、uImage、xipImage。vmlinux是原始可引导且未压缩的内核文件,由用户编译得到,实质是 ELF格式。Image是经过objcopy处理的原始二进制数据内核代码,未压缩。zImage是经过gzip压缩的vmlinux加上解压代码,适用于NAND Flash。bzImage是使用不同压缩算法的压缩内核映像,压缩率更高,同样适用于NAND Flash。uImage是用于u-boot的镜像文件,比zImage多一个头部信息。xipImage则存放在NOR Flash中,直接运行无需复制到SDRAM。

内核镜像的产生过程包括:首先生成可执行的vmlinux文件;然后通过objcopy处理成Image,变小但未压缩;接着使用gzip压缩Image生成compress/vmlinux;最后再使用objcopy处理compress/vmlinux生成zImage,压缩比约为2:1。

Linux内核镜像的加载过程包括加载文件头、内存布局、分阶段加载内核镜像、实模式和保护模式下内核加载。实模式下加载boot/setup.bin,进行硬件初始化并跳转到main()函数开始执行。保护模式下加载boot/vmlinux.bin,解压缩并初始化页表,调用init/main.c:start_kernel()函数。

Linux内核镜像格式多样,根据硬件类型和存储设备选择合适的镜像格式进行加载。加载过程包括硬件初始化、内存布局设定、分阶段加载内核镜像,最后实模式和保护模式下执行内核。

使用make命令如“make zImage”可以生成zImage镜像,相关代码在arch/arm/Makefile中。

内核加载流程包含加载文件头和末尾的CRC校验码,以及在实模式和保护模式下分别执行boot/setup.bin和boot/vmlinux.bin。实模式下执行setup.bin进行硬件初始化,然后跳转到main()函数执行。保护模式下加载vmlinux.bin,解压缩后初始化页表,调用start_kernel()函数启动内核。

Linux下如何直接从硬盘启动Linux ISO镜像文件

通常Linux启动Linux ISO镜像都要现将文件刻录到光盘或从USB驱动启动,下面小编就给大家介绍下Linux下如何直接从硬盘启动Linux ISO文件,一起来学习下吧。

我们在Ubuntu 14.04上实施了该过程——Ubuntu及基于Ubuntu的Linux版本对此支持良好。其它Linux发行版上的工作原理也类似。

获取Linux ISO文件

这一密技需要你的硬盘驱动器上安装有Linux系统,你的计算机必须使用GRUB2启动加载器,这是大多数Linux系统的标准启动加载器。不好意思,你是不能使用Windows启动加载器来直接启动一个Linux ISO文件的。

下载你想要使用的ISO文件,并放到你的Linux分区中。GRUB2应该支持大多数Linux系统的。如果你想要在live环境中使用它们,而不想将它们安装到硬盘驱动器上,请确认你下载的是各个Linux ISO的“live CD”版本。很多基于Linux的可启动工具盘也应该可以工作。

检查ISO文件内容

你可能需要查看ISO文件的内部来知道那些特定的的文件在哪里。例如,你可以通过使用Ubuntu及其它基于GNOME的桌面环境中的归档管理器/文件管理器这些图形化应用程序来打开ISO文件。在Nautilus文件管理器中,右击ISO文件并选择使用归档管理器打开。

找到内核文件和initrd映像。如果你正在使用Ubuntu ISO文件,你会在casper文件夹中找到这些文件——vmlinuz文件是Linux内核,而initrd文件是initrd映像。后面,你需要知道它们在ISO文件中所处的位置。

检查硬盘分区路径

GRUB使用与Linux不同的“设备命名”方式。在Linux系统中,/dev/sda0是硬盘上的第一个分区——a是指第一个硬盘,而0是指第一个分区。在GRUB中,与/dev/sda0相对应的是(hd0,1)。0指第一个硬盘,而1则指它上面的第一个分区。换句话说,在GRUB设备名中,磁盘编号从0开始计数,而分区编号则从1开始计数——是啊,这真是突然令人困惑。例如,(hd3,6)是指第四磁盘上的第六分区。

你可以使用fdisk-l命令来查看该信息。在Ubuntu上,打开终端并运行以下命令:

sudo fdisk-l

你将看到一个Linux设备路径列表,你可以自行将它们转成GRUB设备名。例如,在下面的图片中,我们可以看到有个系统分区是/dev/sda1——那么,对于GRUB而言,它就是(hd0,1)。

创建GRUB2启动条目

添加自定义启动条目的最简单的方式是编辑/etc/grub.d/40_custom脚本,该文件设计用于用户自行添加启动条目。在编辑该文件后,/etc/defaults/grub文件和/etc/grub.d/脚本的内容将合成创建/boot/grub/grub.cfg文件——你不应该手工编辑这个文件。它被设计为通过你在另外的文件中指定的设置自动生成。

你需要以root特权打开/etc/grub.d/40_custom文件来编辑。在Ubuntu上,你可以通过打开终端窗口,并运行以下命令来完成:

sudo gedit/etc/grub.d/40_custom

放轻松点,你可以用你喜爱的文本编辑打开该文件。例如,你可以替换命令中“gedit”为“nano”,在Nano文本编辑器中打开它。

除非你已经添加了其它自定义启动条目,否则你应当看到的是一个几乎空的文件。你需要在注释行下添加一个或多个ISO启动部分。

这里为你展示了怎样来从ISO文件启动Ubuntu或基于Ubuntu的发行版,我们在Ubuntu 14.04下作了测试:

menuentry“Ubuntu 14.04 ISO”{set isofile=“/home/name/Downloads/ubuntu-14.04.1-desktop-amd64.iso”loopback loop(hd0,1)$isofilelinux(loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=${isofile} quiet splashinitrd(loop)/casper/initrd.lz}

自定义启动条目以包含你期望的菜单的条目名称,并指定计算机上该ISO文件的正确路径,以及包含ISO文件的硬盘和分区设备名。如果vmlinuz和initrd文件的名称或路径不同,请为这些文件指定正确的路径。

(如果你的/home/目录是一个分区,请忽略/home部分,像这样:set isofile=“/name/Downloads/${isoname}”)。

重要说明:不同的Linux版本要求带有不同启动选项的不同的启动条目,GRUB Live ISO多启动项目提供了用于不同Linux发行版的菜单条目的各种不同类型。你应当为你想要启动的ISO文件调整这些示例菜单条目。你也可以仅仅从网页搜索你想要启动的Linux发行版的名称和发行编号,并附带关键词“在GRUB中从ISO启动”,以获取更多信息。

如果你想要添加更多ISO启动选项,请为该文件添加额外部分。

完成后保存文件,返回终端窗口并运行以下命令:

sudo update-grub

再次启动计算机时,你将看到ISO启动条目,你可以选择它来启动ISO文件。在启动时,你可能需要按Shift键来显示GRUB菜单。

如果在尝试启动ISO文件时你看见错误信息或黑屏,那么你的启动条目配置肯定配置错误了。即使ISO文件路径和设备名是正确的,ISO文件上的vmlinuz和initrd文件的路径可能是不正确的,或者你启动Linux系统可能需要不同的选项。

上面就是从硬盘启动Linux ISO镜像的方法介绍了,你可以直接在硬盘上启动,而不需使用USB或光盘那么麻烦了,赶紧试试看吧。

阅读剩余
THE END