2_Linux启动详解
- 格式:docx
- 大小:90.96 KB
- 文档页数:12
Linux终端中的系统关机和重启命令Linux作为一种开源的操作系统,具有很高的灵活性和自定义性。
在使用Linux终端时,系统关机和重启是经常涉及到的操作。
本文将介绍Linux终端中常用的系统关机和重启命令,供用户参考和使用。
1. 关机命令在Linux终端中,通过使用特定的关机命令可以实现系统的安全关机,保证数据的完整性,避免出现数据丢失或损坏的情况。
下面是常用的关机命令及其用法:1.1. shutdown命令shutdown命令可实现系统的关机操作,并向所有登录用户发送关机通知。
命令格式如下:```shutdown [选项] 时间 [警告信息]```常用选项:- -r: 关机后立即重启系统- -h: 关机后不重启系统- -c: 取消已经设置的关机操作- -t seconds: 设置关机前的等待时间(以秒为单位)示例:```shutdown -h now # 立即关机shutdown -h +10 # 10分钟后关机shutdown -r 20:00 # 指定时间关机并重启shutdown -c # 取消当前关机操作```1.2. poweroff命令poweroff命令负责关闭电源,可以用来执行硬件完全关机,对电源断电。
命令格式如下:```poweroff```示例:```poweroff```1.3. halt命令halt命令用于停止系统运行,并使计算机进入停止状态。
命令格式如下:```halt```示例:```halt```1.4. init命令init命令用于改变系统的运行等级,其中运行等级0为关机状态,通常用init命令实现关机操作。
命令格式如下:```init [运行等级]```示例:```init 0```2. 重启命令有时候需要重启系统以应用修改或解决一些问题。
在Linux终端中,可以使用以下命令实现系统的重启:2.1. reboot命令reboot命令用于重启系统,它会关闭所有正在运行的进程,并重新引导计算机。
linux 系统启动相关路径
在Linux 系统中,启动相关的路径通常包括以下几个:
1. /etc/init.d/:这个目录存放了系统中的服务脚本文件,这些脚本文件可以通过chkconfig 命令设置服务的运行级别,从而控制服务的启动和停止。
2. /etc/rc.d/:这个目录也存放了系统中的服务脚本文件,与/etc/init.d/ 目录类似,这些脚本文件也可以通过chkconfig 命令设置服务的运行级别。
3. /etc/rc.local/:这个文件是一个特殊的脚本文件,它在系统启动时自动执行,可以用来执行一些在启动过程中需要执行的操作,如挂载磁盘分区、启动网络等。
4. /etc/fstab/:这个文件记录了系统中需要挂载的文件系统信息,包括磁盘分区的设备名称、挂载点、文件系统类型、挂载选项等。
5. /etc/sysconfig/network-scripts/:这个目录存放了系统中网络服务的配置文件,包括网络接口、DNS 服务器、网关等信息。
6. /usr/bin/:这个目录通常包含了一些用户和应用程序使用的工具和脚本文件,例如ssh、scp、wget 等。
7. /usr/local/bin/:这个目录通常存放了用户自定义的命令和脚本文件,例如一些自己编写的工具和脚本文件。
8. /var/run/:这个目录存放了系统中运行的进程的信息,包括进程ID、父进程ID、挂载点等。
9. /var/log/:这个目录存放了系统中的日志文件,包括系统日志、应用程序日志等。
以上是一些常见的Linux 系统启动相关的路径和文件,具体路径和文件可能会因Linux 发行版和版本而有所不同。
嵌入式linux系统的启动流程
嵌入式Linux系统的启动流程一般包括以下几个步骤:
1.硬件初始化:首先会对硬件进行初始化,例如设置时钟、中
断控制等。
这一步骤通常是由硬件自身进行初始化,也受到系统的BIOS或Bootloader的控制。
2.Bootloader引导:接下来,系统会从存储介质(如闪存、SD
卡等)的Bootloader区域读取引导程序。
Bootloader是一段程序,可以从存储介质中加载内核镜像和根文件系统,它负责进行硬件初始化、进行引导选项的选择,以及加载内核到内存中。
3.Linux内核加载:Bootloader会将内核镜像从存储介质中加载到系统内存中。
内核镜像是包含操作系统核心的一个二进制文件,它由开发者编译并与设备硬件特定的驱动程序进行连接。
4.内核初始化:一旦内核被加载到内存中,系统会进入内核初
始化阶段。
在这个阶段,内核会初始化设备驱动程序、文件系统、网络协议栈等系统核心。
5.启动用户空间:在内核初始化完毕后,系统将启动第一个用
户空间进程(init进程)。
init进程会读取并解析配置文件(如
/etc/inittab)来决定如何启动其他系统服务和应用程序。
6.启动其他系统服务和应用程序:在用户空间启动后,init进
程会根据配置文件启动其他系统服务和应用程序。
这些服务和应用程序通常运行在用户空间,提供各种功能和服务。
以上是嵌入式Linux系统的基本启动流程,不同的嵌入式系统可能会有一些差异。
同时,一些特定的系统也可以添加其他的启动流程步骤,如初始化设备树、加载设备固件文件等。
Linux 进程的启动方式程序或者命令的执行实际上是通过进程实现的。
通常情况下,程序或者命令是保存在硬盘上的,当在命令行中输入一个可执行程序的文件名或者命令并按下Enter 键后,系统内核就将该程序或者命令的相关代码加载到内存中开始执行。
系统会为该程序或者命令创建一个或者多个相关的进程,通过进程完成特定的任务。
启动进程的方式有两种,分别为前台启动方式和后台启动方式。
1.以前台方式启动进程在终端窗口的命令行上输入一个Linux命令并按Enter键,以前台方式启动了一个进程。
例如,在终端窗口上执行“find /-name myfile.txt”命令,就可以以前台的方式启动一个进程。
而在该进程还未执行完时,可按下Ctrl+z组合键将该进程暂时挂起。
然后,可以使用ps命令查看该进程的有关信息,如图41所示。
图41 前台方式启动进程2.以后台方式启动进程在前台运行的进程是正在进行交互操作的进程,它可以从标准输入设备接收输入,并将输出结果送到标准输出设备,在同一时刻只能有一个进程在前台运行。
而在后台运行的进程一般不需要进行交互操作,不接收终端的输入。
通常情况下,可以让一些运行时间较长而且不接受终端输入的程序以后台方式运行,让操作系统调度它。
要在命令行上以后台方式启动进程,需要在执行的命令后添加一个“&”。
例如,在终端窗口的命令行上输入命令“find / -name myfile2.txt &”并按下Enter键后将从后台启动一个进程。
启动后,系统会显示如下所示的信息:[2] 3516这里的数字2表示该进程是运行于后台的第2个进程,数字3516是该进程的PID(即进程标识码,用于惟一地标识一个进程)。
然后,出现了shell提示符,这表示已返回到前台。
这时,执行ps命令将能够看到现在在系统中有两个由find命令引起的进程,它们的标识号是不同的,因而是两个不同的进程,其中,PID为3385的进程就是刚才被挂起的进程。
arm版本linux系统的启动流程ARM架构是一种常见的处理器架构,被广泛应用于嵌入式设备和移动设备中。
在ARM版本的Linux系统中,启动流程是非常重要的,它决定了系统如何从开机到正常运行。
本文将详细介绍ARM版本Linux系统的启动流程。
一、引导加载程序(Bootloader)引导加载程序是系统启动的第一阶段,它位于系统的固化存储器中,比如ROM或Flash。
在ARM版本的Linux系统中,常用的引导加载程序有U-Boot和GRUB等。
引导加载程序的主要功能是加载内核镜像到内存中,并将控制权转交给内核。
二、内核初始化引导加载程序将内核镜像加载到内存后,控制权被转交给内核。
内核初始化是系统启动的第二阶段,它主要完成以下几个步骤:1. 设置异常向量表:ARM架构中,异常是指硬件产生的中断或故障,比如系统调用、中断请求等。
内核需要设置异常向量表,以便正确处理异常。
2. 初始化处理器:内核对处理器进行初始化,包括设置页表、启用缓存、初始化中断控制器等。
3. 启动第一个进程:内核创建第一个用户进程(一般是init进程),并将控制权转交给它。
init进程是系统中所有其他进程的父进程,负责系统的初始化工作。
三、设备树(Device Tree)设备树是ARM版本Linux系统中的一种机制,用于描述硬件设备的相关信息。
在内核初始化过程中,内核会解析设备树,并建立设备树对象,以便后续的设备驱动程序使用。
设备树描述了硬件设备的类型、地址、中断等信息,以及设备之间的连接关系。
它使得内核能够在运行时自动识别和配置硬件设备,大大提高了系统的可移植性和灵活性。
四、启动初始化(Init)启动初始化是系统启动的第三阶段,它是用户空间的第一个进程(init进程)接管系统控制权后的操作。
启动初始化主要完成以下几个任务:1. 挂载根文件系统:启动初始化会挂载根文件系统,使得用户可以访问文件系统中的文件和目录。
2. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
1)reboot 重启(2)init 6 重启(3)logo1.1一般在linux中,我们重启会用到这三个命令:1.2 reboot命令重启动系统时是删除所有的进程,而不是平稳地终止它们。
因此,使用reboot命令可以快速地关闭系统,但如果还有其它用户在该系统上工作时,就会引起数据的丢失。
所以使用reboot命令的场合主要是在单用户模式。
'reboot'并不执行这些过程,reboot更是一个kernel级别的命令,不对应用使用shutdown脚本。
1.3 init是所有进程的祖先他是Linux系统操作中不可缺少的程序之一。
它的进程号始终为1所以发送TERM信号给init 会终止所有的用户进程守护进程等。
shutdown 就是使用这种机制。
init定义了7个运行级别(runlevel)init 0为关机init 6为重启。
’init 6‘基于一系列/etc/inittab文件,并且每个应用都会有一个相应shutdown脚本。
'init 6' 调用一系列shutdown脚本(/etc/rc0.d/K*)来使系统正常关机;1.4 shutdown命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。
该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。
精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。
系统执行该命令后会自动进行数据同步的工作。
该命令的一般格式: shutdown [选项] [时间] [警告信息]命令中各选项的含义为:- k 并不真正关机而只是发出警告信息给所有用户- r 关机后立即重新启动- h 关机后不重新启动- f 快速关机重启动时跳过fsck- n 快速关机不经过init 程序- c 取消一个已经运行的shutdown请注意,该命令只能由超级用户使用。
Linux终端中的系统重启和关机命令系统重启和关机是操作系统中常见的基本操作。
在Linux终端中,我们也可以通过命令来完成这些操作。
本文将介绍Linux终端中常用的系统重启和关机命令,并详细说明其使用方法。
一、系统重启命令1. shutdownshutdown命令可以安全地关闭Linux系统,并重启系统。
使用该命令需要管理员权限。
使用方法:```shellsudo shutdown -r now```该命令中的"-r"参数表示重启("r"代表reboot),"now"表示立即执行。
因此,执行以上命令后,系统会立即进行重启操作。
2. rebootreboot命令也可以用于重启系统。
与shutdown命令不同的是,reboot命令可以直接在命令行中执行,无需管理员权限。
使用方法:```shellreboot```执行以上命令后,系统会立即进行重启操作。
二、系统关机命令1. shutdownshutdown命令同样可以用于关机操作。
使用方法:```shellsudo shutdown -h now```该命令中的"-h"参数表示关机("h"代表halt),"now"表示立即执行。
因此,执行以上命令后,系统会立即进行关机操作。
2. halthalt命令也可以用于关机操作。
与shutdown命令不同的是,halt命令可以直接在命令行中执行,无需管理员权限。
使用方法:```shellhalt```执行以上命令后,系统会立即进行关机操作。
三、其他相关命令1. initinit命令是Linux系统中的初始化程序,可以用于改变系统的运行级别。
可以使用init命令切换到单用户模式(即命令行模式),然后再执行重启或关机命令。
使用方法:```shellsudo init 1```执行以上命令后,系统会切换到单用户模式。
GRUB2及启动过程详解作者: 南瓜剪子2016年7月28日1. 概述 (2)2. CentOS7中GRUB2 (2)3. GRUB2 的bootstrap image文件 (3)3.1. boot.img (3)3.2. diskboot.img (4)3.3. kernel.img (4)3.4. core.img (4)3.5. *.mod (4)4. 对比GRUB Legacy (5)4.1. stage1 (5)4.2. *_stage1_5 (5)4.3. stage2 (5)5. grub2-mkimage定制core.img (6)6. GRUB2安装 (7)6.1. Linux是怎么命名设备(/dev/sda) (7)6.2. MBR(Master Boot Record) (8)6.3. MBR分区表DPT(Disk Partition Table) (10)6.4. LBA and CHS (14)6.4.1. CHS(cylinders-heads-sectors) (14)6.4.2. LBA(Logical Block Address) (14)6.5. boot.img和core.img安装 (15)6.6. 硬盘总结 (18)7. 启动过程 (19)7.1. BIOS (19)7.2. GRUB2中boot.img (20)7.2.1. Step1无条件跳转 (20)7.2.2. Step2 初始化 (20)7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS (22)7.2.4. Step4 采用LBA加载core.img第一个扇区 (23)7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 (25)7.2.6. Step6 执行core.img第一条语句 (27)7.2.7. Step7 boot.img总结 (27)7.3. GRUB2中core.img (28)7.3.1. diskboot.img (28)7.3.2. GRUB2 core Startup (34)7.3.3. GRUB主函数即GRUB主要功能 (37)7.3.4. 加载Linux Kernel (38)7.4. Linux kernel (47)8. 结束语 (48)9. 参考文献 (48)1.概述计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):现在的Boot Loader有很多类型,大致如下:1.对Linux来说GRUB2占据了统治地位2.对Windows来说Bootmgr/BCD占据了统治地位3.对Apple系统缺省的是BootX作为一名计算机工程师,了解Boot Loader的原理是很重要。
Linux启动脚本完全注释2---rc脚本注释从/etc/inittab中可以看出,启动的核⼼就是rc脚本.⾸先init程序调⽤rc脚本,并将级别传递给rc脚本.其次rc脚本去调⽤该级别内(/etc/rcX.d)各项服务的脚本.rc脚本的注释如下:#!/bin/sh######################################################################### Begin $rc_base/init.d/rc## Description : Main Run Level Control Script## Authors : Gerard Beekmans - gerard@## Version : 00.00## Notes :#########################################################################./etc/sysconfig/rc #指定rc_bash=/etc/rc.d rc_functions =${rc_bash}/init.d/ functions network_devices=/etc/sysconfig/network-devices.${rc_functions}# This sets a few default terminal options.stty sane# These 3 signals will not cause our script to exittrap "" INT QUIT TSTP #trap是bash内建的命令,⽤来指定信号的⾏为,“”为忽略该信号[ "${1}" !="" ] && runlevel=${1} #从参数中得到运⾏级别,在/etc/inittab中指定的if [ "${runlevel}"="" ];then#运⾏级别为空则退出echo"Usage: ${0} <runlevel>">&2exit1fiprevious=${PREVLEVEL} #前⼀个级别[ "${previous}"="" ] && previous=N #没有前⼀级别则为nif [ ! -d ${rc_base}/rc${runlevel}.d ];then#是否有该级别的⽬录boot_mesg "${rc_base}/rc${runlevel}.d does not exist."${WARNING}boot_mesg_flushexit1fi# Attempt to stop all service started by previous runlevel,# and killed in this runlevel#结束该级别中K开头的脚本if [ "${previous}" !="N" ];then#如果有前⼀个级别for i in $(ls -v ${rc_base}/rc${runlevel}.d/K* 2>/dev/null)docheck_script_statussuffix=${i#$rc_base/rc$runlevel.d/K[0-9][0-9]} #脚本的名称,除去路径和K** prev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix #前⼀级别sysinit_start=$rc_base/rcsysinit.d/S[0-9][0-9]$suffix #系统初始化if [ "${runlevel}" !="0" ] && [ "${runlevel}" !="6" ];then#不是重启和关机if [ ! -f ${prev_start} ] && [ ! -f ${sysinit_start} ];then#如果不存在boot_mesg -n "WARNING: ${i} can't be"${WARNING} #前⼀级别并没有启动该脚本boot_mesg -n " executed because it was not"boot_mesg -n " not started in the previous"boot_mesg -n " runlevel (${previous})."boot_mesg ""${NORMAL}boot_mesg_flushcontinuefifi${i} stop #脚本执⾏stoperror_value=${?} #返回值if [ "${error_value}" !="0" ];thenprint_error_msgfidonefi#Start all functions in this runlevel#开始所有S开头的脚本for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* 2>/dev/null)#获得每个脚本doif [ "${previous}" !="N" ];then#如果有前⼀个级别suffix=${i#$rc_base/rc$runlevel.d/S[0-9][0-9]} #脚本⽂件名stop=$rc_base/rc$runlevel.d/K[0-9][0-9]$suffixprev_start=$rc_base/rc$previous.d/S[0-9][0-9]$suffix[ -f ${prev_start} ] && [ ! -f ${stop} ] && continue #如果前⼀个级别中没有该脚本的stop,则说明该进程已经存在ficheck_script_status #检查脚本是否存在case ${runlevel} in #0或6则直接stop0|6)${i} stop;;*)${i} start;;esacerror_value=${?}if [ "${error_value}" !="0" ];thenprint_error_msgfidone#End$rc_base/init.d/rc。
Linux系统启动详解Linux系统启动顺序:1)BIOS自检2)bootloader3)载入内核4)载入initrd5)init进程和inittab引导指令6)执行.rc启动脚本7)getty和login8)bash系统启动顺序:加载BIOS的硬件信息└读取MBR的Boot Loader信息stage1,stage2,grub.conf└ Boot Loader加载内核vmlinux,initrd└内核执行init程序并取得inittab中运行信息├ init执行/etc/rc.d/rc.sysinit└ /etc/fstab加载分区等├ init执行/etc/rc.d/rc├启动对应运行级别的守护进程└最后执行S99local,即/etc/rc.d/rc.local└ init启动了mingetty,打开了终端供用户登录系统└执行/bin/login程序└成功登陆之后启动shell控制主机└ shell配置脚本├ /etc/profile --->/etc/profile.d/*.sh└ /etc/bashrc└ ~user/.bash_profile└ ~user/.bashrc1)BIOS自检当打开一台计算机的电源时,计算机首先执行存储在ROM中的引导代码,即BIOS(Basic Input/Output System)基本输入/输出系统。
BIOS在完成外围设备和启动设备检测后确定由什么设备启动。
要引导一个操作系统。
2)Bootloader如果电脑BIOS设置为由硬盘启动,它将试图加载磁盘第一个扇区的信息,引导扇区在每个分区里都存在,但是主引导扇区却在硬盘的第一物理扇区。
它由两个部分组成,即主引导记录MBR(Master Boot Record)和硬盘分区表DPT。
在总共512字节的主引导扇区里MBR 占446个字节(偏移0--偏移1BDH),DPT占64个字节(偏移1BEH--偏移1FDH),最后两个字节―55AA‖(偏移1FEH--偏移1FFH)是分区的结束标志。
MBR是用来在系统硬件自检完后引导具有激活标志的分区上的操作系统。
它执行到最后的是一条JMP指令跳到操作系统的引导程序去。
如果Linux boot loader安装在MBR中,当BIOS读到MBR时,boot loader就被执行。
如果把boot loader安装在其它分区super block 中,系统将由引导程序加载super block中的Linux boot loader。
带*号的为活动分区备份主分区引导记录dd if=/dev/sda of=/root/mbr bs=446 count=1备份MBR包括主引导记录及分区表dd < /dev/sda >/tmp/mbr bs=512 count=1备份PBRdd < /dev/sda2 >/tmp/pbr bs=1024 count=1GRUB加载程序的主要功能是让硬件识别文件系统,并加载内核。
Linux的加载程序可以识别Windows的内核文件,而Windows的加载程序却无法识别Linux的内核文件,因此,一个多重启动系统的加载程序不能使用Windows的加载程序。
Linux的引导程序有两种(lilo和grub),现在一般都使用灵活性高的grubgrub根据它的配置文件/boot/grub/grub.conf进行引导vim /boot/grub/grub.confdefault=0 # 在多系统时指定默认启动的系统,0为第一个timeout=5 # 以默认系统启动前的时间splashimage=(hd0,0)/grub/splash.xpm.gz #启动画面背景文件hiddenmenu # 隐藏启动菜单title Red Hat Enterprise Linux Server (2.6.18-53.e15) # 启动菜单的标签 root (hd0,0) # 指定启动内核所在的磁盘分区,第一个数表示物理驱动器号,第二个数表示分区号,注意这两个都是从0开始计数。
kernel /vmlinuz-2.6.18-53.e15 ro root=LABEL=/ rhgb quiet# 内核位置。
在行尾添加vga=0x314更改文本界面的分辩率,0x314为800X600,0x317为1024X768。
其它启动选项如单用户、关闭SELinux等都可以在此设置。
rhgb显示画面,qui et不显示kernel信息initrd /initrd-2.6.18-53.e15.img # initrd位置如果用其它分区的GRUB启动,比如你把RHEL5安装在第四个分区上,并选择把GRUB 安装在PBR上(boot在hda5上),编辑grub.conf如下:title RHEL5rootnoverify (hd0,4)告诉GRUB 您用的Linux 盘在哪里,但同时不要试图将其挂载(‗noverify‘,可选项)。
chainloader +1告诉GNU GRUB 不要试着自己载入Linux (自身无法完成),而应该将启动进程交给该盘的首扇区,那里含有原始的Linux 启动程序。
/boot/grubvim device.map(硬盘sda=hd0显示)/boot/grub/device.map设备映射文件,对应grub配置文件里的root(hd0,0),挂载完就没有用处/boot/grub/grub.conf 只有红帽用grub.conf ,别的系统厂商都是menu.lst。
而红帽为了让大家显而意见,明白grub的配置文件是这个menu.lst以后改的,所以menu.lst是为了让习惯别的系统的用户一看就明白这个配置文件。
(遵循标准)stage1(MBR中grub程序的一部分)stage2(grub存放在硬盘上的其它部分)MBR会把stage1融合分区信息嵌入到MBR中,但由于MBR只有512字节,所以grub将另一部份程序stage2存放到硬盘上。
MBR中的stage1就是寻找stage2的导向。
其它stage都是文件系统驱动,要读取硬盘信息。
(grub以自己为根挂载,加载内核,但由于没有文件系统所以不能读取内核,这时候就需要文件系统驱动以读取并加载内核)3)载入内核/boot/vmlinuz-2.6.18-53.e15/boot/config-2.6.18-53.e15当前内核的功能选项(编译内核时,.config文件)/boot/System.map-2.6.18.el5 系统启动时调用库函数在GRUB菜单中选择Linux系统后,主机会转到Linux所在的硬盘下并载入内核文件。
Linux系统内核文件通常存储在/boot下。
如果GRUB的配置文件错误的话,可以通过手动指定内核与initrd文件位置的方法加载内核文件。
vmlinuz是可引导的、压缩的内核。
―vm‖代表―Virtual Memory‖。
Linux 支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。
Linux能够使用硬盘空间作为虚拟内存,因此得名―vm‖。
vmlinuz是可执行的Linux内核。
vmlinuz的建立有两种方式。
一是编译内核时通过―make zImage‖创建,zImage适用于小内核的情况,它的存在是为了向后的兼容性。
二是内核编译时通过命令make bzImage创建,bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起误解,bz表示―big zImage‖。
bzImage中的b是―big‖意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。
它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。
所以你不能用gunzip 或gzip –dc 解包vmlinuz。
内核文件中包含一个微型的gzip用于解压缩内核并引导它。
两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M 以上)。
如果内核比较小,那么可以采用zImage 或bzImage之一,两种方式引导的系统运行时是相同的。
大的内核采用bzImage,不能采用zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
4)载入initrd什么是initrd?initrd = init ramdisk,是一个启动时存在于内存的文件系统。
initrd一般被用来临时引导硬件到内核能够接管并继续引导的状态。
如用于加载ext3等文件系统及scsi设备的驱动。
比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。
为了解决这个问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。
initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,然后把对各种各样硬件设备的支持以模块的方式放在initrd中,这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。
这样的一个好处就是在保持kernel 不变的情况下,通过修改initrd中的内容就可以灵活的支持不同的硬件。
在启动完成的最后阶段,根文件系统可以重新mount到其他设备上。
Linux启动一定要用initrd么不必,如果把需要的功能全都编译到内核中(非模块方式),只需要一个内核文件即可,initrd能够减小启动内核的体积并增加灵活性。
如果你的内核以模块方式支持某种文件系统(例如ext3, UFS),而启动阶段的驱动模块(如jbd)放在这些文件系统上,内核是无法读取文件系统的,从而只能通过initrd的虚拟文件系统来装载这些模块这里有些人会问: 既然内核此时不能读取文件系统,那内核的文件是怎么装入内存中的呢?答案很简单,Grub是file-system sensitive的,能够识别常见的文件系统initrd文件是怎么生成的?使用mkinitrd命令,这个命令其实是一个Bash脚本,该脚本先建立一个8M的空文件,并在此上建立一个文件系统,并拷贝相应的的文件。
initrd是什么内容?initrd.img不像通常的以.img为扩展名的ramdisk cramfs文件。
它是经过用gzip -9进行压缩过的ramdisk文件。
所以,如果直接用#mount initrd.img /temppath -o loop不能mount上,会报告你指定一个文件类型。