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 系统引导过程

启动流程启动时要加载核心,让核心来驱动整个硬件。

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

优选(VR虚拟现实)ARMLinux启动过程分析

优选(VR虚拟现实)ARMLinux启动过程分析

优选(VR虚拟现实)ARMLinux启动过程分析ARM Linux启动过程分析赵楠本章学习目标:●了解Linux结构及平台属性●了解bootloader的相关知识●熟悉并掌握启动过程摘要:从嵌入式系统到超级服务站,嵌入式Linux 的可移植性使得我们可以在各种电子产品上看到它的身影。

Linux 是一个完整通用的Unix 类分布式操作系统,它的结构紧凑、功能强、效率高、可移植性好且在Internet 上可自由取用。

对于不同体系结构的处理器来说Linux的启动过程也有所不同。

本文以S3C2410 ARM处理器为例,详细分析了系统上电后bootloader的执行流程及ARM Linux的启动过程。

关键词:ARM Linux bootloader 启动过程Abstract: from the embedded system to super service station, embedded Linux portability allows us to various electronic products in the form of seeing it. Linux is a complete general Unix class distributed operating system, it's structure compact, the function is strong, high efficiency, good portability and in the Internet can be free to take. For different system structure of the processor is the start of the Linux process is also different. Based on the ARM processor S3C2410 as an example, the paper analyses system after the execution flow of electric bootloader and ARM Linux start-up process.Keywords: ARM Linux bootloader start-up process1. 引言Linux 最初是由瑞典赫尔辛基大学的学生Linus Torvalds在1991 年开发出来的,之后在GNU的支持下,Linux 获得了巨大的发展。

Linux启动过程详解_MBR和GRUB概述

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 目录下。

第一次课项目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_mips启动流程_存储相关

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系统引导过程及排除启动故障⼀、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”。

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

深入浅出:Linux的启动流程刨析Linux的启动过程,是一个Linuxer必须要熟练掌握的。

通过系统的启动过程,可以更深入的理解Linux,假如Linux系统出问题的话,可以通过启动过程来分析原因,解决问题。

而且,在掌握了Linux的启动流程后,还可以借助宿主机来打造自己的Linux。

下面是我画的一张简单的Linux启动流程图在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为:1、/sbin/init2、/etc/inittab3、/etc/rc.d/rc.sysinit4、/etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4..5、/etc/fstab1、关于/sbin/init与/etc/inittab关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹它的功能,里面的内容是一种固定的文本格式,id:runlevels:action:process我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6):0:关机half1:单用户模式singel user2:多用户模式multi user ,不提供nfs服务without nfs3:完全多用户字符模式full multiuser text mod4:系统预留officially undefined5:图形登录界面graphical login6:重启rebootid:3:initdefault: //这里定义linux的启动时的运行级别,可以看到我的主机的启动级别是3# System initialization.si::sysinit:/etc/rc.d/rc.sysinit //紧接着,运行系统第一个脚本/etc/rc.d/rc/sysinit//它的action:sysyinit指的是定义系统初始化过程l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2 //然后就是加载服务了,他们被定义在/etc/rc.d/rcN.dl3:3:wait:/etc/rc.d/rc 3 //action:waite 这个进程在在对应级别启动一次,知道它结束为止,我的系统启动级别为3,所有执行rc 3对应的服务l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6ca::ctrlaltdel:/sbin/shutdown -t3 -r now //这里定义了一个组合快捷键,熟悉吧,没错就是重启,你可以把它注释掉不用pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"//这里定义了ups电源,powerfail 指的是如果突然断电,它对应的process命令是,提示用户系统电源失效,将要关机,提醒用户把数据都存储好pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"//这里的action,powerokwaite,指的是系统恢复供电,关机取消...<pre style="BACKGROUND-COLOR: rgb(240,240,240); MARGIN: 4px 0px"class="cpp" name="code">1:2345:respawn:/sbin/mingetty tty1 //开启终端,在系统准备工作做好后,就会启动出6个终端,tty1~6 mingetyy就是终端的执行命令2:2345:respawn:/sbin/mingetty tty2 //可以看到他们对应的级别是2345,你也可以注释掉几个,这样启动后,就会开启你指定个数的终端... 3:2345:respawn:/sbin/mingetty tty3 //这里的动作respawn意思是如果用户关闭,那么这个进程会立刻再次执行4:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6x:5:respawn:/etc/X11/prefdm -nodaemon //当一切准备完毕,就会运行守护进程,它是不分运行级别的,同样也是respawn</pre><pre style="PADDING-BOTTOM: 2px; MARGIN: 4px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 2px"><span style="font-size:16px;"></span>2、关于etc/rc.d/rc.sysyinit 和/etc/rc.d/rc.Nd在inittab文件中,我们了解到rc.sysinit是系统运行的第一个脚本,那么它的作用都有哪些呢?如果有shell脚本基础的话可以用vim打开这个文件来看看,它有900多行...是linux 里最牛的脚本,总结下它的作用,有如下几点:(一定要牢记,必要时我们要重写它!)1)激活udev和selinux2)通过读取/etc/sysct1.conf来设置内核参数3)设置系统时钟4)设置键盘映射5)启动交换分区。

6)设置主机名7)检查跟文件系统,并且如果没有错误,以读写的方式来重新挂载文件系统(重要) 8)激活raid和lvm设备9)启动磁盘限额10)挂载其他/etc/fstab里定义的尚未被挂载的设备11)清理过时的文件锁和PID文件12)启动服务/etc/rc.d/rcN.d/etc/rc.d/rcN.d 是一个存放了系统启动是加载的服务的文件夹,通过inittab,我们知道了,它的编号对应相应的启动运行级别。

需要说明的是,它里面的文件,以我的为例以K开头的代表stop,以S开头的代表启动start,数字越小,有限级别越高[root@server69 rc.d]# cd rc3.d[root@server69 rc3.d]# lsK01dnsmasq K74nscd S08ip6tables S25bluetooth S85gpmK02avahi-dnsconfd K85mdmpd S08iptables S25netfs S90crondK02NetworkManager K87multipathd S08mcstrans S25pcscd S90xfsK05conman K88wpa_supplicant S10network S26acpid S95anacronK05saslauthd K89dund S11auditd S26apmd S95atdK10psacct K89netplugd S12restorecond S26haldaemon S97rhnsdK20nfs K89pand S12syslog S26hidd S97yum-updatesdK24irda K89rdisc S13irqbalance S28autofs S98avahi-daemonK35vncserver K99readahead_later S13portmap S50hplip S99firstbootK35winbind S00microcode_ctl S14nfslock S55sshd S99localK50ibmasm S02lvm2-monitor S15mdmonitor S56cups S99smartdK50netconsole S04readahead_early S18rpcidmapd S56rawdevicesK69rpcsvcgssd S05kudzu S19rpcgssd S58ntpdK73ypbind S06cpuspeed S22messagebus S80sendmail3、/etc/fstab文件它定义了系统初始化挂载的设备,对系统的启动至关重要,rc.sysinit通过读取它来实现系统分区的挂载它的内容如何呢?我们一起来看下要挂载的设备挂载点文件系统类型挂载选项转储频率文件自检次序/dev/sda2 / ext3defaults 0 0/dev/sda1 /boot ext3defaults 0 0sysfs /sys sysfsdefaults 0 0proc /proc procdefaults 0 0我截取了4个系统启动时必须挂载的设备/ 根文件目录,由它你才可以进入linux的世界,它在/dev/sda2里/boot 启动目录,在/下,里面有grub,initrd和系统内核,它在/dev/sda1sysfs 一个虚拟的文件系统,产生包含所有硬件层次视图,和/proc类似proc 这是一个虚拟的目录,它映射内存里的信息对应进程信息,也就是说它对应的是内存而不是硬盘好了,了解了这些文件和目录的作用,我们在回过头来看那张流程图:1)Linux开机从POST加电自检开始,当自检完成,读取第一个硬盘的第0个磁头里的前446个字节,运行里面的bootloader,Linux一般用的是grub。

2)通过grub传递参数给内核,初始化加载内核过程,内核调用initrd(小型内存文件系统,五脏俱全,是一个微型Linux),通过initrd,以只读方式挂载根文件系统3)当根文件系统被挂载后,就会读取并运行/sbin/init来进行初始化工作,这个时候我们刚才讲的几个文件就派上用场了~4)按次序依次执行/rc/sysinit ,这个时候会重新以读写的方式挂载根文件系统5)读取/etc/rc.d/rcN.d/来启动以s开头的服务,停止以k开头的服务6)当一切准备完毕,打印终端,出现熟悉的Login界面!(当然,如果你是以5级别启动的话,Linux就会启动图形界~)好了~系统的启动流程介绍完毕,这些是Linuxer必备的知识,在系统的维护中,发挥至关重要的作用~如果你喜欢,希望能和你多多交流。

相关文档
最新文档