深入Linux,Unix系统引导过程

合集下载

嵌入式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操作系统第一章:引言和背景知识Linux操作系统是一种免费开源的操作系统,以其稳定性和安全性而闻名。

本章将介绍Linux操作系统的背景知识,包括其起源、发展和主要特点。

第二章:选择适合您的Linux发行版Linux操作系统有许多不同的发行版本,每个版本都具有自己的特点和用途。

本章将指导您选择适合您需求的Linux发行版,并对常见发行版进行介绍。

第三章:准备安装所需材料在安装Linux操作系统之前,您需要准备一些必要的材料和设备。

本章将介绍您需要准备的硬件设备、安装介质和其他必要的准备步骤。

第四章:安装Linux操作系统本章将详细介绍如何安装Linux操作系统。

涵盖的内容包括从镜像文件创建安装介质、启动计算机并进入安装程序、分区和格式化磁盘、选择安装选项、设置用户账户和密码等。

第五章:初次启动和基本配置当安装完成后,您需要进行一些初次启动和基本设置,以确保Linux操作系统正常运行。

本章将介绍如何进行初次启动、配置网络连接、更新软件包、设置系统时区等。

第六章:使用Linux命令行界面Linux操作系统以其强大的命令行界面而著名,熟练使用命令行界面是运维人员的必备技能。

本章将介绍基本的Linux命令,包括文件和目录操作、用户和权限管理、进程管理等。

第七章:安装和配置常用应用程序本章将介绍如何安装和配置常用的Linux应用程序,例如Web 服务器、数据库、邮件服务器等。

同时,还将介绍如何使用包管理器进行软件的安装和更新。

第八章:远程访问和文件传输远程登录和文件传输是管理Linux系统的常见任务之一。

本章将介绍如何通过SSH协议远程登录Linux系统,并使用SCP或SFTP实现文件的传输和管理。

第九章:系统监控和故障排除在运维过程中,系统监控和故障排除是非常重要的。

本章将介绍常用的系统监控工具和技术,以及处理常见故障的方法。

第十章:安全性和更新Linux操作系统以其高度的安全性而闻名,但仍然需要采取一些额外的措施来确保系统的安全。

unix linux 系统管理技术手册 第5版

unix linux 系统管理技术手册 第5版

unix linux 系统管理技术手册第5版《Unix/Linux系统管理技术手册》第5版是一本经典的Unix/Linux系统管理技术权威指南,对于系统管理员和Linux用户而言,是一部不可或缺的参考资料。

该书分为8个章节,涵盖了Unix/Linux系统管理的方方面面,包括基础知识、系统安装、文件系统管理、用户和用户组管理、网络管理、进程管理、安全性和备份恢复等。

下面将对每个章节进行简要介绍。

第一章介绍了Unix/Linux的起源和发展历史,阐述了Unix/Linux 的基本概念和特点,以及Unix/Linux系统管理的基本原则和任务。

同时,还介绍了常用的Unix/Linux版本和发行版。

第二章讲解了Unix/Linux系统的安装和升级,包括硬件要求、分区的设计和创建、安装介质的制作和安装过程的详细步骤。

此外,还包括如何进行系统的升级和补丁的安装。

第三章主要涉及文件系统管理,包括文件系统的组织和层次结构、文件系统类型、文件系统的创建和管理、文件和目录的权限设置和修改、磁盘配额的管理等。

第四章介绍了用户和用户组的管理。

这包括用户账号的创建和管理、用户组的创建和管理、用户账号的权限和环境设置、sudo权限的管理等内容。

第五章讨论了网络管理,包括网络配置、主机名的设置、网络接口的配置和管理、网络服务的配置和管理、路由的配置和管理等。

还介绍了如何使用网络工具进行网络故障排除和监控。

第六章详细讲解了进程管理,包括进程的创建和管理、进程的优先级和调度、进程的监控和控制、进程间的通信等。

此外,还介绍了shell脚本编程和作业调度。

第七章涉及系统安全性,包括用户权限管理、文件权限管理、防火墙和入侵检测系统的配置和管理、日志的监控和审计、系统漏洞的修补等内容。

最后一章介绍了备份和恢复技术,包括备份策略的制定、备份工具的选择和使用、备份文件的恢复和验证、灾难恢复和数据恢复等。

总的来说,《Unix/Linux系统管理技术手册》第5版全面而深入地介绍了Unix/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系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本

Linux系统服务启动顺序Shell脚本在Linux操作系统中,有许多系统服务需要在启动时按照一定的顺序进行启动。

为了确保这些服务能够正确地依赖关系启动,我们可以使用Shell脚本来管理它们的启动顺序。

本文将介绍一种用Shell脚本来实现Linux系统服务启动顺序的方法。

一、背景介绍在Linux系统中,服务是一种在后台运行的程序,用于提供特定功能或服务。

在系统启动时,许多服务需要按照一定的顺序启动,以满足它们之间的依赖关系。

例如,数据库服务可能需要在网络服务启动之后才能正常工作。

通过Shell脚本管理服务启动顺序可以确保它们能够按照正确的依赖关系启动,避免冲突和错误。

二、Shell脚本的编写编写Shell脚本来管理服务的启动顺序需要遵循一定的规范。

下面是一种常用的方法:1. 定义服务启动顺序首先,我们需要定义每个服务的启动顺序。

可以将服务按照其依赖关系进行排序,确保依赖关系较低的服务先启动。

这样可以避免启动时的冲突和错误。

例如,假设我们有三个服务需要启动:A、B和C。

服务A不依赖于其他服务,服务B依赖于服务A,而服务C依赖于服务B。

因此,启动的顺序应为A、B、C。

2. 编写Shell脚本创建一个新的Shell脚本文件,例如`startup.sh`,并使用文本编辑器打开它。

在脚本中,先使用`#!/bin/bash`指定脚本使用的Shell解释器。

然后,按照定义的服务启动顺序,逐个启动每个服务。

下面是一个示例脚本,用于按照上述定义的服务启动顺序启动服务:```#!/bin/bash# 启动服务Aservice A start# 等待一段时间,确保服务A已经启动完成sleep 5# 启动服务Bservice B start# 等待一段时间,确保服务B已经启动完成sleep 5# 启动服务Cservice C start```在脚本中,使用`service`命令来启动每个服务。

在每个服务启动之后,可以使用`sleep`命令来等待一段时间,以确保服务已经完全启动。

unix安装教程

unix安装教程

unix安装教程Unix是一种多用户、多任务操作系统,被广泛应用于服务器和工作站。

在Unix系统中,通过命令行对系统进行操作和管理。

本文将介绍Unix系统的安装教程。

1. 下载Unix系统镜像文件:在官方网站或其他可靠页面下载需要的Unix系统镜像文件。

根据自己的需求选择合适的版本,比如最新稳定版或特定用途的版本。

2. 创建安装媒介:将下载的Unix镜像文件刻录到合适的介质上,比如CD、DVD或USB闪存驱动器。

使用相关软件,选择“镜像刻录”或“创建启动盘”的选项,按照提示完成刻录过程。

3. 设置启动顺序:将计算机的启动顺序改为从刚刚创建的安装媒介启动。

进入计算机的BIOS设置界面,找到“启动顺序”或“启动设备”这个选项,将光盘或USB设备移到首位。

4. 进入安装程序:重启计算机后,系统将从安装媒介启动。

进入安装程序界面后,按照提示进行操作。

可能需要选择语言、键盘布局和许可协议等。

5. 磁盘分区:在安装程序中,有一个磁盘分区的步骤。

这个步骤是为了将磁盘划分为不同的区域,以便存储操作系统和数据。

可以选择自动分区或手动分区。

自动分区会根据系统要求划分磁盘空间,而手动分区需要手动设置各个分区的大小和挂载点。

6. 系统安装:完成磁盘分区后,安装程序将会开始复制系统文件到磁盘中。

这个过程可能需要一些时间,耐心等待即可。

7. 用户设置:在安装程序中,会要求设置管理员(root)用户的用户名和密码。

此外,还可以创建其他用户账号,以便多用户的操作。

8. 完成安装:安装程序最后会给出安装完成的提示。

此时可以选择重启计算机,从磁盘启动已安装的Unix系统。

9. 初始设置:重启计算机后,系统会要求输入用户名和密码登录。

登录后,可以进行初始设置,比如语言设置、网络配置等。

10. 更新系统:安装完成后,如果系统版本比较旧,建议更新系统,以获得更好的性能和安全性。

可以使用unix系统自带的软件包管理器,通过命令行进行系统更新。

Linux操作系统和Unix操作系统介绍

Linux操作系统和Unix操作系统介绍

Linux操作系统和Unix操作系统介绍linux的操作系统和Unix操作系统很多人都不清楚之间的区别,下面由店铺为大家整理了linux操作系统和unix操作系统的介绍的相关知识,希望对大家有帮助!Linux操作系统和Unix操作系统介绍:UnixUNIX操作系统(尤尼斯),是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、DennisRitchie和DouglasMcIlroy于1969年在AT&T的贝尔实验室开发。

目前它的商标权由国际开放标准组织所拥有,只有符合单一UNIX 规范的UNIX系统才能使用UNIX这个名称,否则只能称为类UNIX(UNIX-like)。

操作系统,是美国AT&T公司于1971年在PDP-11上运行的操作系统。

具有多用户、多任务的特点,支持多种处理器架构,最早由肯·汤普逊(Kenneth Lane Thompson)、丹尼斯·里奇(Dennis MacAlistair Ritchie)于1969年在AT&T的贝尔实验室开发。

UNIX系统是一个多用户,多任务的分时操作系统。

UNIX的系统结构可分为两部分:操作系统内核(由文件子系统和进程控制子系统构成,最贴近硬件),系统的外壳(贴近用户)。

外壳由Shell解释程序,支持程序设计的各种语言,编译程序和解释程序,实用程序和系统调用接口等组成UNIX系统大部分是由C语言编写的,这使得系统易读,易修改,易移植。

UNIX提供了丰富的,精心挑选的系统调用,整个系统的实现十分紧凑,简洁。

UNIX提供了功能强大的可编程的Shell语言(外壳语言)作为用户界面具有简洁,高效的特点。

UNIX系统采用树状目录结构,具有良好的安全性,保密性和可维护性。

UNIX系统采用进程对换(Swapping)的内存管理机制和请求调页的存储方式,实现了虚拟内存管理,大大提高了内存的使用效率。

《LinuxUNIX系统编程手册》导读

《LinuxUNIX系统编程手册》导读

《LinuxUNIX系统编程⼿册》导读本书可以分为以下⼏个部分:1. 背景知识及概念UNIX、C语⾔以及 Linux的历史回顾,以及对UNIX标准的概述:《第1章历史和标准》。

以程序员为对象,对Linux和UNIX的概念进⾏介绍:《第2章基本概念》。

Linux和UNIX系统编程的基本概念:《第3章系统编程概念》。

2. 系统编程接⼝的基本特性⽂件I/O:《第4章⽂件I/O:通⽤的I/O模型》、《第5章深⼊探究⽂件I/O》。

内存分配:《》、《》、《》。

⽤户和组:《第8章⽤户和组》。

时间:《第10章时间》。

系统限制和选项:《第11章系统限制和选项》3. 系统编程接⼝的⾼级特性⽂件IO缓冲:《第13章⽂件I/O缓冲》。

⽂件系统:《第14章⽂件系统》。

⽂件属性:《第15章⽂件属性》。

扩展属性:《第16章扩展属性》。

访问控制列表:《第17章访问控制列表》。

⽬录和链接:《第18章⽬录和链接》。

信号:《第19章监控⽂件事件》、《第20章信号:基本概念》、《第21章信号:信号处理函数》、《第22章信号:⾼级特性》。

定时器:《第23章定时器与休眠》。

4. 进程、程序《》、《第9章进程凭证》、《》、《》、《》、《》、《》、《第34章进程组、会话和作业控制》、《第35章进程优先级和调度》、《第36章进程资源》、《》、《第38章编写安全的特权程序》、《第39章能⼒》、《第40章登录记账》、《第41章共享库基础》、《第42章共享库⾼级特性》。

5. 线程《》、《第30章线程:线程同步》、《第31章线程:线程安全和每线程存储》、《第32章线程:线程取消》、《第33章线程:更多细节》6. 进程间通信(IPC)《》:《第45章 System V IPC介绍》《第51章 POSIX IPC介绍》。

数据传输:《第44章管道和FIFO》、《第46章 System V 消息队列》、《》。

共享内存:《》、《第54章 POSIX 共享内存》。

Linux操作系统的编译和安装

Linux操作系统的编译和安装

Linux操作系统的编译和安装在正文规定的字数限制下,为了准确满足标题描述的内容需求,并确保内容排版整洁美观、语句通顺、全文表达流畅且无影响阅读体验的问题,本文将按照以下格式进行写作:一、简介Linux操作系统是一种开源的、自由的Unix-like操作系统,它广泛应用于各种领域,包括服务器、嵌入式设备等。

本文将重点介绍Linux 操作系统的编译和安装过程。

二、编译准备1. 下载源代码在编译Linux操作系统之前,首先需要从官方网站下载Linux内核的源代码包。

2. 安装必要的依赖软件在编译过程中,需要安装一些必要的软件和工具,如编译器、构建工具等。

三、编译步骤1. 解压源代码包使用解压命令将下载的源代码包解压到指定目录。

2. 配置编译选项进入源代码目录,并运行配置命令,根据需要选择不同的编译选项。

3. 执行编译命令运行编译命令开始编译操作系统内核,这个过程可能需要一段时间。

四、安装步骤1. 安装编译生成的内核镜像文件将编译生成的内核镜像文件复制到合适的位置,并修改相关配置文件以引导新编译的内核。

2. 安装相关系统文件运行安装命令,将其他必要的系统文件复制到适当的位置。

五、系统配置1. 修改引导加载程序根据系统的引导加载程序,如GRUB、LILO等,修改引导配置文件以支持新安装的内核。

2. 配置网络和驱动程序根据具体需求,配置网络设置和硬件驱动程序。

六、测试与验证1. 重新启动系统重新启动计算机,并选择新编译的内核进行引导。

2. 验证系统版本和功能运行相应的命令,验证新安装的Linux操作系统版本和功能是否正确。

七、常见问题解决1. 编译错误分析编译过程中出现的错误信息,根据错误提示进行逐步修复。

2. 硬件兼容性问题部分硬件设备可能需要额外的驱动程序或补丁文件才能正常运行,根据具体情况进行相应的处理。

八、总结通过本文的介绍,读者可以了解到Linux操作系统的编译和安装过程,同时了解到在实际操作中会遇到的一些常见问题及解决方法。

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”。

操作系统的启动过程

操作系统的启动过程

操作系统的启动过程操作系统(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⽽是直接输出数据,则该程序⾃⾝就是⼀个简洁的"操作系统"。

Linux系统入门教程

Linux系统入门教程
ook.ne ※ 2 ※
book 1991 年 9 月中旬,Linux 内核版本 0.01 问世了,由于它使用了 386 的任务切换特性,所以该操 w 作系统没有可移植性,并且只能使用 AT 硬盘,基本上不支持任何其他硬件。1991 年的 10 月 5 日, w t Torvalds 在 comp.os.minix 新闻组上发布消息,正式向外宣布 Linux 内核系统(free Minix-like kernel ne sources for 386-AT,内核版本 0.02)的诞生。这段消息可以称为 Linux 的诞生宣言,并且一直广为 et k. 流传。源代码被放置到一个 FTP 服务器供人们自由下载,立即引起了计算机迷们的注意,源代码被 n o 下载、测试、修改,并且结果最终被反馈给 Torvalds。 k. bo 在 0.02 版本发布的几周后,Linux 0.03 版本发布了;12 月份,又发布 0.10 版本3......然而 Linux o cn 并非仅由 Torvalds 一人独自开发,是由全世界不同地方的优秀程序员通过互联网共同开发的。加入 w. 开发的人由 comp.os.minix 新闻组上的计算机迷们增加到一百, 然后是数千,然后是数十万,这群 w 素未谋面的程序员们通过计算机网络使得 Linux 拥有世界上最大的开发群体和测试队伍。
et 1991 年,芬兰赫尔辛基大学的一位名叫李纳斯 托沃兹(Linus Torvalds)的学生为了解决 Minix .n 的接口及相关硬件设备的驱动程序的更新、添加新的协议等等问题,决定为使用 Minix 的用户写一 ook c 个可用于 386、486 或奔腾处理器的个人计算机上的类 UNIX 操作系统。和当时的许多其他学生一样, b . Torvalds 编写内核的另外一个动机是为了节省购买昂贵的 UNIX 计算机和软件的费用,同时也把它 cn ww 作为自己的校园实践,就这样 Torvalds 开始了 Linux 雏形的设计。 www. w 2 类 UNIX 是英文单词“UNIX-Like”的翻译,一个类 UNIX 操作系统是指其特性和运行方式和 UNIX 相似的操作系统,比如 BSD、FreeBSD、 t HP-UX、Minix、Linux、Mac OS X、Solaris 等等,但是类 UNIX 并不一定要遵守某一个 UNIX 版本的规范。

UNIX_Linux操作系统内核结构

UNIX_Linux操作系统内核结构

1.3.1 文件系统
/
bin
usr
etc
home
tmp
dev
who
ls
bin
lib
rc
ttys
st
teach
tty0
hd02
admin
hwconf
liu
wang
chen
aa
dir2 save
UNIX文件系统树示例
UNIX文件系统的特征: 1、树状层次结构 树根、树枝、树叶、路径 2、对文件数据的一致对待 文件为有序无格式的字节流,逻辑意义由使用者解释 3、文件管理 建立、删除、修改、备份、移动、替换 存储空间的分配和释放 4、文件的访问和保护 索引节点(inode)、文件描述符(fd) 用户分组、权限划分 5、设备文件管理 统一各外部设备的访问模式
1.3.3 构件原语
“软件复用”和“模块组装”理念
程序内部: 简单功能划分;纯代码设计 程序外部: 使用构件原语进行功能重叠和组装 UNIX包含两种构件原语: ① 输入输出重定向 ② 管道
I/O重定向(I/O redirect): 一个进程通常(default)打开三个文件: 标准输入文件(fd=0) 标准输出文件(fd=1) 标准错误输出文件(fd=2)
例如: grep grep grep grep
abc abc < file1 abc < file1 > file2 abc < file1 > file2 2> file3
管道(pipe):
A进程的输出 B进程的输入
A进程将标准输出重新定向到管道中去; B进程将标准输入重新定向从管道中来。 例如: ps -e | grep student3 | wc -l 查看当前系统中与用户student3相关的进程有多少

linux操作系统原理

linux操作系统原理

linux操作系统原理Linux操作系统是一种开源的、多用户、多任务的操作系统,基于Unix的设计理念和技术,由芬兰的林纳斯·托瓦兹(Linus Torvalds)在1991年首次发布。

其原理主要包括以下几个方面:1. 内核与外壳:Linux操作系统的核心是Linux内核,负责管理计算机的资源并为用户程序提供服务。

外壳(Shell)则是用户与内核之间的接口,提供命令行或图形用户界面供用户操作系统。

2. 多用户和多任务:Linux支持多用户和多任务,可以同时运行多个用户程序,并为每个用户分配资源。

多任务由调度器负责,按照一定的算法将CPU时间片分配给各个任务,以提高系统的利用率。

3. 文件系统:Linux采用统一的文件系统作为数据的存储与管理方式。

文件系统将计算机中的存储设备抽象成为一个层次化的文件和目录结构,使用户可以方便地访问和管理文件。

4. 设备管理:Linux操作系统通过设备驱动程序管理计算机的外部设备,如键盘、鼠标、打印机等。

每个设备都有相应的驱动程序,将硬件操作转换成可供内核或用户程序调用的接口。

5. 系统调用:Linux操作系统提供了一组系统调用接口,允许用户程序通过调用这些接口来访问内核提供的功能。

常见的系统调用包括文件操作、进程管理、内存管理等,通过系统调用可以使用户程序与操作系统进行交互。

6. 网络支持:Linux操作系统具有强大的网络功能,支持网络协议栈和网络设备驱动程序。

Linux可以作为服务器提供各种网络服务,如Web服务器、数据库服务器等。

7. 安全性:Linux操作系统注重安全性,提供了许多安全机制来保护系统和数据。

例如,文件权限控制、访问控制列表、加密文件系统等可以保护文件的机密性和完整性;防火墙和入侵检测系统可以保护网络安全。

总之,Linux操作系统具有高度的可定制性、稳定性和安全性,适用于服务器、嵌入式设备和个人计算机等各种场景。

在开源社区的支持下,Linux不断发展壮大,成为当今最受欢迎的操作系统之一。

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,它的作⽤是初始化系统环境。

UNIX基础教程

UNIX基础教程

UNIX基础教程UNIX是一种多用户、多任务操作系统,广泛用于Unix-like的操作系统中。

它提供了一个强大且灵活的环境,适用于各种不同的应用程序和领域。

本教程将介绍UNIX的基础知识,包括文件系统、命令行界面、进程管理和网络通信等。

一、文件系统UNIX的文件系统是以层次化的目录结构来组织文件和目录。

用户可以使用命令对文件进行创建、删除、移动和复制等操作。

1.目录结构:UNIX的目录结构以根目录(/)为起点,所有的文件和目录都从根目录开始。

2. 目录操作:用户可以使用命令如cd、ls、mkdir和rmdir等来操作目录。

cd用于切换目录,ls用于列出目录内容,mkdir用于创建目录,rmdir用于删除空目录。

3. 文件操作:用户可以使用命令如cat、cp、mv和rm等来操作文件。

cat用于查看文件内容,cp用于复制文件,mv用于移动文件,rm用于删除文件。

二、命令行界面UNIX的命令行界面是用户与系统交互的主要方式。

用户可以通过输入命令来执行各种操作。

1.命令格式:UNIX的命令由命令名称和选项参数组成。

选项参数用于修改命令的行为,可以是单个字符或长参数。

2. 常用命令:UNIX提供了许多常用的命令,如基本的文件和目录操作命令,如ls、cd、mkdir和rmdir;文件查找和文本处理命令,如find、grep和sed;系统信息和管理命令,如ps、df和top等。

3.命令提示符:UNIX的命令行界面会显示一个命令提示符,用户可以在提示符后输入命令。

通常,命令提示符由当前用户名和主机名组成。

三、进程管理UNIX支持多任务操作,可以同时执行多个程序。

用户可以使用命令来管理进程和程序。

1. 运行程序:用户可以使用命令如./和exec等来运行程序。

./用于运行当前目录下的可执行文件,exec用于替换当前进程并执行新程序。

2. 后台运行:用户可以使用命令如&和nohup等将程序置于后台运行。

&用于将程序放入后台运行,nohup用于使程序在用户注销后继续运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最近一直在专注的学习一样技术,主要就是Linux/Unix系统的引导过程,从最基本的机器加电一直到最终系统能够正确的使用为止,这个过程中涉及到了相当多的技术,以及各种技术的推陈出新,都在这个重要的过程中得以体现。

我之所以对这部分进行了分析,主要是工作上面需要这方面的知识,同时觉得很有意思,所以广泛的深入研究了一下。

好了,废话不多说了,开始来点干货吧,本文并非全部原创,参考了一些文章,具体请查看“参考”部分。

深入Linux/Unix系统引导过程Linux/Unix系统的引导过程包含了很多阶段,但是对于一个标准的系统的引导,大致的阶段是类似的,不同的平台会有一些不同之处(x86平台下主要使用LILO、SYSLINUX或是grub,SPARC平台下主要使用OBP作为loader)。

在接下来的章节中,我将从系统加电开始直至Linux/Unix内核被正式加载运行。

1 概述首先从高层的架构分析一下Linux/Unix引导流程,下面的图作为一种更加形象的说明,这样你可以从上次梗概的了解整个流程,为下面深入的分析打下基础。

从这张图中,总结一下大概的流程,分别是:系统启动、阶段1引导、阶段2引导、内核加载和用户态的初始化。

在系统启动阶段主要用的技术包括BIOS(最新的发展为EFI),阶段1引导主要用的技术包括Master Boot Record(最近的发展为GPT),阶段2引导主要用的技术包括LILO、GRUB、SYSLINUX、GRUB2(x86平台下)和OBP(SPARC平台下)。

这张图属于比较古老的一种介绍,在目前的技术发展下,每个阶段都有了一些变化。

这里。

2.2 EFI启动与传统MBR相比,GPT采用了不同的分区方式。

对于传统MBR,其结构主要如下:上图即对上文中所述的很形象的说明,在图中看到MBR被分成三个部分,分别是:Bootloader、分别表以及Magic Number。

其中Bootloader部分为stage1中被执行的起始部分,程序在这里被作为GRUB程序执行,详细的关于GRUB的内容将再下面章节中进行详细阐述。

相反,对于EFI系统中所采用的GPT分区方式,则采用了不同于MBR分区方式的形式,从下图中可以发现:如上图所示,GPT分区表主要包括:保护MBR、首要GPT头、首要GPT、备用GPT、备用GPT头和磁盘数据区。

保护MBR与正常的MBR区别不大,主要是分区表上的不同,在保护MBR中只要一个表示为0xEE的分区,以此来表示这块硬盘使用GPT分区表。

首要GPT头包含了众多信息,具体内容如下:偏移字节长度说明0x008签名,固定为ASCII码"EFI PART",16进制表示0x5452415020494645。

0x084版本号,目前的版本为V1.0,16进制表示0x00010000。

0x0C4分区表头的大小(单位是字节,通常是92字节,即5C 00 00 00)0x104GPT头中字节的CRC32校验0x144固定值00 00 00 000x188当前LBA(这个分区表头的位置)0x208备份LBA(另一个分区表头的位置)0x288第一个可用于分区的LBA(主分区表的最后一个LBA + 1)0x308最后一个可用于分区的LBA(备份分区表的最后一个LBA−1)0x3816磁盘GUID0x488分区表项的起始LBA0x504分区表项的数量0x544一个分区表项的大小(通常是128)0x584分区表CRC32校验0x5C420保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。

分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。

它还存储着它本身和分区表的CRC32校验。

固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否有错误,如果出错了,可以使用软件从硬盘最后的备份GPT分区表恢复整个分区表,如果备份GPT也校验错误,那么磁盘将不可用,系统拒绝启动。

接下来主要是128个分区表项,GPT分区表使用简单而直接的方式表示分区。

一个分区表项的前16字节是分区类型GUID。

例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。

接下来的16字节是该分区的唯一的GUID(这个指的是该分区本身,而之前的GUID指的是该分区的类型)。

在接下来是分区其实和末尾的64位LBA编号,以及分区的名字和属性。

具体结构如下表:偏移字节长度说明0x0016分区类型GUID 0x1016唯一的分区GUID 0x208开始LBA0x288结束LBA0x308分区属性0x3872分区名称(Unicode 码)3 阶段1的引导(GRUB中stage1过程)接下来开始真正的引导过程了,主要说明GRUP的引导。

总体上GRUB更像是一个mini os,只不过这个mini os的作用只是加载其他的操作系统,在GRUB中包括stage1、stage1.5(可选)和stage2,其中stage1和stage1.5属于boot loader,stage2属于mini os的内核部分。

GRUB 中stage1过程主要位于MBR的前446字节中(对于支持GPT分区的磁盘,同样有最开始的512字节作为保护MBR,保护MBR与正常的MBR区别不大,主要是分区表上的不同,在保护MBR中只要一个表示为0xEE的分区,以此来表示这块硬盘使用GPT分区表,不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作),之后的64字节为硬盘的分区表,最后两个字节为MBR结束标志位(0xAA55)。

stage1部分占用了446字节,其代码文件是源码目录下stage1/stage1.S文件,汇编后生成一个512字节的boot.img,被写在硬盘的0面0道1扇区中,作为硬盘的MBR。

stage1的工作很简单,就是加载0面0道2扇区上的512字节到0x8000,然后跳转到0x8000执行。

在0面0道2扇区上的512字节内容为stage1/start.S文件汇编后生成。

该扇区上的内容的作用是加载stage1.5或是stage2过程,并将控制权转交。

至于代码,这里就不进行分析了,感兴趣的读者可以去查看源码,不过对于GRUB和GRUB2,其stage1的源码位置不尽相同。

4 阶段2的引导(GRUB中stage1.5或stage2过程)在start过程将控制权转交后,接下来就是GRUB的核心过程了。

该过程之所以区分stage1.5和stage2,主要原因是GRUB和GRUB2的区别。

在GRUB2中,将stage1.5过程集成到了stage2的过程中,所以stage1.5过程仅仅是针对GRUB的。

下面将会分别介绍两种GRUB版本的两种过程。

4.1 GRUB中stage1.5过程Stage1.5过程很无辜,它的作用很单一,但是非常关键。

它的主要功用就是构造一个boot分区系统对应的文件系统,这样可以通过文件系统的路径(/boot/grub/)寻找stage2过程需要的core.img,进而加载到内存中开始执行。

Stage1.5存在于0面0道3扇区开始的地方,并一直延续十几k字节的区域,具体的大小与相应的文件系统的大小有关(文中涉及到了0面0道1-3+x扇区,这部分扇区为保留扇区,BIOS不会放置任何数据。

正因为如此如果转换到GPT分区形式,系统将不能被正确引导,如上文所示,MBR后面的扇区都被其他内容所占据)。

Stage1.5过程被构建成多种不同类型,但是功能类似,下面简单介绍一下基本的stage1.5过程的文件系统。

e2fs_stage1_5(针对ext2fs,可引导ext2和ext3文件系统)、fat_stage1_5(针对fat文件系统,可引导fat32和fat16)、ffs_stage1_5、jfs_stage1_5、minix_stage1_5、reiserfs_stage1_5、vstafs_stage1_5和xfs_stage1_5,这些文件被称为stage1.5过程,这些文件每个至少都在11k以上。

除此之外还有两个比较特殊的文件,分别为nbgrub和pxegrub,这两个文件主要是在网络引导时使用,只是格式不同而已,他们很类似与stage2,只是需要建立网络来获取配置文件。

由于stage1.5过程中会涉及到多个文件系统对应的文件,因此本文中主要以ext2fs为例进行说明,其他文件系统与此类似,可以同样进行分析理解。

对于ext2fs文件系统,用于生成该文件系统的stage1.5过程文件(e2fs_stage1_5)的代码为stage2/fsys_ext2fs.c文件。

在stage2/filesys.h文件中定义了每个文件系统对外的接口,用于上层调用,作为stage2过程寻找核心代码使用,文件系统一般被定义的接口主要就是三个函数,分别是mount、read和dir��数。

对应ext2fs,其定义的函数为:#ifdef FSYS_EXT2FS#define FSYS_EXT2FS_NUM 1int ext2fs_mount (void);int ext2fs_read (char *buf, int len);int ext2fs_dir (char *dirname);#else#define FSYS_EXT2FS_NUM 0#endif针对ext2fs有如上的函数名称,每个函数将具体在stage2/fsys_ext2fs.c文件中被定义,这里面没有包含任何的写的过程,对于bootloader而言仅仅读就可以完成任务了,没必要对其系统进行写操作。

其中ext2fs_mount函数用于检查文件系统类型,并将superblock读入到内存中;ext2fs_read函数和ext2fs_dir函数用于对文件系统具体的操作。

在stage2/fsys_ext2fs.c文件中除了需要对这三个函数的定义之外,还需要文件系统的属性的数据结构(superblock、inode和group结构,这些结构最初被定义在include/linux/ext2_fs.h文件中),通过这些数据结构描述一个文件系统。

如果读者有兴趣可以试着创建新的文件系统的支持,可以参照目前存在的一些文件系统的模板(实例)编写。

4.2 GRUB中stage2过程GRUB中的核心过程也就是stage2过程了,该过程主要是在文件系统建立以后选择合适的操作系统进行加载并转交控制权,达到最后引导操作系统的目标。

相关文档
最新文档