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 系统引导过程
启动流程启动时要加载核心,让核心来驱动整个硬件。
整个启动过程:1.加载BIOS的硬件信息,并获得第一个启动设备的代号(CMOS中设定的启动项)。
2.读取第一个启动设备的MBR的引导加载程序(lilo、grub、spfdisk)3.加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备。
4.核心执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件6.启动核心的外挂模块(/etc/modprobe.conf)7.Init 执行各个批处理文件(根据运行级别)。
8.Init 执行/etc/rc.d/rc.local文件9.执行/bin/login程序,等待用户登录。
10.登录之后开始以shell控制主机。
引导加载程序与核心的载入主机读取BIOS,并且了解主要的主机硬件信息后,主机便开始尝试加载操作系统。
主机首先读取的就是硬盘的主引导记录(MBR),在MBR中装有引导加载程序(比如说grub)。
主机刚启动时是不认识磁盘文件系统的,这就需要引导加载程序帮忙。
但我们知道MBR是整个硬盘的第一个扇区,整个大小为一个扇区的大小(512KB),而我们的加载程序却远远大于这个容量。
怎么办?引导加载程序分成两个阶段来执行:1,执行引导加载程序的主程序,这个主程序放在MBR或超级块中。
2,载入引导加载程序的所有设置文件与相关的环境参数文件。
一般来说,设置文件都放在/boot目录下。
引导加载程序必须能做到:●引导加载程序可以直接指定并取用核心文件,并加载到主存储器中。
●也可以将加载程序的控制权移交给下一个加载程序(超级块中的引导加载程序)。
grub是如何被载入的呢?grub有几个重要文档,stage1,stage2,以及stage1.5,这些文档都在/boot/grub下,grub被载入时有以下几个步骤。
Stage1阶段装载基本的引导程式(stage1),这也是安装在MBR中的内容,大小为512字节,但这并不意味着占用的空间为512字节,这还要看块的大小以及inode控制的块数。
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. 加载系统服务:启动初始化会加载并启动系统服务,比如网络服务、日志服务、时间同步服务等。
系统引导
系统引导- 系统引导-bootsect.S中的部分代 中的部分代 码
movw $BOOTSEG, %ax movw %ax, %ds movw $INITSEG, %ax movw %ax, %es movw $256, %cx subw %si, %si subw %di, %di cld rep movsw ljmp $INITSEG, $go … go: movw $0x4000-12, %di # 0x4000 is an arbitrary value >= # length of bootsect + length of # setup + room for stack; # 12 is disk parm size. # 将ds,ss都置成移动后代码所在的段处 都置成移动后代码所在的段处0x9000 都置成移动后代码所在的段处 # 设置堆栈 设置堆栈put stack at INITSEG:0x4000-12. # %ds = BOOTSEG,将ds段寄存器设为 段寄存器设为0x7c00 , 段寄存器设为 # %ax = %es = INITSEG,将es段寄存器设为 段寄存器设为0x9000 , 段寄存器设为 #移动计数值=256 移动计数值= 移动计数值 #源地址 源地址ds:si=0x07c0:0x0000 源地址 #目标地 目标地es:di=0x9000:0x0000 目标地 #清方向标志位 清方向标志位 #重复执行直到 重复执行直到cx=0 重复执行直到 #移动 个字 移动1个字 移动 #间接跳转,INITSEG指出跳转到的段地址 间接跳转, 间接跳转 指出跳转到的段地址
movw movw movw
%ax, %ds %ax, %ss %di, %sp
系统引导- 系统引导-bootsect.S中部分代码的解 中部分代码的解 释
Linux启动过程详解_MBR和GRUB概述
MBR和GRUB概述Linux 的启动流程目前比较流行的方式主要是以下步骤:1、引导器(例如 GRUB)启动;2、内核启动;3、系统进程启动与配置。
本文以 GRUB 为研究对象,对 GRUB 启动与内核启动两个部分进行描述,关于系统进程的进一步启动与配置将用另一篇文章来说明。
常见的目录结构(以 CentOS 5.3 为例):/boot|-- System.map-2.6.18-128.el5|-- System.map-2.6.18-128.el5xen|-- config-2.6.18-128.el5|-- config-2.6.18-128.el5xen|-- initrd-2.6.18-128.el5.img|-- initrd-2.6.18-128.el5xen.img|-- lost+found|-- memtest86+-1.65|-- message|-- symvers-2.6.18-128.el5.gz|-- symvers-2.6.18-128.el5xen.gz|-- vmlinuz-2.6.18-128.el5|-- vmlinuz-2.6.18-128.el5xen|-- xen-syms-2.6.18-128.el5|-- xen.gz-2.6.18-128.el5`-- grub|-- device.map|-- e2fs_stage1_5|-- fat_stage1_5|-- ffs_stage1_5|-- grub.conf|-- iso9660_stage1_5|-- jfs_stage1_5|-- menu.lst -> ./grub.conf|-- minix_stage1_5|-- reiserfs_stage1_5|-- splash.xpm.gz|-- stage1|-- stage2|-- ufs2_stage1_5|-- vstafs_stage1_5`-- xfs_stage1_5图一: CentOS 5.3 的 /boot 目录目录分作两大部分,一个是 /boot 目录下除 grub 目录以外的所有文件,这些是 Linux 的内核以及内核启动相关的一些文件;另一个就是 grub 下的所有文件, GRUB 引导器启动所需要的所有文件都在 grub 目录下。
linux_mips启动流程_存储相关
Linux-mips启动流程-存储相关linux内核启动的第一个阶段是从/arch/mips/kernel/head.s文件开始的。
而此处正是内核入口函数kernel_entry(),该函数定义在/arch/mips/kernel/head.s文件里。
kernel_entry()函数是体系结构相关的汇编语言,它首先初始化内核堆栈段,来为创建系统中的第一个进程进行准备,接着用一段循环将内核映像的未初始化数据段(bss段在_edata和_end之间)清零,最后跳转到/arch/mips/kernel/setup.c 中的start_kernel()初始化硬件平台相关的代码。
下面讲述start_kernel() 函数。
在这个函数中跟内存初始化的函数是setup_arch()。
第一部分:以函数调用关系为线索下面是函数之间调用关系的框图:第一章:start_kenel()->setup_arch()setup_arch(&command_line);每种体系结构都有自己的setup_arch() 函数,这些是体系结构相关的。
【如何确定编译那个体系结构的setup_arch() 函数呢?主要由linux 源码树顶层Makefile 中ARCH 变量来决定的。
例如:MIPS 体系结构的。
SUBARCH := mipsARCH ?= $(SUBARCH)】。
void __init setup_arch(char **cmdline_p){cpu_probe();调用函数cpu_probe(),该函数通过MIPS CPU的PRID寄存器来确定CPU类型,从而确定使用的指令集和其他一些CPU参数,如TLB等prom_init();prom_init() 函数是和硬件相关的,做一些低层的初始化,接受引导装载程序传给内核的参数,确定mips_machgroup,mips_machtype 这两个变量,这两个变量分别对应着相应的芯片组合开发板;cpu_report();打印cpu_probe() 函数检测到的CPU 的Processor ID。
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”。
Slackware Linux操作系统启动过程详解
Slackware Linux操作系统启动过程详解Joe Brockme IE r 研究了Slackware Linux init 进程。
他讨论了系统如何初始化服务、各种运行级别是什么,以及如何从缺省安装中添加或除去服务来定制系统。
我们的示例使用x86 平台上的Slackware Linux 发行版(请参阅本文后面的参考资料)。
大多数信息可用于其它Linux 发行版,但在细节处会略有不同。
尤其是,与其说Slackware 的init 结构类似于System V 结构,还不如说它更类似于BSD Unix结构,尽管Slackware 的最新发行版中的程序做了一些让步,它们要将服务添加到启动,但期望这些服务是System V 目录结构。
(请参阅侧栏,“BSD 和系统V init 脚本之间的差异”。
)所有进程的父代当Linux 机器引导时,究竟会发生什么?在计算机的BIOS 完成其任务后,系统会读取硬盘(或软盘,或CD-ROM,或Zip 驱动器……Linux 是非常灵活的)的第一位,并会遇到引导装入程序。
虽然GRUB 和其它装入程序也逐渐变得流行,但通常这就是Linux 装入程序(LInux LOader),一般称作LILO。
然后LILO 将Linux 内核装入内存,并开始展示它的魔力。
Linux 内核初始化了诸如SCSI 卡之类的设备,以及其它内核中内置的硬件设备。
然后内核运行init,它是除内核之外在系统运行的第一个进程。
如果执行ps ax | grep 1 ,就会看到init 的进程ID (PID) 是1。
装入init 之后,它会读取inittab 以查看下一步做什么。
inittab 告诉init 要进入什么运行级别,以及在哪里可以找到该运行级别的配置文件。
运行级别运行级别是由系统上的所有服务在某个给定时间定义的(基本上是操作方式)。
Linux 可以有几种操作方式:单用户方式、单用户联网方式、多用户方式、始于X 窗口的多用户方式,等等。
grub启动过程
第二阶段:
BIOS通过下面两种方法之一来传递引导记录:
第一, 将控制权传递给initial program loader(IPL),该程序安装在磁盘主引导记录(MBR)中
/boot/grub/stage2 /etc/rc.d/rc<#>.d
/etc/rc.d/init.d/*
stage 1:MBR(512 字节,0头0道1扇区),前446字节存放的是 stage1,后面存放硬盘分区表信息,BIOS将stag1载入内存中0x7c00处并跳转执行。stage1(/stage1/start.S)的任务非常单纯,仅仅是将硬盘0头0道2扇区读入内存。0头0道2扇区内容是源代码中的/stage2/start.S,编译后512字节,它是stage2或者stage1_5的入口。
BIOS启动引导阶段 GRUB启动引导阶段 内核阶段 /init/sysinit阶段
==================================================================================================
读取/boot/grub.conf文件并显示启动菜单;
装载所选的kernel和initrd文件到内存中
第三阶段:内核阶段:
运行内核启动参数;
解压initrd文件并挂载initd文件系统,装载必须的驱动;
start.S的主要功能是将stage2或stage1_5从硬盘载入内存,如果是stage2,则载入0x820处;如果是 stage1_5,则载入0x2200处。
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操作系统开机启动过程详解从按下开机键开始的计算机启动过程:(主要包括从主板加载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服务器操作系统启动管理
系统启动过程分析
• 第二阶段:GRUB启动引导: (安装GRUB到 MBR并执行GRUB中的启动引导程序) –MBR(Master Boot Record)磁盘主引导记录:
•位于磁盘0磁道0柱面1扇区的前446字节,后64字节为分 区表; • 通常用于装载系统引导程序;
• IPL(Initial Program Loader):
–在非系统状态下进行编辑
系统启动过程分析
• 第二阶段:GRUB启动引导 –GRUB 的安装,GRUB密码的设定和常用的启动命令行参数 –GRUB的密码设定:
•# grub-md5-crypt � 生成以md5加密的密钥字串 •# 在/boot/grub/grub.conf中应该包含的内容password --md5 xxxxxxxxxxxxxxxxxxxxx
–BIOS基本作用:
•对系统执行整体和基本检查——POST(Power On Self Test ); • 为键盘、视频设备、串行口初始化核心设备驱动并分配资源 ; • 选择合适的引导设备(软驱、硬盘、CD-ROM、PXE); • 将磁盘第一块(512字节)装入内存并传递引导权到该区域; • (任何引导盘的第一个数据块都包含一个可执行文件——引 导程序)
• default=N • timeout=N • splashimage=file •password plaintext •password - -md5 ciphertext • hiddenmenu
系统启动过程分析
• 第二阶段:GRUB启动引导: –GRUB Shell的几种工作模式:
• 挄键e:编辑模式; • 挄键c:命令模式; • 挄键a:附加模式;
系统启动过程分析
• 第二阶段:GRUB启动引导:
中标麒麟Linux服务器操作系统启动管理
中标麒麟linux服务器操作系统启动管理技术创新变革未来中标麒麟linux服务器操作系统培训系列?中标麒麟linux服务器操作系统的基本启动过程?中标麒麟linux服务器操作系统启动过程分析?linux系统过程概述
中标麒麟Linux服务器操作系统培训系列
中标麒麟Linux服务器操作系统启动管理
技术创新,变革未来
•/etc/inittab的诧法结构:‖id : runlevel : action : command‖; • 设定系统默认启动运行级别; • 设定或者自定义打开终端以及开启的方法;
系统启动过程分析
• 第四阶段:Sys V Init初始化: –系统进入挃定运行级别并启动脚本、开启终端和图形 界 面的丼例:
• 启用/禁用服务: –# chkconfig --list –# chkconfig --level runlevel service action –# setup
• 启动和关闭服务: –# service servicename start | stop | status | reload… –# /etc/init.d/servicename start | stop | status | reload…
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系统启动流程可以简单总结为以下⼏步: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,它的作⽤是初始化系统环境。
LinuxBoot,Kernel和Service介绍
LinuxBoot,Kernel和Service介绍Linux 启动过程是初始化系统的过程。
它包括从第⼀次打开计算机电源到⽤户界⾯完全可操作时发⽣的所有事情。
充分了解引导过程中的步骤可能有助于您解决问题,以及根据您的需要调整计算机的性能。
另⼀⽅⾯,启动过程可能相当技术性,您可以在不了解所有细节的情况下开始使⽤ Linux。
第⼀个步骤:BIOS启动基于 x86 的 Linux 系统涉及许多步骤。
当计算机开机时,基本输⼊/输出系统 (BIOS) 会初始化硬件,包括屏幕和键盘,并测试主内存。
此过程也称为 POST(开机⾃检)。
BIOS 软件存储在主板上的 ROM 芯⽚上。
此后,引导过程的其余部分由操作系统 (OS) 控制。
Master Boot Record (MBR) and Boot Loader⼀旦 POST 完成,系统控制就会从 BIOS 传递到引导加载程序。
引导加载程序通常存储在系统中的硬盘之⼀上,或者在引导扇区(对于传统BIOS/MBR 系统)或 EFI 分区(对于更新的(统⼀)可扩展固件接⼝或 EFI/UEFI 系统)。
到此阶段为⽌,机器不会访问任何⼤容量存储介质。
此后,有关⽇期、时间和最重要外围设备的信息从 CMOS 值中加载(在使⽤电池供电的内存存储技术后,即使系统断电也能跟踪⽇期和时间) .有许多⽤于 Linux 的引导加载程序;最常见的是 GRUB(⽤于 GRand Unified Boot loader)、ISOLINUX(⽤于从可移动媒体启动)和DAS U-Boot(⽤于在嵌⼊式设备/设备上启动)。
⼤多数 Linux 引导加载程序可以提供⼀个⽤户界⾯,⽤于选择引导 Linux 的替代选项,甚⾄可能安装的其他操作系统。
在引导 Linux 时,引导加载程序负责将内核映像和初始 RAM 磁盘或⽂件系统(其中包含启动系统所需的⼀些关键⽂件和设备驱动程序)加载到内存中。
Boot Loader in Action引导加载程序有两个不同的阶段:对于使⽤ BIOS/MBR ⽅法的系统,引导加载程序位于硬盘的第⼀个扇区,也称为主引导记录 (MBR)。
linux reboot调用流程
linux reboot调用流程一、引言在使用Linux操作系统过程中,重启系统是一个常见的操作。
本文将介绍Linux中reboot命令的调用流程,包括该命令的功能、使用方法以及内部实现原理。
二、reboot命令的功能和使用方法reboot命令是Linux系统提供的一个用于重启系统的命令。
通过执行reboot命令,可以将系统重新启动,使之进入重启流程。
使用reboot命令的方法非常简单,只需要在终端中输入"reboot"即可。
在执行命令之前,用户需要拥有足够的权限,通常需要是root用户或具有sudo权限的用户。
在输入命令后,系统会进行一系列的操作,最终实现系统的重启。
三、reboot命令的调用流程1. 用户输入reboot命令。
2. 系统解析命令,确定命令为reboot。
3. 系统检查当前用户的权限,如果权限不足,则提示用户需要提升权限。
4. 系统发送信号给init进程。
5. init进程接收到信号后,判断信号类型为重启信号。
6. init进程向所有其他进程发送SIGTERM信号,要求它们进行退出操作。
7. 其他进程接收到SIGTERM信号后,进行清理工作,并向init进程发送SIGCONT信号,表示清理完成。
8. init进程等待一段时间,以确保其他进程完成清理工作。
9. init进程向内核发送重启命令。
10. 内核收到重启命令后,关闭所有系统设备和文件系统。
11. 内核重新初始化系统硬件。
12. 内核加载引导程序,并将控制权交给引导程序。
13. 引导程序加载操作系统内核。
14. 操作系统内核启动,并进行初始化操作。
15. 操作系统内核加载系统服务和驱动。
16. 操作系统初始化完成后,系统进入用户空间。
17. 用户空间加载用户配置和应用程序。
18. 用户可以重新登录系统。
四、reboot命令的内部实现原理reboot命令的内部实现原理涉及到操作系统内核和相关的系统进程。
当用户输入reboot命令后,系统会首先通过解析命令确定其为reboot命令,并检查用户的权限。
CentOS系列--linux启动顺序
系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化,加载内核。
内核被加载到内存中之后,就开始执行了。
一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。
从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。
内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程。
系统首先启动init进程,该进程先会执行/etc/rc.d/rc.sysinit,然后去读/etc/inittab文件决定运行模式,根据默认运行模式读取/etc/rc.d/rc $RUNLEVEL文件夹下的执行程序连接,这些文件以K或S开头,它们都是指向init.d/的一些软连接。
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,否则将一直在重启)rc.d的内容如下:init.d/ :各种服务器和程序的二进制文件存放目录。
rc $RUNLEVEL.d/: 各个启动级别的执行程序连接目录。
里头的东西都是指向init.d/的一些软连接。
具体的后边叙述。
还有三个脚本:rc.sysinit, rc, rc.local如图:redhat的启动方式和执行次序是:加载内核执行init程序/etc/rc.d/rc.sysinit # 由init执行的第一个脚本/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式/etc/rc.d/rc.local/sbin/mingetty # 等待用户登录在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:调入keymap以及系统字体启动swapping设置主机名设置NIS域名检查(fsck)并mount文件系统打开quota装载声卡模块设置系统时钟等等。
Linux文件系统启动过程及login的实现(busybox)
Linux⽂件系统启动过程及login的实现(busybox)1. busybox简介busybox是⼀个集成了⼀百多个最常⽤linux命令和⼯具的软件,它将许多常⽤的LINUX命令和⼯具结合到了⼀个单独的可执⾏程序中。
虽然与相应的GNU⼯具⽐较起来,busybox所提供的功能和参数略少,但在⽐较⼩的系统(例如启动盘)或者嵌⼊式系统中,已经⾜够了。
busybox在设计上就充分考虑了硬件资源受限的特殊⼯作环境。
它采⽤⼀种很巧妙的办法减少⾃⼰的体积:所有的命令都通过“插件”的⽅式集中到⼀个可执⾏⽂件中,在实际应⽤过程中通过不同的符号链接来确定到底要执⾏哪个操作。
例如最终⽣成的可执⾏⽂件为busybox,当为它建⽴⼀个符号链接ls的时候,就可以通过执⾏这个新命令实现列⽬录的功能。
采⽤单⼀执⾏⽂件的⽅式最⼤限度地共享了程序代码,甚⾄连⽂件头、内存中的程序控制块等其他操作系统资源都共享了,对于资源⽐较紧张的系统来说,是最合适不过了。
Busybox配置如下:Build Options--->[*] Build BusyBox as a static binary (no shared libs)Installation Options --->Login/Password Management Utilities --->Do you want to build BusyBox with a Cross Compiler。
如果要对其他平台进⾏编译就要选择它并设置相应的编译程序前缀。
我们选择armv5l-linux-,前⾯加上绝对路径。
Login/Password Management Utilities--->[*]Use internal password and group functions rather than system functions。
这⾥设置使⽤busybox⾃⼰的password和shadow⽂件的功能。
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
halt命令 命令: 5.6.2 halt命令:关闭系统
halt是关闭系统的快捷命令。执行halt命令其实是相当 是关闭系统的快捷命令。执行 是关闭系统的快捷命令 命令其实是相当 于执行带“ 选项的 选项的shutdown命令。halt命令的格式如下 命令。 于执行带“-h”选项的 命令 命令的格式如下 所示。 所示。 halt [-n] [-w] [-d] [-f] [-i] [-p] [-h]
5.4
内核映像
5.5
init进程 init进程
init进程是 进程是Linux系统所有进程的起点,内核在完成内 系统所有进程的起点, 进程是 系统所有进程的起点 核引导后,便会加载init进程,其进程号是 。init进程启动 进程, 核引导后,便会加载 进程 其进程号是1。 进程启动 会初始化操作系统,并启动特定的运行级别( 后,会初始化操作系统,并启动特定的运行级别( Runlevel)下的自动运行程序。用户可以通过更改相关的 )下的自动运行程序。 配置文件或使用图形化配置工具“服务配置” 配置文件或使用图形化配置工具“服务配置”,自定义需要 在系统启动时自动运行的服务。 在系统启动时自动运行的服务。
reboot命令 命令: 5.6.3 reboot命令:重启系统
reboot是重启系统的快捷命令。执行该命令,相当于 是重启系统的快捷命令。执行该命令, 是重启系统的快捷命令 执行带“ 选项的 选项的shutdown命令。该命令的格式如下: 命令。 执行带“-r”选项的 命令 该命令的格式如下: reboot [-n] [-w] [-d] [-f] [-i] [-p] [-h]
5.1
Linux系统启动过程简介 Linux系统启动过程简介
由于在Linux系统的启动过程中会出现非常多的提示信 系统的启动过程中会出现非常多的提示信 由于在 而且很多启动信息都是在屏幕上一闪而过, 息,而且很多启动信息都是在屏幕上一闪而过,所以对于很 系统的初学者来说, 多Linux系统的初学者来说,可能会觉得 系统的初学者来说 可能会觉得Linux的启动过程 的启动过程 非常神秘和复杂。其实Linux系统的启动过程并不是大家想 非常神秘和复杂。其实 系统的启动过程并不是大家想 象中的那么复杂,其过程可以分为5个阶段 个阶段。 象中的那么复杂,其过程可以分为 个阶段。 1.BIOS加电自检 . 加电自检 2.加载主引导加载程序(MBR) .加载主引导加载程序( ) 3.加载次引导加载程序(GRUB) .加载次引导加载程序( ) 4.Linux内核映像 . 内核映像 5.init进程 . 进程
5.1
Linux系统启动过程简介 Linux系统启动过程简介
启动计算机
BIOS加电自检
加载主引导加载程序(MBR)
加载次引导加载程序(GRUB)
Linux内核映像
init进程
接受用户登录
5.2
BIOS加电自检 BIOS加电自检
X86计算机在启动后首选会进行 计算机在启动后首选会进行BIOS的加电自检,检 的加电自检, 计算机在启动后首选会进行 的加电自检 测计算机的硬件设备,然后按照CMOS设置的顺序搜索处于 测计算机的硬件设备,然后按照 设置的顺序搜索处于 活动状态并且可以引导的设备。引导设备可以是软盘、 活动状态并且可以引导的设备。引导设备可以是软盘、光驱 设备、 、USB设备、硬盘设置是网络上的某个设备。 设备 硬盘设置是网络上的某个设down命令:关闭或重启系统
使用shutdown命令可以安全地重启或关闭系统。当用 命令可以安全地重启或关闭系统。 使用 命令可以安全地重启或关闭系统 户执行shutdown命令后,系统会通知所有已经登录的用户 命令后, 户执行 命令后 系统将要关闭,然后拒绝任何新的用户登录, 系统将要关闭,然后拒绝任何新的用户登录,同时向系统中 进程发送SIGTERM信号,这样就可以让应用程序有足够的 信号, 进程发送 信号 时间提交数据。启动或关闭系统是通过向init进程发送信号 时间提交数据。启动或关闭系统是通过向 进程发送信号 要求它改变运行级别来实行的。其中,级别0被用来关闭 ,要求它改变运行级别来实行的。其中,级别 被用来关闭 系统,级别6为重启系统 级别1为单用户模式 为重启系统, 为单用户模式。 系统,级别 为重启系统,级别 为单用户模式。shutdown 命令的格式如下: 命令的格式如下: shutdown [-t sec] [-arkhncfFHP] time [warningmessage]
init进程简介 5.5.1 init进程简介
内核映像在完成引导后,便会启动 进程。 内核映像在完成引导后,便会启动init进程。init进程对 进程 进程对 应的执行文件为/sbin/init,它是系统中所有进程的发起者和 应的执行文件为 , 控制者,所有的进程都是由它所衍生。如果init进程出现问题 控制者,所有的进程都是由它所衍生。如果 进程出现问题 系统中的其他进程也会随之而受影响。 ,系统中的其他进程也会随之而受影响。 1.作为所有进程的父进程参照对象 . 2.运行不同级别的程序 .
5.5.3 配置自动运行服务
配置自动运行服务涉及的文件较多, 配置自动运行服务涉及的文件较多,如果完全由用户 手工配置,其过程比较繁琐,所以在Red Hat Enterprise 手工配置,其过程比较繁琐,所以在 Linux 5.2中提供有一个图形配置工具,可以有效地简化配 中提供有一个图形配置工具, 中提供有一个图形配置工具 置过程。用户首先要创建服务对应的启动关闭脚本, 置过程。用户首先要创建服务对应的启动关闭脚本,脚本的 格式一般为: 格式一般为:
5.3.1 引导加载程序的启动
Red Hat Enterprise Linux 5.2默认安装的引导加载程 默认安装的引导加载程 序是GRUB,是目前最常用的 引导加载程序。 序是 ,是目前最常用的Linux引导加载程序。其引导 引导加载程序 过程分为两个阶段,第一阶段是保存在MBR中的主引导加 过程分为两个阶段,第一阶段是保存在 中的主引导加 载程序的加载。 中的主引导加载程序是一个512字节大 载程序的加载。MBR中的主引导加载程序是一个 中的主引导加载程序是一个 字节大 小的映像,其中包含有机器的二进制代码和一个小分区表。 小的映像,其中包含有机器的二进制代码和一个小分区表。 主引导加载程序的任务就是查找并加载保存在硬盘分区上的 次引导加载程序,它通过分区表查找活动分区, 次引导加载程序,它通过分区表查找活动分区,然后将活动 分区的次引导加载程序从设备读入内存中并运行, 分区的次引导加载程序从设备读入内存中并运行,进入引导 加载程序的第二阶段。 加载程序的第二阶段。 次引导加载程序也被称为内核加载程序, 次引导加载程序也被称为内核加载程序,这个阶段的 任务是加载Linux内核。一旦次引导加载程序被加载到内存 内核。 任务是加载 内核 中后,便会显示GRUB的图形界面,在该界面中用户可以通 的图形界面, 中后,便会显示 的图形界面 过上下方向键选择需要加载的操作系统以及它们的内核。 过上下方向键选择需要加载的操作系统以及它们的内核。
init进程的引导过程 5.5.2 init进程的引导过程
进程获得控制权后, 当init进程获得控制权后,它首先会执行 进程获得控制权后 /etc/rc.d/rc.sysinit脚本,根据脚本中的代码配置环境变量 脚本, 脚本 配置网络、启用Swap、检查并挂载文件系统、执行其他 、配置网络、启用 、检查并挂载文件系统、 系统初始化所必须的步骤等。 系统初始化所必须的步骤等。
#!/bin/bash # chkconfig: # description: # case "$1" in start) stop) status) reload) restart) *) esac exit $RETVAL
5.6 重启和关闭系统
Linux下常用的关机 重启命令有 下常用的关机/重启命令有 下常用的关机 重启命令有shutdown、root、 、 、 halt以及 ,它们都可以达到重启系统的目的,但每个命 以及init,它们都可以达到重启系统的目的, 以及 令的过程过程都有所不同。 令的过程过程都有所不同。在本节的内容中将会介绍这些命 令的使用方法,以及它们之间的区别, 令的使用方法,以及它们之间的区别,希望读者经过本节的 学习后可以灵活使用这些命令,完成系统的关机和重启。 学习后可以灵活使用这些命令,完成系统的关机和重启。
5.3.1 引导加载程序的启动
GRUB配置 5.3.2 GRUB配置
GRUB的配置主要通过修改 的配置主要通过修改/boot/grub/目录下的 的配置主要通过修改 目录下的 grub.conf文件来完成,用户可以通过 或者在图形界面中 文件来完成, 文件来完成 用户可以通过VI或者在图形界面中 使用文件编辑工具打开该文件进行编辑。 使用文件编辑工具打开该文件进行编辑。 1.default选项 . 选项 2.timeout选项 . 选项 3.splashimage选项 . 选项 4.hiddenmenu选项 . 选项 5.title选项 . 选项 6.root (hdx,y) . ) 7.kernel选项 . 选项
5.4
内核映像
当用户选择启动Linux操作系统后,GRUB会根据 操作系统后, 当用户选择启动 操作系统后 会根据 /boot/grub.conf配置文件中所设置的信息,从/boot/所在的 配置文件中所设置的信息, 配置文件中所设置的信息 所在的 分区上读取Linux内核映像,然后把内核映像加载到内存中并 内核映像, 分区上读取 内核映像 把控制权交给Linux内核。Linux内核获得控制权后,将会按 内核。 内核获得控制权后, 把控制权交给 内核 内核获得控制权后 以下步骤继续引导系统。 以下步骤继续引导系统。 (1)内核映像首先会检测系统中的硬件设备,包括内存 )内核映像首先会检测系统中的硬件设备, 、CPU、硬盘等,对这些设备进行初始化并配置。 、硬盘等,对这些设备进行初始化并配置。 (2)内核映像是经过压缩的,接下来它要对自身进行解 )内核映像是经过压缩的, 同时加载必要的设备驱动。 压,同时加载必要的设备驱动。 (3)初始化与文件系统相关的虚拟设备,如LVM或者软 )初始化与文件系统相关的虚拟设备, 或者软 件RAID等。 等 (4)装载根文件系统(/),把根文件系统挂载到根目 )装载根文件系统( ),把根文件系统挂载到根目 ), 录下。 录下。 内核会在其进程空间内加载init (5)完成引导后,Linux内核会在其进程空间内加载 )完成引导后, 内核会在其进程空间内加载 程序,并把控制器交给init进程,由init进程继续完成接下来 进程, 程序,并把控制器交给 进程 进程继续完成接下来 的系统引导工作。 的系统引导工作。