linux的启动流程和加载程序
先来了解一下整个过程,大致知道linux是怎么启动的。
启动时要加载内核,让内核来驱动硬件,这样才算是一个真正的操作系统
但内核启动前是要做一些其它工作的。启动过过程如下
1.首先先加载BIOS
2.BIOS加载后,接着读取主引导记录(MBR),里面存放的是硬盘的分区信息和引导程序
  在LINUX中,引导程序经常是GRUB和LILO
3.grub或lilo运行,同时,解压内核,并且尝试驱动所有硬件设备
4.执行init进程,首先读取/etc/inittab文件,来获取运行级别。在/etc/inittab中,首先  会读取/etc/rc.d/rc.sysinit文件,这个文件是初始化系统的,比如获取主机的名称,网  络环境,等等。然后再根据/etc/fstab下的文件挂载信息,把相关的设备都挂载上来
5.加载内核的外挂模块。这些模块在/etc/modprobe.conf下
6.init进程执行/etc/rc.d/rc.local文件
7.执行/bin/login程序,等待用户登陆
8.最后就是开始以shell控制主机
大致流程就是这样
通过引导加载程序的管理而开始读取文件后,接下来,Linux就会将核心解压到主存器中,
并且利用核心来控制整个硬件。那么核心文件通常放在哪里呢?一般来说,核心会放在
/boot下,并取名/boot/vmlinuz。
在加载核心的过程中,必须要知道,系统只会“载入根目录”,而且是以只读方式载入的
此外,有时为了让某些功能可以用文件方式来读取,有的系统在启动时,会建立虚拟盘(ramdisk),这就是需要使用initrd以及linuxrc了。利用引导加载程序的功能,可以在加载核心的时候,一起加载initrd的映像文件/boot/initrd-xxxx.img,linux系统会主动以initrd来建立虚拟盘,并且利用linuxrc程序来加载模块。linuxrc使用的主要特点有:
1.必须是linuxrc文件名
2.必须放在initrd所建立的虚拟盘的最顶层目录
3.必须可以被核心执行
在核心驱动外部硬件的工作完成之后,initrd所建立的虚拟盘就会被删除。不过要注意,initrd并非必须,这要有可无,这要看当初建立核心的时候,整个编译过程。
一般来说,各linux版本在建立核心时,都会一起建立initrd的映像文件,以便启动顺序的顺利执行。
 总之,在这个过程中,引导加载程序可以找到linux的核心文件,并将它加载到主存器中,同时可能通过initrd建立起虚拟盘(RAM DISK),协助启动过程,最后,将读取自BIOS的主机硬件数据交由linux核心进行检测,并且加载适当的驱动程序。在完整地加载核心后,主机开始正确运行。接下来,挂靠系统的第一个程序:init
在核心加载完成之后,系统就已准备好,等待程序的执行。整个linux系统中,第一个执行的程序就是/sbin/init。且进程号为1.
init程序做的工作很多,它除了利用设置文件/etc/inittab来获取运行等级之外,还会通过 运行等级的设置启动不同的服务项目。
什么是运行等级呢?它有什么作用呢?其实很简单,linux就是通过设置运行等级,来规定系统用不同的服务来启动,让linux的使用环境不同。基本上,根据有无网络与有无X Window,分别分为6个等级。
0. halt,就是关机
1. single user mode ,单用户模式,就像windows中的安全模式一样,可以进行系统的维护,
2. multi-user,without nfs (类似下面的等级3,但没有NFS服务)
3. full multi-user mode(完整的网络功能,但是是在字符界面)
4.unused ,系统保留使用
5.X11 ,与3相似,但工作在图形界面
6. reboot ,重启
由于运行等级的不同,可以有不同的环境,启动时,系统根据/etc/inittab这个文件来设置运行等级的。

转载于:https://blog.51cto.com/jiulu/355702

linux的启动流程和加载程序相关推荐

  1. 【内核】linux内核启动流程详细分析【转】

    转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...

  2. 【内核】linux内核启动流程详细分析

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...

  3. Linux的启动流程(CentOS 6)

    前言 Linux启动的过程在实际生产中有着至关重要的作用.试想一下,如果我们在实际生产中服务器因为某一个服务出了问题,而不能启动,这时我们应该怎么办.如果我们了解Linux的详细启动过程,知道是在哪一 ...

  4. I.MX6 Linux Qt 启动流程跟踪

    /*************************************************************************** I.MX6 Linux Qt 启动流程跟踪* ...

  5. Linux的启动流程简析(以Debian为例)

    Linux的启动流程简析(以Debian为例) 正文: 前面的文章探讨BIOS和主引导记录的作用.那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事 ...

  6. Linux驱动(4)--Linux的启动流程

    Linux的启动流程 1.Linux的启动流程概述 2. 从串口打印日志中分析 3. 以Exynos 4412启动流程为例 1.Linux的启动流程概述 ARM Linux 的启动流程大致为:Uboo ...

  7. linux内核启动流程(文章最后流程图)

    原文:linux内核启动流程 本文以Linux3.14版本源码为例分析其启动流程.各版本启动代码略有不同,但核心流程与思想万变不离其宗. 内核映像被加载到内存并获得控制权之后,内核启动流程开始.通常, ...

  8. Linux开机启动流程分析

    Linux开机启动十步骤 收藏分享2012-2-6 11:15| 发布者: 红黑魂| 查看数: 1366| 评论数: 0|来自: 比特网 摘要: 开机过程指的是从打开计算机电源直到LINUX显示用户登 ...

  9. linux内核启动第一个进程,linux内核启动流程

    描述 Linux的启动代码真的挺大,从汇编到C,从Makefile到LDS文件,需要理解的东西很多.毕竟Linux内核是由很多人,花费了巨大的时间和精力写出来的.而且直到现在,这个世界上仍然有成千上万 ...

最新文章

  1. 免费学python的软件-初学python编程,有哪些不错的软件值得一用?
  2. linux下使用gcp拷贝数据的时候显示进度条
  3. 运营资源很少的时候,怎么运营自己的产品(完结)
  4. asp.net运行机制
  5. SAP UI5 应用开发教程之四十二 - SAP UI5 自带的 Diagnostics 诊断工具使用方法介绍
  6. Java中文字符所占的字节数
  7. C/C++ 去掉字符串首位的空格字符
  8. 极限学习机(ELM)从原理到程序实现(附完整代码)
  9. 图解MongoChef的安装步骤
  10. 解放前端工程师——手把手教你开发自己的自定义列表和自定义表单系列之三表格
  11. 我心中的微信小程序 韩俊强的博客
  12. tushare复权数据使用
  13. 美团2018校园招聘内推笔试代码分享
  14. java课程综合实训报告_Java ME综合实训报告
  15. C# WaitAll 等待所有线程执行完毕
  16. 计算机新加一个固态硬盘,老电脑卡顿不一定没救了 加一块SSD就能焕发新生
  17. Java+Swing+mysql用户信息管理系统
  18. 网络带宽和质量测试小工具.iPerf3
  19. 计算机软件著作权保护包括哪些
  20. Windows安装Apache服务器及证书

热门文章

  1. 大数据之-Hadoop之HDFS的API操作_网络拓扑_节点离客户端的距离计算---大数据之hadoop工作笔记0067
  2. ES6新特性_ES6语法糖_class静态成员---JavaScript_ECMAScript_ES6-ES11新特性工作笔记034
  3. Seata多微服务互相调用_全局分布式事物使用案例_Order-Module order微服务的配置搭建---微服务升级_SpringCloud Alibaba工作笔记0060
  4. MQTT工作笔记0004---CONNECT控制报文1
  5. STM32工作笔记0098---Windows下的Linux环境_Cygwin_MinGW_MSYS_MSYS2_之间的关系
  6. 2015workshop-age 的txt 生成过程
  7. 路由器IP-4-DUPADDR: Duplicate address和CDP-4-DUPLEX_MISMATCH错误的解决方案
  8. java分布式(eclipse环境的使用)
  9. 大二物竞金牌转北大计算机,物理竞赛保送去北大还是清华?
  10. oracle时分秒修改值_Oracle SQL Developer显示的时间包含时分秒的设置方法