Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤。
加载内核
LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。请记住此时的计算机内存中还不存在任何操作系统, PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。因此,内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核是被压缩了的。这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制),再对内核的剩余部分进行解压缩。
执行内核
内核在内存中解压缩之后,就可以开始运行了。此时的内核只知道它本身内建的各种功能,也就是说被编译为模块的内核部分还不能使用。最基本的是,内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)。一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。内核挂装了根文件系统之后,将启动并运行一个叫做 init的程序。
注意:在这里我们故意略去了Linux内核启动的许多细节,这些细节只有内核开发人员才感兴趣。如果你好奇的话,可以访问http://www.redhat.com:8080地址处的 “Kernel Hackers Guide”。
init进程
init进程是非内核进程中第一个被启动运行的,因此它的进程编号PID的值总是1。init读它的配置文件/etc/inittab,决定需要启动的运行级别(Runlevel)。从根本上说,运行级别规定了整个系统的行为,每个级别(分别由0到6的整数表示)满足特定的目的。如果定义了 initdefault级别,这个值就直接被选中,否则需要由用户输入一个代表运行级别的数值。
输入代表运行级别的数字之后,init根据/etc/inittab文件中的定义执行一个命令脚本程序。缺省的运行级别取决于安装阶段对登录程序的选择:是使用基于文本的,还是使用基于X-Window的登录程序。
rc命令脚本程序
我们已经知道,当运行级别发生改变时,将由/etc/inittab文件定义需要运行哪一个命令脚本程序。这些命令脚本程序负责启动或者停止该运行级别特定的各种服务。由于需要管理的服务数量很多,因此需要使用rc命令脚本程序。其中,最主要的一个是/etc/rc.d/rc,它负责为每一个运行级别按照正确的顺序调用相应的命令脚本程序。我们可以想象,这样一个命令脚本程序很容易变得难以控制!为了防止这类事件的发生,需要使用精心设计的方案。
对每一个运行级别来说,在/etc/rc.d子目录中都有一个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。
在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接并不使用命令脚本程序在 /etc/rc.d/init.d子目录中原来的名字。如果命令脚本程序是用来启动一个服务的,其符号链接的名字就以字母S打头;如果命令脚本程序是用来关闭一个服务的,其符号链接的名字就以字母K打头。
许多情况下,这些命令脚本程序的执行顺序都很重要。如果没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的执行顺序,在字母S 或者K的后面紧跟着一个两位数字,数值小的在数值大的前面执行。比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named之前执行(S50inet配置网络设置,S55named启动DNS服务器)。
存放在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真正的实干家,是它们完成了启动或者停止各种服务的操作过程。当 /etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序依次调用各个命令脚本程序执行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来说,会传递Stop参数;类似地对以字母S打头的命令脚本程序来说,会传递 Start参数。
编写自己的rc命令脚本
在维护Linux系统运转的日子里,肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改的情况。有两种方法可以用来实现修改的目的:
● 如果所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑一下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导过程的最后一步被执行的。
● 如果所做的修改比较细致,或者还要求关闭进程使之明确地停止运行,则需要在/etc/rc.d/init.d子目录中添加一个命令脚本程序。这个命令脚本程序必须可以接受Start和Stop参数并完成相应的操作。
第一种方法,编辑/etc/rc.d/rc.local脚本,当然是两种方法中比较简单的。如果想在这个命令脚本程序中添加内容,只需要使用喜欢的编辑器程序打开它,再把打算执行的命令附加到文件的末尾就可以了。这对一两行的修改来说的确很便利。
如果确实需要使用一个命令脚本程序,这时必须选择第二个方法。编写一个rc命令脚本程序的过程并不像想象中那么困难。我们下面就给出一个例子,看看它是怎样实现的(顺便说一句,你可以把我们的例子当作范本,按照自己的需要进行修改和添加)。
分享到:
相关推荐
在深入探讨ARM Linux启动分析之前,首先需要理解Linux操作系统的基本启动流程和ARM架构的特点。Linux启动过程主要分为两个阶段:Bootloader阶段和内核启动阶段。Bootloader是系统上电后执行的第一段程序,它的主要...
### ARM Linux启动分析 #### 1.5 Armlinux启动分析概述 Armlinux的启动过程是一个复杂且精细的过程,涉及到多个阶段的协同工作。在深入解析Armlinux的启动流程之前,首先需要理解ARM体系结构的基本概念及其与Linux...
【ARM Linux 启动分析】 在嵌入式领域,Linux操作系统因其开源、高效和灵活性而广泛应用,尤其是在基于ARM架构的设备上。ARM Linux启动过程涉及多个关键组件,其中最主要的是bootloader和Linux内核。本篇文章将深入...
### ARM Linux启动分析 #### 一. Bootloader 在Alpha/AXP平台上引导Linux有两种主要的方法:一是通过MILO或其他类似引导程序引导;二是通过Firmware直接引导。MILO类似于i386平台上的LILO,它内置了基本的磁盘驱动...
Linux启动分析专题 在深入探讨Linux启动过程之前,我们首先要理解操作系统的作用,它是一个管理计算机硬件资源并为用户和应用程序提供服务的系统软件。Linux,作为一款开源的类Unix操作系统,其启动流程涉及多个...
《基于AT91RM9200的Linux启动分析》这篇文章主要探讨了在基于AT91RM9200芯片上Linux操作系统的启动过程。AT91RM9200是一款由Atmel公司基于ARM架构设计的处理器,由于其内置网络控制器和高效能,被广泛应用在嵌入式...
ARM Linux系统的启动过程是一个复杂而有序的序列,它涉及到Bootloader、硬件初始化、内核加载以及内核自身的初始化等多个步骤。下面将详细分析这个过程。 首先,Bootloader是系统启动的第一步,它负责加载内核并做...
### ARM + Linux 启动分析(zImage) #### 摘要 本文旨在深入解析基于ARM架构的Linux 2.2.26内核启动流程,重点在于zImage压缩内核映像的启动机制。文章从`/arch/arm/Makefile`入手,介绍了Linux内核的三种启动...
标题与描述概述的是关于ARM Linux启动过程的深入分析,特别是针对Bootloader的作用及其与内核交互的机制。本文档将详细解析ARM Linux启动的关键步骤,包括Bootloader的职责、初始化流程,以及内核启动的各个阶段,...
Linux启动分析是理解操作系统核心运行机制的关键步骤,它涉及到内核加载、初始化、硬件设备的探测与驱动程序的加载等多个环节。在这个过程中,系统从BIOS(基本输入输出系统)过渡到Linux内核,再到用户空间的应用...
在深入分析ARM Linux启动流程时,我们首先要了解的是,Linux操作系统在硬件启动后的第一步是执行arch/arm/kernel目录下的head-($PROCESSOR).S文件,这里的$PROCESSOR代表CPU的具体类型。对于ARM架构,从ARM6开始,...
《ARM+Linux启动分析——以zImage为例》 在嵌入式系统中,尤其是基于ARM架构的设备,Linux内核的启动方式对于系统的整体性能和资源利用率至关重要。本文主要聚焦于ARM架构下Linux 2.2.26内核的启动过程,特别是压缩...
### Linux启动流程分析 #### 一、Bootloader启动内核过程 Linux系统启动时的核心流程之一便是由Bootloader引导内核。在这个过程中,Bootloader负责完成一系列基础设置,并最终将控制权交给内核。以下是对...
### Linux ARM 启动分析:汇编部分深入探讨 #### 引言 在探索Linux操作系统在ARM架构上的启动过程时,我们聚焦于汇编语言层面的解析,这是一段复杂而精妙的旅程,旨在理解从裸机环境到功能完备的操作系统内核的...
Linux 启动 bootargs 参数分析 在 Linux 启动过程中,bootargs 参数扮演着重要的角色,该参数用于传递启动选项和配置信息给内核。Linux 内核在启动时对 bootargs 参数的解析可以分为两大块:setup_arch 函数和 ...
linux2.6内核启动分析
《深入解析ARM+Linux启动分析:以zImage为例》 在嵌入式系统的世界中,ARM架构因其低功耗和高性能的特点,成为许多设备的心脏。Linux操作系统则以其开源、稳定和灵活性,成为ARM平台的首选操作系统。然而,理解...