Linux启动和引导过程综述

合集下载

《Linux操作系统》第2版完整习题答案-电子工业出版社

《Linux操作系统》第2版完整习题答案-电子工业出版社

参考答案第1章1. 思考题(1)C语言。

(2)UNIX系统的特点有以下几点:(1)多任务;(2)多用户;(3)并行处理能力;(4)设备无关性;(5)工具;(6)错误处理;(7)强大的网络功能;(8)开放性。

(3)Linux是一个功能强大的操作系统,同时它是一个自由软件,是免费的、源代码开放的,可以自由使用的类UNIX产品。

其创始人是Linus。

(4)Linux操作系统的诞生、发展和成长过程始终依赖着的重要支柱有以下几点:(1)UNIX操作系统;(2)MINIX操作系统;(3)GNU计划;(4)POSIX标准;(5)Internet 网络。

(5)Linux系统的特点有以下几点:1)自由软件;2)良好的兼容性;3)良好的界面;4)丰富的网络功能;5)支持多种平台。

(6)常见的Linux的发行版本有以下几种:1)Red Hat Linux;2)Caldera OpenLinux;3)SuSE Linux;4)TurboLinux;5)红旗Linux;6)中软Linux。

(7)略。

2. 单项选择(1)-(5):BCCBA第2章1. 思考题(1)Linux系统有哪些运行级别?其含义为何?答:Linux/Unix有7个运行级或运行状态,定义如下(参见/etc/inittab),具体级别与含义如下:0:关闭系统;1:单用户模式;2:多用户使用模式,但没有NFS功能;3:完全多用户模式;4:没有使用,用户可自定义;5:完全多用户模式,且支持X-Windows(默认运行级);6:重新启动。

(2)Linux系统下经常使用的两种桌面环境是什么?答:GNOME他KDE(3)什么是X-Window系统?它有什么特点?答:图形界面(X-Window)就是在Linux操作系统中提供图形化用户界面(GUI),支持的视窗系统,也被称为X。

X-Window的工作方式跟Microsoft Windows有着本质的不同。

MS Windows的图形用户界面(GUI)与操作系统本身紧密结合,成为操作系统的一部分;而X-Window并不是操作系统的一部分,它实际上只是在Linux操作系统上面运行的一个应用程序,可以不启动。

嵌入式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引导与配置文件加载过程

Linux引导与配置文件加载过程

Linux引导及配置文件加载过程解读文章分类:操作系统??本文包括3部分内容1、 Linux的引导过程2、 Linux 的运行级别3、 /etc/inittab与/etc/rc.d/ 与/etc/rc.d/init.d的关系关键词:Linux引导过程、运行级别、inittab与 init.d 与 rc.d一、 Linux的引导过程系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。

内核被加载到内存中之后,就开始执行我们的系统设置了。

一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。

从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。

内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。

二、运行级别(run level)Init进程是系统启动之后的第一个用户进程,所以它的pid(进程编号)始终为1。

init 进程上来首先做的事是去读取/etc/目录下 inittab文件中initdefault id值,这个值称为运行级别(run-level)。

它决定了系统启动之后运行于什么级别。

运行级别决定了系统启动的绝大部分行为和目的。

这个级别从0到 6 ,具有不同的功能。

不同的运行级定义如下:# 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)# 1 - 单用户模式# 2 - 多用户,没有 NFS# 3 - 完全多用户模式(标准的运行级)# 4 –系统保留的# 5 - X11 (x window)# 6 - 重新启动(千万不要把initdefault 设置为6,否则将一直在重启)三、 /etc/rc.d/与/etc/rc.d/init.d的关系先解释一下init.d。

这个目录存放的是一些脚本,一般是linux以rpm包安装时设定的一些服务的启动脚本。

arm版本linux系统的启动流程

arm版本linux系统的启动流程

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. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。

中标麒麟Linux服务器操作系统启动管理

中标麒麟Linux服务器操作系统启动管理

系统启动过程分析
• 第四阶段:Sys V Init初始化: –系统运行级别列表:
•0 关闭系统 •1 单用户模式(多用于密码恢复或通过/bin/sh避开有问 题的 /sbin/init) •2 多用户模式(丌支持NFS) •3 完全多用户模式 •4 未分配使用 •5 图形登录的多用户模式 •6 重新启动
• 启用/禁用服务: –# chkconfig --list –# chkconfig --level runlevel service action –# setup
• 启动和关闭服务: –# service servicename start | stop | status | reload… –# /etc/init.d/servicename start | stop | status | reload…
–在非系统状态下进行编辑
系统启动过程分析
• 第二阶段:GRUB启动引导 –GRUB 的安装,GRUB密码的设定和常用的启动命令行参数 –GRUB的密码设定:
•# grub-md5-crypt � 生成以md5加密的密钥字串 •# 在/boot/grub/grub.conf中应该包含的内容password --md5 xxxxxxxxxxxxxxxxxxxxx
–丌要把系统缺省运行级别设置为0或6,否则系统将丌 能 正常启动
系统启动过程分析
• 第四阶段:Sys V Init初始化: –inittab中常见的action:
• respawn:该命令终止则init会重新启动他; •wait: init在执行其他动作之前等待该进程终止; •once: 运行命令一次; •boot: 命令在启动过程中运行。忽略运行等级字段; •bootwait:命令在启动过程中运行,忽略运行等级字段。在继 续之前, init 等待该进程结束; •initdefault: 定义Linux 系统的默认运行级别;

第一次课项目1Linux系统安装与启动(共50张PPT)

第一次课项目1Linux系统安装与启动(共50张PPT)

工程问题1-Linux的版权问题
Linux是基于Copyleft〔无版权〕的软件模式进行发布的, Copyleft是与Copylright〔版权所有〕相对立的新名称,它是GNU
工程制定的通用公共许可证GPL〔General Public License〕。 GNU工程是由Richard Stallman于1984年提出 ,他建立了自由软件基金会
启动引导器程序,启动引导器再负责加载启动硬盘分区中的操作系统。
工程问题4 - G的RUSB hell。
按a键可以对高亮菜单项中的命令追加内核启动参数。 X Server:控制实际的显示与输入设备。
如完何本进 钱入工X程W需i要nKd解oow决sr的Sny问sSt题em:h执e行l根l:本配是置 对Bourne Shell的开展,在大局部情况下与 Bourne Shell兼容。 其后可以跟options选项将在内核载入时传给内核
1. 工程课题引入
2. Linux的根本知识 3. Linux的安装与根本配置
4. 现场安装演示案例 5. X Windows System 6. GRUB的安装与配置
7. 现场演示
课题引入-工程背景 1、网络操作系统在网络中的作用和地位是怎样的?
为网络中的用户提供了哪些效劳? 2、当前流行的网络操作系统有哪些?
工程问题1-Shell的版本
Bourne Shell:是贝尔实验室开发的版本。
统,它拥有如下一些特点:
R启e动d 引Ha导t E器n是te计rpBr算isAe机LS启in动Hux过简:程介中是运G行的N第U一的个真B正o的软u件rn,e通常A计g算a机in启动S时h在e通ll过,BIO是S自G检N后读U取操并运作行硬系盘统主引上导扇默区〔认MBR〕中的

Linux系统引导过程及排除启动故障

Linux系统引导过程及排除启动故障

Linux系统引导过程及排除启动故障⼀、Linux操作系统引导过程⼆、系统初始化进程1、init进程2、Systemd3、Systemd单元类型三、排除启动类故障【1】、修复MBR扇区故障(含实验过程)【2】、修复GRUB引导故障●⽅法⼆:进⼊急救模式,恢复GRUB引导程序(与MBR 引导扇区类似)●⽅法三:引导界⾯进⼊急救模式,重建GRUB菜单配置⽂件⽅案三实验四、遗忘root⽤户的密码实验过程⼀、Linux操作系统引导过程1.开机⾃检服务器主机开机以后,将根据主板BIOS中的设置对CPU、内存、显卡、键盘等设备进⾏初步检测,检测成功后根据预设的启动顺序移交系统控制权,⼤多时候会移交给本机硬盘。

总结:检测出第⼀个能够引导系统的设备,⽐如硬盘或者光驱2.MBR 引导当从本机硬盘中启动系统时,⾸先根据硬盘第⼀个扇区中MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导⽂件的分区;或者直接根据MBR 记录中的引导信息调⽤启动菜单(如 GRUB)。

总结:运⾏放在MBR扇区⾥的启动GRUB引导程序3.GRUB 菜单对于Linux操作系统来说,GRUB(统⼀启动加载器)是使⽤最为⼴泛的多系统引导器程序。

系统控制权传递给GRUB以后,将会显⽰启动菜单给⽤户选择,并根据所选项(或采⽤默认值)加载Linux内核⽂件,然后将系统控制权转交给内核。

CentOS 7 采⽤的是 GRUB2 启动引导器。

总结:GRUB引导程序通过读取GRUB配置⽂件/boot/grub2/grub.cfg,来获取内核和镜像⽂件系统的设置和路径位置4.加载 Linux 内核Linux内核是⼀个预先编译好的特殊⼆进制⽂件,介于各种硬件资源与系统程序之间,负责资源分配与调度。

内核接过系统控制权以后,将完全掌控整个Linux操作系统的运⾏过程。

CentOS 7系统中,默认的内核⽂件位于“/boot/vmlinuz-3.10.0-514.el7.x86_64”。

linux systemd service 的执行流程

linux systemd service 的执行流程

linux systemd service 的执行流程systemd是Linux系统中的一个初始化系统和服务管理器,它负责启动系统的各个组件和服务。

systemd通过使用单一进程和配置文件来替代传统的SysV init脚本,提供了更为先进和灵活的管理方式。

下面是systemd服务的执行流程,详细描述了服务的启动、运行和停止的过程。

1.系统引导:当计算机启动时,系统会加载内核并触发init进程,init进程会负责初始化系统。

在现代Linux系统中,init进程通常是systemd。

systemd的启动是由initramfs(初始内存文件系统)引导的,initramfs负责加载关键的驱动程序和文件系统,然后启动systemd。

2.systemd进程启动:一旦initramfs引导完成,systemd进程将被启动。

systemd会读取其配置文件,主要是/etc/systemd/system.conf和/etc/systemd/user.conf,以确定系统和用户级别的默认配置。

3.Target的激活:systemd使用”target”的概念,一个target是一组相关的服务的集合。

例如,graphical.target表示启动图形用户界面,multi-user.target表示启动多用户模式。

systemd会根据默认目标(通常是multi-user.target)启动相应的服务。

4.服务单元的激活:每个服务在systemd中都由一个单元文件(unit file)定义,这些文件通常存储在/etc/systemd/system/目录中。

systemd会读取目标关联的服务单元,并按需激活这些服务。

服务单元包括服务的配置信息、依赖关系、执行路径等。

5.依赖关系解析:systemd会解析服务单元之间的依赖关系,并按照正确的顺序启动这些服务。

依赖关系可以指定服务之间的启动顺序,确保在需要的时候正确地启动和停止服务。

Linux系统引导信息恢复与重建和双系统

Linux系统引导信息恢复与重建和双系统

Linux系统引导信息恢复与重建和双系统(win+linux)引导修复Linux系统引导信息的恢复与重建环境描述:硬件环境: vmworkstation 9linux系统: Red Hat Enterprise Linux Server release 5.6 32位Linux 内核: vmlinuz-2.6.18-238.el5Grub 版本: grub (GNU GRUB 0.97)本文操作和测试,参考:来自: 在自制Linux盘上安装GRUB网址: /thinkerabc/article/details/1804796为了模拟linux引导信息损坏场景, 在安装RHEL5时特意没有安装GRUB, 如下图:现在假定linux系统完好,而linux引导信息损坏的情况启动linux系统,看到黑屏和左上角的光标,系统将中止在此处, 如图通过linux安装光盘重建引导信息和启动菜单步骤如下:一. 从光盘启动到救援模式.1. 在BIOS中设置光盘启动,图略去2. 以linux安装光盘启动至如下画面,输入 linux rescue进入救援模式3. 这里选择English注意: 不要选择简体中文, 因为在救援模式下不支持中文, 会提示如下错误:4. 选择相应的键盘, 一般为us 美式键盘5. 选择设置网络信息,选择yes, 目的是可直接将所需修复的文件直接从现有正常的系统中直接COPY到当前系统.5.1. 选择要设置的网络接口5.2 设置IPv4地址信息.5.3 设置网关和DNS, 这里不设置也没关系, 除非正常的系统不在本网段.5.4 不填写网关和DNS会报错, 不过没关系.6. 救援模式下试图搜索linux根系统,且以读写模式挂载, 点continue7. 如果看到下面这个画面, 说明linux根系统已经找到,选择OK8. 由于找到的linux 根系统在/mnt/sysimage之下, 为了之后操作方便, 可以通过chroot命令改变根系统的外显目录二. 安装grub1. 首先查看当前硬盘的分区情况: fdisk -l注意boot下的*号, 说明/dev/sda1 是启动分区,boot分区我划分200M, 所以通过Blocks这列的可以看出/dev/sda1就是boot分区,1个Block = 1024Byte=1k; 所以200781 Blocks = 200M左右2. 查看/boot分区里的内容:boot分区里含有vmlinuz-2.6.18-238.el5 内核文件和initrd-2.6.18-238.el5.img 内存磁盘, 这两个文件启动时会用到3. 查看/boot/grub/目录下的内容: ls -a/boot/grub/里只有一张图片, 阶段1和阶段2文件都不在在4. 安装grub到启动分区即/dev/sda1, 通过grub-install注意:这里输入grub-install /dev/sda1, 如下图, 如果看到Installation finished. No error reported, 且没有其他报错, 则说明程序执行正常注意2: 如果有boot分区, 则/dev/sda1是boot分区, 如果没有boot分区, 则grub-install 后输入根分区设备名5. grub-install正确执行后, 会看到/boot/grub/下多了些文件:现在来简单的说明一下这些文件都是做什么用的!!!摘自:chinaunix上的文章,感谢引自: /uid-9078996-id-2010311.html能正常工作的grub应该包括一下文件:stage1、stage2、*stage1_5、menu.lst。

操作系统的启动过程

操作系统的启动过程

操作系统的启动过程操作系统(Operating System,简称OS)是计算机系统中最基本的软件之一,它负责管理和控制计算机的硬件和软件资源,为用户和应用程序提供丰富的功能和良好的用户体验。

在计算机启动时,操作系统也需要经历一系列的启动过程,以确保系统能够正常运行。

下面将详细介绍操作系统的启动过程。

一、引导阶段(Bootstrapping Stage)在计算机加电启动后,首先会由计算机的固化ROM(Read-Only Memory)中的引导程序开始执行。

这个引导程序位于计算机的主板上,负责启动操作系统。

引导程序首先会检测计算机中是否有可引导的设备,比如硬盘、光盘、USB等。

一旦发现可引导设备,引导程序就会将该设备中特定的引导扇区(Boot Sector)加载到计算机的内存中。

二、引导扇区的执行当引导扇区被加载到内存后,计算机的控制权交给了引导扇区中的代码。

引导扇区中的代码被称为引导加载程序(Boot Loader),它是一段特殊的机器指令,负责进一步加载操作系统的核心部分。

三、操作系统核心加载引导加载程序会根据预先设定的规则和算法,搜索计算机硬件设备,找到存放操作系统的特定分区或文件。

然后,它将操作系统的核心部分一次性地加载到计算机的内存中。

操作系统核心通常被保存为一个或多个可执行文件,也被称为内核(Kernel)。

四、内核初始化当操作系统核心被加载到内存后,内核开始执行,并进入初始化阶段。

在这个阶段,内核会对计算机的硬件进行自检和初始化,包括对处理器、内存、设备等的初始化操作。

内核还会为各个子系统和模块分配和初始化资源,准备操作系统运行时所需要的环境。

五、用户空间初始化在内核初始化完成后,操作系统会创建一个或多个用户空间(User Space)。

用户空间是操作系统为应用程序和用户提供的执行环境。

操作系统会根据系统配置和用户需求,初始化用户空间中的各个组件,比如图形界面、网络服务、文件系统等。

linux启动顺序讲解

linux启动顺序讲解

linux启动顺序讲解⼀、简单介绍RHEL开机时的先后顺序BIOS —> MBR —> Kernel —> init1、当电脑⼀打开电源时电脑就会进⼊BIOS(BIOS的⼯作主要是检测⼀些硬件设备);2、检测完后会进⼊MBR也就是boot loader(MBR位于硬盘的第⼀个扇区总共512bytes,其中前446bytes⾥⾯的编码是在选择引导分区也就是决定要由哪个分区来引导);3、载⼊系统的Kernel(核⼼),在Kernel⾥主要是载⼊电脑设备的驱动程序,以便可以控制电脑上的设备,并且以只读⽅式来挂载根⽬录,也就是⼀开始只能读取到根⽬录所对应的那个分区,所以/etc、/bin、/sbin、/dev、/lib这五个⽬录必须同根⽬录在⼀个分区中;4、最后启动init这个程序,所以init这个程序的进程编号为1,是Linux中第⼀个执⾏的程序;init这个程序会根据Run level来执⾏以下这些程序:·/etc/rc.d/rc.sysinit;·/etc/rc.d/rc 和etc/rc.d/rc?.d/·/etc/rc.d/rc.local·如果有适当的图形界⾯管理程序⼆、BIOS初始化时主要的三个任务BIOS(B asic I nput/O utput S ystem)1、电脑周边设备的检测,加电⾃检POST (Power on self test);2、BIOS会选择要由哪⼀个设备来开机,例如:软盘启动、光盘启动、⽹络启动、最常见的从硬盘启动;3、选择好由哪个设备开机后,就开始读取这个设备的MBR 引导扇区;三、介绍Boot Loader中的主要⼯作1、Boot Loader可以安装在两个地⽅:·安装在硬盘的MBR中;·当有时候MBR中被其他开机管理程序占⽤就可以将Boot Loader 安装在硬盘中的其中⼀个分区的引导扇区上,;2、Boot Loader的程序码分为两个阶段:(1)Boot Loader第⼀阶段的程序码⾮常⼩,只有446bytes,可以存⼊在MBR或是某⼀个分区的引导扇区⾥,(2)Boot Loader第⼀阶段的程序码是从boot 分区来载⼊的,就是说Boot Loader 第⼆阶段程序码存放在/boot 这个分区中;3、下⾯来看三个Boot Loader 的开机流程范例,如在⼀块硬盘中安装了两个系统分别为:windows 2003 和Red hat linux当电脑开机后,会先载⼊MBR通过第⼀阶段程序码来载⼊第⼆阶段程序码,进⼊GRUB开机菜单这⾥选择哪个系统就会载⼊相应的核⼼;四、介绍GRUB和grub.conf 这个配置⽂件的内容其实从MBR载⼊Boot Loader开始,载⼊Kernel,载⼊init这些程序之间都是由GRUB这个多重开机管理程序所负责的。

计算机及Linux操作系统开机启动过程详解

计算机及Linux操作系统开机启动过程详解

计算机及Linux操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载BIOS并执⾏、从磁盘加载启动区并执⾏、从磁盘加载操作系统并执⾏三步,是依次递进的,详情参阅)加载BIOS:按下开机键,主板ROM的BIOS被(被谁?)加载到到内存0xffff0处,CPU 将 PC 寄存器的值强制初始化为 0xffff0(⼀跳)。

执⾏BIOS代码:阶段1(0xffff0 处的内容):该⼊⼝地址处存的是⼀个跳转指令,跳转的⽬的地是内存0xfe05b位置,该位置存了BIOS的真正内容。

执⾏该跳转(⼆跳)。

阶段2(0xfe05b 处的内容):执⾏硬件检测、硬件初始化、建⽴中断向量表等⼯作后,找到磁盘上的启动区(或称引导区)加载到内存0x7c00位置,并跳转到该位置(三跳)。

执⾏启动区代码(0x7c00 处的内容):从磁盘加载OS内核到内存,与上⾯不同这⾥内存位置不是固定的了,并跳转到OS内核代码处(四跳)。

执⾏OS内核代码:包括开启分段机制、进⼊保护模式、开启中断机制等,执⾏完后系统由OS接⼿管理。

具体过程见下⽂“操作系统启动过程”部分。

整体过程概要:补充:BIOS位于主板ROM,启动时被加载到内存;启动区、OS位于磁盘,被先后加载到内存。

BIOS、启动区在内存的位置是固定的(为啥是这三个值?早期定死的);⽽OS在内存位置不是固定的。

启动区:若⼀个磁盘上0盘0道1扇区的内容(512B)的末两个字节为0x55、0xaa,则这该扇区会被BIOS识别为启动区,该磁盘会被当做可启动盘。

往⼀个磁盘烧录OS后之所以可以当做启动盘就是因为往该位置写⼊了这些特殊数据。

若装了多系统,则启动时会列出并让⽤户选择要启动的系统,这些系统就是根据上述条件被识别得到。

可见,⼀个程序只要其虚拟内存以0x7c00作为段地址,且按上述条件烧录到磁盘,则就可以被BIOS识别为启动区加载到内存执⾏。

因此,如果该程序逻辑中不是去加载OS⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。

第03章_Linux的初步使用

第03章_Linux的初步使用

3.2.2 退出系统(续)
• 关闭系统
# shutdown -h 12:30 在当天12点半关闭系统
# shutdown -h +10
在10分钟后关闭系统
# init 0(关闭系统) 关闭系统 # poweroff 关闭系统
# halt
系统停止
3.2.2 退出系统(续)
• 重启系统
# init 6

• • • •
• 3.reboot • reboot的工作过程差不多跟halt一样﹐不过它是引发主机重启﹐而 halt是关机。它的参数与halt相差不多。 • 4.init • init是所有进程的祖先﹐它的进程号始终为1﹐所以发送TERM信号给 init会终止所有的用户进程﹑守护进程等。shutdown 就是使用这种机 制。 • init定义了8个运行级别(runlevel), init 0为关机﹐init 1为重启。
第三章 Linux的初步使用
河北经贸大学 王春海
本章目标
• • • • • 了解Linux引导的整个过程 了解如何登录和退出系统 了解虚拟控制台的概念 掌握Linux的目录结构 掌握Linux中常见的文件类型
本章内容
3.1 引导过程
3.2 登录与推出系统
3.3 目录与文件的基本概念
3.1 引导过程
3.2.1 登录系统(续)
• 命令提示符
[root@localhost ~]#

登录帐户 主机名 工作目录 命令提示符号
#、$
3.2.2 退出系统
• 从当前的虚拟控制台中注销 [root@localhost ~]# exit
[root@localhost ~]# logout

Linux操作系统启动流程图文详解

Linux操作系统启动流程图文详解

Linux操作系统启动流程图⽂详解理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进⽽解决问题。

上图为Linux操作系统启动流程1.加载BIOS计算机电源加电质检,⾸先加载基本输⼊输出系统(Basic Input Output System,BIOS),BIOS中包含硬件CPU、内存、硬盘等相关信息,包含设备启动顺序信息、硬盘信息、内存信息、时钟信息、即插即⽤(Plug-and-Play,PNP)特性等。

加载完BIOS信息,计算机将根据顺序进⾏启动。

2.读取MBR读取完BIOS信息,计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所在的物理内存中。

被复制到物理内存的内容是Boot Loader,然后进⾏引导。

3.GRUB引导GRUB启动引导器是计算机启动过程中运⾏的第⼀个软件程序,当计算机读取内存中的GRUB配置信息后,会根据其配置信息来启动硬盘中不同的操作系统。

4.加载Kernel计算机读取内存映像,并进⾏解压缩操作,屏幕⼀般会输出“Uncompressing Linux”的提⽰,当解压缩内核完成后,屏幕输出“OK, booting the kernel”。

系统将解压后的内核放置在内存之中,并调⽤start_kernel()函数来启动⼀系列的初始化函数并初始化各种设备,完成Linux核⼼环境的建⽴。

5.设定Inittab运⾏等级内核加载完毕,会启动Linux操作系统第⼀个守护进程init,然后通过该进程读取/etc/inittab⽂件,/etc/inittab⽂件的作⽤是设定Linux的运⾏等级,Linux常见运⾏级别如下:•0:关机模式•1:单⽤户模式•2:⽆⽹络⽀持的多⽤户模式•3:字符界⾯多⽤户模式•4:保留,未使⽤模式•5:图像界⾯多⽤户模式•6:重新引导系统,重启模式6.加载rc.sysinit读取完运⾏级别,Linux系统执⾏的第⼀个⽤户层⽂件/etc/rc.d/rc.sysinit,该⽂件功能包括:设定PATH运⾏变量、设定⽹络配置、启动swap分区、设定/proc、系统函数、配置Selinux等。

简要分析linux系统的启动过程

简要分析linux系统的启动过程

简要分析linux系统的启动过程接触linux系统运维已经好⼏年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程:⼀般来说,所有的操作系统的启动流程基本就是:总的来说,linux系统启动流程可以简单总结为以下⼏步:1)开机BIOS⾃检,加载硬盘。

2)读取MBR,进⾏MBR引导。

3)grub引导菜单(Boot Loader)。

4)加载内核kernel。

5)启动init进程,依据inittab⽂件设定运⾏级别6)init进程,执⾏rc.sysinit⽂件。

7)启动内核模块,执⾏不同级别的脚本程序。

8)执⾏/etc/rc.d/rc.local9)启动mingetty,进⼊系统登陆界⾯。

linux系统安装时,如果要想设置开启启动项,可以:开机到BIOS提醒界⾯,按键F11(Dell服务器的做法)进⼊BIOS设置BOOT MENU,继⽽设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。

下⾯就linux操作系统的启动过程做⼀详细解析记录:加载内核操作系统接管硬件以后,⾸先读⼊ /boot ⽬录下的内核⽂件。

[root@bastion-IDC ~]# ll /boot/total 21668-rw-r--r--. 1 root root 105195 Nov 22 2013 config-2.6.32-431.el6.x86_64drwxr-xr-x. 3 root root 1024 Aug 22 16:31 efidrwxr-xr-x. 2 root root 1024 Aug 22 16:32 grub-rw-------. 1 root root 15217153 Aug 22 16:32 initramfs-2.6.32-431.el6.x86_64.imgdrwx------. 2 root root 12288 Aug 22 16:24 lost+found-rw-r--r--. 1 root root 193758 Nov 22 2013 symvers-2.6.32-431.el6.x86_64.gz-rw-r--r--. 1 root root 2518236 Nov 22 2013 System.map-2.6.32-431.el6.x86_64-rwxr-xr-x. 1 root root 4128368 Nov 22 2013 vmlinuz-2.6.32-431.el6.x86_64启动初始化进程内核⽂件加载以后,就开始运⾏第⼀个程序 /sbin/init,它的作⽤是初始化系统环境。

UBOOT引导Linux内核及向内核传递参数的方式

UBOOT引导Linux内核及向内核传递参数的方式

UBOOT引导Linux内核及向内核传递参数的⽅式 ⼀直以来没有想过有什么好的办法通过寄存器向内核传递参数,直到今天读UBOOT的实现⽅式。

在UBOOT中,引导内核最常⽤的⽅法是bootm命令,bootm命令可以引导“UBOOT格式”的内核。

先花点时间了解⼀下什么是“UBOOT格式”的内核吧:⽤UBOOT⾃带的mkimage命令⽣成的内核称为"UBOOT"格式的内核。

以下⾯这条命令为例: mkimage -n "Kernel 2.4.18" -A arm -O linux -T kernel -C none -a30007fc0 -e 30008000 -d 4020.bin vmlinux-2.4.18.img 其中与内核引导最密切的是-e 30008000,也就是内核的⼊⼝地址。

其它参数可以参考帮助信息。

其它UBOOT格式的内核与原来相⽐,只是进⾏(可选)了压缩,并在前⾯加了⼀个0x40⼤⼩的头。

这个头⾥放了内核的位置(0x30007fc0)和⼊⼝地址(0x30008000)和其它信息。

bootm命令执⾏时,先对头部信息等进⾏校验,然后把头信息放到⼀个结构⾥⾯。

最后根据内核类型调⽤相应的启动函数。

对于Linux⽽⾔就是do_bootm_linux,在启动函数⾥⾯,有这么⼀个操作:theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);,这是最关键的⼀个操作,将内核的⼊⼝地址0x30008000赋给了theKernel,在启动函数的最后,使⽤theKernel (0, bd->bi_arch_number, bd->bi_boot_params);启动内核。

根据传参规范,三个变量分别⽤r0,r1,r2传给内核,这样就巧妙地利⽤了函数指针进⾏了参数传递,实在是精妙!上⾯讲完了内核的引导及传参,需要引起注意的就是在使⽤mkimage命令⽣成内核时,-e后⾯的地址要⽐-a后⾯的地址偏移0x40,原因很简单,就不在细说了。

linux启动流程

linux启动流程

centos6启动流程•硬件启动阶段o Power on打开电源o BIOS▪POST: power on self test开机自检•初始化硬件设备,检测系统外围主要设备:cpu,memory,硬盘、显卡等▪确定启动设备•启动设备:硬盘、网络、U盘、光盘•如果启动设备是硬盘,则读取硬盘第一个扇区MBR,512字节•控制权交给bootloadero MBR▪MBR512字节• 1.446字节bootloadero启动加载器bootloader▪windows: ntloader仅仅启动os▪GRUB: GRand Unified Bootloader,CentOS 6 GRUB 0.97: GRUBLegacy, CentOS 7 以后使用GRUB 2.02• 2.64字节分区信息o16字节x4 partitions• 3.55aa标志位表示分区是否有效•grub启动阶段o stage1▪ 1.446字节bootloader•这是二进制的0101,写在MBR扇区的前446字节。

o单纯为了找到1.5阶段生成的bootloader上o stage1.5▪第一阶段446字节的bootloader无法存放内核位置,/boot/grub/grub.config里面有内核位置,但是/boot的文件系统需要加载,即想办法识别/boot的文件系统来读取config文件加载内核。

MBRbootloader太小无法容下文件系统的驱动代码,而且文件系统的类型有很多种,比如ext2 xfsext4 fat32等,MBRbootloader无法容下这么多种文件系统的驱动,所以,只能提供一个中间的过度bootloader即stage1_5 bootloader▪ 1.5阶段是MBR后面的分区,grub-install 时候,会将/boot/grub所在文件系统类型对应的stage1_5硬编码到MBR扇区后第一个分区前15个扇区中,因此这段空间位于MBR分区后,第一个分区之前。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
至此start_kernel()结束,基本的核心环境已经建立起来了。
对于I386平台
i386平台上的内核启动过程与此基本相同,所不同的主要是实现方式。
对于2.4.x版内核
2.4.x中变化比较大,但基本过程没变,变动的是各个数据结构的具体实现,比如Cache。
四.外设初始化--内核引导第二部分
bootsect.S完成加载动作后,就直接跳转到0x90200,这里正是setup.S的程序入口。 setup.S的主要功能就是将系统参数(包括内存、磁盘等,由BIOS返回)拷贝到 0x90000-0x901FF内存中,这个地方正是bootsect.S存放的地方,这时它将被系统参数覆盖。以后这些参数将由保护模式下的代码来读取。
对于I386平台
在i386体系结构中,因为i386本身的问题,在 "arch/alpha/kernel/head.S"中需要更多的设置,但最终也是通过call SYMBOL_NAME(start_kernel)转到start_kernel()这个体系结构无关的函数中去执行了。
所不同的是,在i386系统中,当内核以bzImage的形式压缩,即大内核方式(__BIG_KERNEL__)压缩时就需要预先处理bootsect.S和setup.S,按照大核模式使用$(CPP) 处理生成bbootsect.S和bsetup.S,然后再编译生成相应的.o文件,并使用 "arch/i386/boot/compressed/build.c"生成的build工具,将实际的内核(未压缩的,含 kernel中的head.S代码)与"arch/i386/boot/compressed"下的head.S和misc.c合成到一起,其中的 head.S代替了"arch/i386/kernel/head.S"的位置,由Bootloader引导执行(startup_32入口),然后它调用misc.c中定义的decompress_kernel()函数,使用 "lib/inflate.c"中定义的gunzip()将内核解压到0x100000,再转到其上执行 "arch/i386/kernel/head.S"中的startup_32代码。
在“arch/i386/boot” 目录下,bootsect.S是生成引导扇区的汇编源码,它首先将自己拷贝到0x90000上,然后将紧接其后的setup部分(第二扇区)拷贝到0x90200,将真正的内核代码拷贝到0x100000。以上这些拷贝动作都是以bootsect.S、setup.S以及vmlinux在磁盘上连续存放为前提的,也就是说,我们的bzImage文件或者zImage文件是按照bootsect,setup, vmlinux这样的顺序组织,并存放于始于引导分区的首扇区的连续磁盘扇区之中。
设置并启动核心调页线程kswapd(为了防止kswapd启动时将版本信息输出到其他信息中间,核心线调用kswapd_setup()设置kswapd运行所要求的环境,然后再创建 kswapd核心线程)
创建事件管理核心线程(start_context_thread()函数启动context_thread()过程,并重命名为keventd)
控制台初始化(为输出信息而先于PCI初始化,console_init())
剖析器数据结构初始化(prof_buffer和prof_len变量)
核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())
延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay())
核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init())
时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init())
提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options())
“arch/alpha/boot/bootp.c”以“main.c”为基础,可代替“main.c”与“head.S” 生成用于BOOTP协议网络引导的Bootloader。
Bootloader中使用的所有“srm_”函数在“arch/alpha/lib/”中定义。
以上这种Boot方式是一种最简单的方式,即不需其他工具就能引导Kernel,前提是按照 Makefile的指导,生成bootimage文件,内含以上提到的bootloader以及vmlinux,然后将 bootimage写入自磁盘引导扇区始的位置中。
当采用MILO这样的引导程序来引导Linux时,不需要上面所说的Bootloader,而只需要 vmlinux或vmlinux.gz,引导程序会主动解压加载内核到0x1000(小内核)或0x100000(大内核),并直接进入内核引导部分,即本文的第二节。
对于I386平台
i386系统中一般都有BIOS做最初的引导工作,那就是将四个主分区表中的第一个可引导 分区的第一个扇区加载到实模式地址0x7c00上,然后将控制转交给它。
创建目录cache("dentry_cache",dcache_init())
创建与虚存相关的cache("vm_area_struct","mm_struct",vma_init())
块设备读写缓冲区初始化(同时创建"buffer_head"cache用户加速访问,buffer_init())
一. Bootloader
在Alpha/AXP 平台上引导Linux通常有两种方法,一种是由MILO及其他类似的引导程序引导,另一种是由Firmware直接引导。MILO功能与i386平台的LILO相近,但内置有基本的磁盘驱动程序(如IDE、SCSI等),以及常见的文件系统驱动程序(如ext2,iso9660等), firmware有ARC、SRM两种形式,ARC具有类BIOS界面,甚至还有多重引导的设置;而SRM则具有功能强大的命令行界面,用户可以在控制台上使用boot等命令引导系统。ARC有分区(Partition)的概念,因此可以访问到分区的首扇区;而SRM只能将控制转给磁盘的首扇区。两种firmware都可以通过引导MILO来引导Linux,也可以直接引导Linux的引导代码。
创建页cache(内存页hash表初始化,page_cache_init())
创建信号队列cache("signal_queue",signals_init())
初始化内存inode表(inode_init())
创建内存文件描述符表("filp_cache",file_table_init())
对于2.4.x版内核
没有变化。
三.核心数据结构初始化--内核引导第一部分
start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。 这些动作有的是公共的,有的则是需要配置的才会执行的。
在start_kernel()函数中,
输出Linux版本信息(printk(linux_banner))
设置与体系结构相关的环境(setup_arch())
页表结构初始化(paging_init())
使用"arch/alpha/kernel/entry.S"中的入口点设置系统自陷入口(trap_init())
使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ())
除此之外,setup.S还将video.S中的代码包含进来,检测和设置显示器和显示模式。最 后,setup.S将系统转换到保护模式,并跳转到0x100000(对于bzImage格式的大内核是 0x100000,对于zImage格式的是0x1000)的内核引导代码,Bootloader过程结束。
init()函数作为核心线程,首先锁定内核(仅对SMP机器有效),然后调用 do_basic_setup()完成外设及其驱动程序的加载和初始化。过程如下:
总线初始化(比如pci_init())
网络初始化(初始化网络数据结构,包括sk_init()、skb_init()和proto_init()三部分,在proto_init()中,将调用protocols结构中包含的所有协议的初始化过程,sock_init())
对于2.4.x版内核
没有什么变化。
二.Kernel引导入口
在arch/alpha/vmlinux.lds 的链接脚本控制下,链接程序将vmlinux的入口置于 "arch/alpha/kernel/head.S"中的__start上,因此当Bootloader跳转到0x100000时, __start处的代码开始执行。__start的代码很简单,只需要设置一下全局变量,然后就跳转到start_kernel去了。start_kernel()是"init/main.c"中的asmlinkage函数,至此,启动过程转入体系结构无关的通用C代码中。
“arch/alpha/boot” 下就是制作Linux Bootloader的文件。“head.S”文件提供了对 OSF PAL/1的调用入口,它将被编译后置于引导扇区(ARC的分区首扇区或SRM的磁盘0扇区),得到控制后初始化一些数据结构,再将控制转给“main.c”中的start_kernel(), start_kernel()向控制台输出一些提示,调用pal_init()初始化PAL代码,调用openboot() 打开引导设备(通过读取Firmware环境),调用load()将核心代码加载到START_ADDR(见 “include/asm-alpha/system.h”),再将Firmware中的核心引导参数加载到ZERO_PAGE(0) 中,最后调用runkernel()将控制转给0x100000的kernel,bootloader部分结束。
相关文档
最新文档