linux kernel 格式之 vmlinux、zImage、bzImage、vmlinuz、uImage

vmlinux     是编译出来的未经压缩的原始内核文件,是linux接受的可执行文件格式(ELF、COFF),vm 是 Virtual Memor

y 的缩写,与较老的DOS系统只有640K内存限制相比,linux 支持虚拟内存,linux可以使用硬盘空间作为虚拟

内存,因而得名 vm。

zImage      是由gzip压缩vmlinux文件,并加上一段解压启动代码得到的压缩文件,只能从0X00地址运行。

bzImage    表示 big zImage,bzImage 解压缩内核到高端内存(1M以上),zImage 解压缩内核到低端内存(第一个640K

),如果内核较小,可以采用 zImage 或 bzImage,内核较大就应该采用 bzImage

vmlinuz      是 zImage、bzImage的统称,编译内核时通过以下两种方式生成

1. 先make zImage,再 cp /usr/src/linux-2.4/arch/i386/linux/boot/zImage   /boot/vmlinuz

2. 先make bzImage,再 cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage   /boot/vmlinuz

uImage      是U-boot使用的映像文件,使用工具 mkimage 在 zImage 文件头部补加长度为0X40的头信息,该头部信息说

明了该映像文件的类型、加载位置、生成时间、大小等信息,即从uImage的0x40位置开始的内容与zImage

、bzImage是一样的

GRUB       是一款多操作系统启动管理器,是 GRand Unified Bootloader 缩写,它可以从 FAT、minix、FFS、ext2、

ReiserFS分区读取内核,即使grub菜单配置不正确,仍可以通过其控制台设置内核参数来引导系统

GRUB 2 笔记

grub 2 的配置文件主要包括 /etc/default/grub 和 /etc/grub.d/ 下的各文件,同样用 fd 表示软盘、hd 表示硬盘(包括 ID

E、SCSI 硬盘),设备编号从0开始、分区编号从1开始,主分区从 1-4,逻辑分区从 5 开始,例如

(fd0)                               表示整个软盘

(hd0, 1)                          表示BIOS中第1个硬盘的第1个分区

(hd0, 5)/boot/vmlinuz     表示BIOS中第1个硬盘的第1个逻辑分区下 boot 目录下的  vmlinuz 文件

GRUB 2 命令介绍

ls

ls   (hd0, 5)/              显示该分区的所有文件

ls   -l                            列出当前所有设备,如(hd0)、(hd0, 1)、(hd0, 5)、(hd1)、(hd1, 1)、(hd1, 2) 等

ls   /                             列出当前设为 root 的分区下的文件

ls   (hd1, 1)             列出(hd1, 1)分区下的文件

root

指定用于启动系统的分区,即根目录。set root 就是设置 root 这个环境变量的值

root    (hd0, x)          挂载第1个硬盘的第 x 个分区,可以通过 ls 查看这个分区的内容

loopback

建立回放设备,举例如下,使用 lo0 设备访问 aa.iso 里内容,从aa.iso里的软盘映像中启动

loopback   lo0   (hd0, 3)/aa.iso      利用 grub 回放设备挂载 iso,这样就不用提取 casper 文件夹

linux   (lo0)/memdisk

initrd   (lo0)/aa.img

loopback   -d   lo0                              删除回放设备 lo0

search

search   -f   /ntldr                 列出根目录里包含 ntldr 文件的分区,返回分区号

search   -l   LINUX               列出 label 是 LINUX 的分区

search   --set   -f   /ntldr     搜索根目录包含 ntldr 文件的分区并设为 root,如果存在多个分区包含 ntldr 文件,

则 set 不起作用

kernel

用来加载 linux 内核,举例如下

kernel   /boot/bzImage   ro   ramdisk_size=65536   root=/dev/ram0

"/boot/bzImage"       指定加载哪个内核

"root="                        指定了哪个分区作为根设备,"/dev/ram0" 是从 linux 角度讲的,内核要从根设备上

读取一些文件

linux

该命令是用来取代 grub 的 kernel 命令的,加载 linux 内核,举例如下

linux    /boot/vmlinuz-XXX   root=UUID=xxx  quiet  splash  rw  init=/bin/bash

"/boot/vmlinuz-XXX"    指定加载哪个内核

"root=UUID=xxx"            指定了哪个分区作为根设备,也可以使用 "root=/dev/ram0"

"quiet"                                内核启动时,简化提示信息

"splash"                              加载时启动进度条提示,代替 init 的字符提示

"rw   init=/bin/bash"       让 init 进程执行 /bin/bash,无密码进入 root 单用户模式,执行一些救援工作

rw 表示读写权限,忘记添加该参数的话,root 用户也不能执行写操作

initrd

initial ram disk 缩写,先加载虚拟根文件系统,再加载硬盘上的根文件系统,举例如下

initrd   /boot/initrd.img-XXX        使用名称为"/boot/initrd.img-XXX"的文件在内存中构造虚拟的根文件系统,以便

于内核检测完硬件信息后载入必需的模块等等

如果 grub 配置中丢失了该动作,屏幕会出现 kernel panic 提示,因为 initrd.img-XXX 文件在开机时给 kernel 提

供必需的设备驱动(modules)文件,否则 kernel 不能把硬件挂载到根文件系统

linux grub 使用的更多相关文章

  1. Linux GRUB 2及修改默认启动项

    The GRUB 2 boot loader makes sure that you can boot Linux. GRUB 2 is installed in the boot sector of ...

  2. CentOS 6.5中linux grub修复

    在使用Linux的过程中,难免会出现开机提示grub >而无法启动,可能是系统中/boot/grub文件丢失等原因造成的,当出现此问题的时候只要系统分区没有格式化一般是可以修复的,下面就以虚拟 ...

  3. linux grub

    grub 是目前使用最广泛的linux引导装载程序,旧的lilo这个引导装载程序很少见了,grub优点: 支持较多哦的文件系统,可以使用grub主程序在文件系统中查找内核文件名 启动的时候,可以自行编 ...

  4. Linux——GRUB简单学习笔记

    GRUB的配置文件默认为  :/boot/grub/grub.conf # ls -l /etc/grub.conf GRUB配置选项: default定义缺省启动系统 timeout定义缺省等待时间 ...

  5. linux grub启动密码验证设置

    1.认识启动配置选项 [root@server5 ~]# cat /boot/grub/grub.conf      # grub.conf generated by anaconda # # Not ...

  6. Linux:grub密码设置与修改

    grub密码设置与修改 默认GRUB启动参数可以的进入单用户模式从而修改root密码,如果想要给GRUB菜单设置密码,可以修改/etc/grub.conf文件 (/boot/grub/grub.con ...

  7. Linux Grub系统加密、破密、修复

    一.在重新启动系统时候按任意键进入 grub界面  Grub加密 一.title前的密码 修改grub.conf 这种加密只是在用户要进入grub界面的时候提示要输入密码,但是可以正常进入系统,有没有 ...

  8. Linux GRUB手动安装方法详解

    需要手工安装 GRUB 主要有两种情况: Linux 系统原先不是使用 GRUB 作为引导程序而现在想要使用 GRUB 来作为引导程序: MBR 中的引导程序被覆盖,需要在 MBR 中重新安装 GRU ...

  9. Linux grub命令

    一.简介 GNU GRUB(GRand Unified Bootloader简称"GRUB")是一个来自GNU项目的多操作系统启动程序.GRUB是多启动规范的实现,它允许用户可以在 ...

随机推荐

  1. django queryset合并问题

    今天在实现搜索时遇到一个问题,如何同时搜索model里面的title以及content和category字典 contents = Blog.objects.filter(content__conta ...

  2. Java笔记11:JSP连接Oracle数据库

    1 建立Web项目 在D:\tomcat\webapps\中建立basicSyntax项目,在该项目中添加WEB-INF,WEB-INF\classes\,WEB-INF\lib\和WEB-INF\w ...

  3. zabbix乱码问题

    Zabbix页面遇到历史记录的乱码需要修改数据库: 解决办法: 1.将 zabbix 数据库中的表备份: 2.手动删除 zabbix 数据库: 3.重新创建 zabbix 库时手动指定字符集为 utf ...

  4. oracle中设置了最大链接数还是报错

    须要更新的数据有1100条.我连接的时候一直报错 ORA-12518, TNS:listener could not hand off client connection 依据商品的文章设置了最大连接 ...

  5. Java补漏(一)

     第一章前言 在学长的建议下,为了弥补之前学Java漏下的或者不是非常清楚的知识点,买了本蛮好的教科书-<Java学习笔记(JDK6)>,正式又一次学习.为了记下一些让我恍然大悟的知识 ...

  6. js数组高阶方法reduce经典用法代码分享

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  7. proxyTable 解决跨域问题

    1.使用 proxyTable(地址映射表)解决跨域问题(即通过设置代理解决跨域问题): 可以通过设置将复杂的url简化,例如我们要请求的地址是api.xxxxxxxx.com/list/1,可以按照 ...

  8. STL源码剖析(迭代器)

    在STL中,容器跟算法是分开设计的,算法是通过迭代器来对容器进行操作的. 在算法运用迭代器的时候,可能会用到其相应的型别,例如返回值为容器中元素的型别,又或者说根据迭代器的类型来选择更好的算法等等. ...

  9. c++继承总结

    继承 1)继承是面向对象程序设计实现软件重用的重要方法.程序猿能够在已有基类的基础上定义新的派生类. 2) 单继承的派生类仅仅有一个基类.多继承的派生类有多个基类. 3) 派生类对基类成员的訪问由继承 ...

  10. Git-Git Book阅读笔记

    git diff [fname]    查看工作区与缓存区异同 git diff --staged [fname]    查看缓存区与上次提交之间的差异 git diff HEAD [fname] 查 ...