Linux的启动流程分析:

启动流程一览

  1. 加载BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置;

  2. 读取并运行第一个启动装置内MBR 的boot Loader (亦即是grub, spfdisk 等程序);

  3. 依据boot loader 的配置加载Kernel ,Kernel会开始侦测硬件与加载驱动程序;

  4. 在硬件驱动成功后,Kernel会主动呼叫init 程序,而init 会取得run-level 资讯;

  5. init 运行/etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境(如网络、时区等);

  6. init 运行run-level 的各个服务之启动(script 方式);

  7. init 运行/etc/rc.d/rc.local 文件;

  8. init 运行终端机模拟程序mingetty 来启动login 程序,最后就等待使用者登陆啦;

BIOS, boot loader 与kernel 加载:

BIOS, 启动自我测试与MBR

Boot Loader 的功能

  • 提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能!

  • 加载核心文件:直接指向可启动的程序区段来开始操作系统;

  • 转交其他loader:将启动管理功能转交给其他loader 负责。

加载核心侦测硬件与initrd 的功能

第一支程序init 及配置档/etc/inittab 与runlevel:

Run level:运行等级有哪些

  • 0 - halt (系统直接关机)

  • 1 - single user mode(单人维护模式,用在系统出问题时的维护)

  • 2 - Multi-user, without NFS(类似底下的runlevel 3,但无NFS 服务)

  • 3 - Full multi-user mode(完整含有网络功能的纯文字模式)

  • 4 - unused (系统保留功能)

  • 5 - X11 (与runlevel 3 类似,但加载使用X Window)

  • 6 - reboot (重新启动)

/etc/inittab 的内容与语法

[配置项目]:[run level]:[init 的动作行为]:[命令项目]

init 的处理流程

  1. 使用/etc/rc.d/rc.sysinit 进行系统初始化

  2. 由於runlevel 是5 ,因此只进行『l5:5:wait:/etc/rc.d/rc5』,其他行则略过

  3. 配置好[ctrl]+[alt]+[del] 这组的组合键功能

  4. 配置不断电系统的pf, pr 两种机制;

  5. 启动mingetty 的六个终端机(tty1 ~ tty6)

  6. 最终以/etc/X11/perfdm -nodaemon 启动图形介面啦!

init 处理系统初始化流程(/etc/rc.d/rc.sysinit):

取得网络环境与主机类型:
读取网络配置档/etc/sysconfig/network ,取得主机名称与默认通讯闸(gateway) 等网络环境。

  1. 测试与挂载内存装置/proc 及U盘装置 /sys:
    除挂载内存装置/proc 之外,还会主动侦测系统上是否具有usb 的装置,若有则会主动加载 usb 的驱动程序,并且尝试挂载usb 的文件系统。

  2. 决定是否启动SELinux :
    我们在第十七章谈到的SELinux 在此时进行一些检测,并且检测是否需要帮所有的文件重新编写标准的SELinux 类型(auto relabel)。

  3. 启动系统的乱数产生器
    乱数产生器可以帮助系统进行一些口令加密演算的功能,在此需要启动两次乱数产生器。

  4. 配置终端机(console) 字形:

  5. 配置显示於启动过程中的欢迎画面(text banner);

  6. 配置系统时间(clock) 与时区配置:需读入/etc/sysconfig/clock 配置值

  7. 周边设备的侦测与Plug and Play (PnP) 参数的测试:
    根据核心在启动时侦测的结果(/proc/sys/kernel/modprobe ) 开始进行ide / scsi / 网络/ 音效等周边设备的侦测,以及利用以加载的核心模块进行PnP 装置的参数测试。

  8. 使用者自订模块的加载
    使用者可以在/etc/sysconfig/modules/*.modules加入自订的模块,则此时会被加载到系统当中

  9. 加载核心的相关配置:
    系统会主动去读取/etc/sysctl.conf 这个文件的配置值,使核心功能成为我们想要的样子。

  10. 配置主机名称与初始化电源管理模块(ACPI)

  11. 初始化软件磁盘阵列:主要是透过/etc/mdadm.conf 来配置好的。

  12. 初始化LVM 的文件系统功能

  13. 以fsck 检验磁碟文件系统:会进行filesystem check

  14. 进行磁碟配额quota 的转换(非必要):

  15. 重新以可读写模式挂载系统磁碟:

  16. 启动quota 功能:所以我们不需要自订quotaon 的动作

  17. 启动系统虚拟乱数产生器(pseudo-random):

  18. 清除启动过程当中的缓存文件:

  19. 将启动相关资讯加载/var/log/dmesg 文件中。

启动系统服务与相关启动配置档(/etc/rc.d/rc N & /etc/sysconfig)

使用者自订启动启动程序(/etc/rc.d/rc.local)

根据/etc/inittab 之配置,加载终端机或X-Window 介面

启动过程会用到的主要配置档:/etc/modprobe.conf,/etc/sysconfig/*

Run level 的切换:init[0-6]

核心与核心模块:

  • 核心:/boot/vmlinuz 或/boot/vmlinuz-version;

  • 核心解压缩所需RAM Disk:/boot/initrd (/boot/initrd-version);

  • 核心模块:/lib/modules/version/kernel 或/lib/modules/$(uname -r)/kernel;

  • 核心原始码:/usr/src/linux 或/usr/src/kernels/ (要安装才会有,默认不安装)

核心模块与相依性:

/lib/modules/$(uname -r)/kernel

lib/modules/$(uname -r)/modules.dep

depmod

核心模块的观察:

多少模块:lsmod

  • 模块名称(Module);

  • 模块的大小(size);

  • 此模块是否被其他模块所使用(Used by)。

模块的资讯:modinfo

核心模块的加载与移除:

insmod 则完全由使用者自行加载一个完整档名的模块

rmmod 移除模块

核心模块的额外参数配置:/etc/modprobe.conf

Bootloader: Grub:

boot loader 的两个stage:Stage1:运行boot loader 主程序,Stage2:主程序加载配置档

grub 的配置档/boot/grub/menu.lst 与菜单类型

grub 对磁碟的代号配置与Linux 不同,主要透过侦测的顺序来给予配置。如(hd0) 及(hd0,0) 等。

menu.lst 内每个菜单与titile 有关,而直接指定核心启动时,至少需要kernel 及initrd 两个项目

menu.lst 内配置loader 控制权移交时,最重要者为chainloader +1 这个项目。

若想要重建initrd ,可使用mkinitrd 处理

重新安装grub 到MBR 或boot sector 时,可以利用grub shell 来处理。

启动过程的问题解决:

忘记root 口令的解决之道:

重新启动!一定要重新启动!怎么重开都没关系;

  1. 在启动进入grub 菜单后,(1)在你要进入的菜单上面点'e' 进入详细配置;(2)将光棒移动到kernel 上方并点'e' 进入编辑画面;(3)然后出现如下画面来处理:

    grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet single

    重点就是那个特殊字体的咚咚啦!按下[enter] 再按下b 就能够启动进入单人维护模式了。

  2. 进入单人维护模式后,系统会以root 的权限直接给你一个shell ,此时你就能够运行『passwd 』这个命令来重建root 的口令啦!然后直接『init 5 』就可以切换成为X 窗口介面罗!就是这么简单。

init 配置档错误:

grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash

BIOS 磁碟对应的问题(device.map)

因文件系统错误而无法启动:/etc/fstab

利用chroot 切换到另一颗硬盘工作

Note For Linux By Jes(14)-启动流程、模块管理与 Loader相关推荐

  1. 鸟哥的Linux私房菜(基础篇)- 第二十章、启动流程、模块管理与 Loader

    第二十章.启动流程.模块管理与 Loader 最近升级日期:2009/09/14 系统启动其实是一项非常复杂的程序,因为核心得要侦测硬件并加载适当的驱动程序后,接下来则必须要呼叫程序来准备好系统运行的 ...

  2. 【Linux鸟哥笔记】20-启动流程、模块管理与Loader

    [Linux鸟哥笔记]20-启动流程.模块管理与Loader 目录浏览 章节学习 BIOS加载 内核功能 init进程 内核与内核模块 Boot Loader: Grub initrd 文件 启动过程 ...

  3. Linux应用程序的启动流程

    目录 代码 用strace查看调用流程 分析 总结 看到一篇好文:摘抄记录--Linux应用程序 启动流程-BugMan-ChinaUnix博客 代码 #include <stdio.h> ...

  4. linux系统下开机启动流程

    在了解开机启动流程之前,还是得先了解一些磁盘的基本知识.磁盘主要由盘片,机械手臂,磁头,主轴马达构成.盘片就是存储数据的物理单位了.然后盘片上我们可以分成扇区(sector)和柱面(cylinder) ...

  5. Note For Linux By Jes(18)-X Window 配置介绍

    什么是XWindow System: 主要组件:X Server/X Client/Window Manager/Display Manager X Server:硬件管理.萤幕绘制与提供字型功能: ...

  6. 第十九章 启动流程,模块管理,Loader

    启动流程 多重引导.忘记root密码,如何直接直接进行纯命令行等问题都需要了解liunx启动流程 启动流程一览 加载BIOS->读取第一个MBR启动引导程序->根据引导程序加载内核-> ...

  7. Note For Linux By Jes(20)-Linux 核心编译与管理

    编译前的任务:认识核心与取得核心原始码: 什么是核心(Kernel) Kernel:核心就是系统上面的一个文件而已,这个文件包含了驱动主机各项硬件的侦测程序与驱动模块,这个核心文件通常被放置成/boo ...

  8. Note For Linux By Jes(16)-软件安装:原始码与 Tarball

    开放源码的软件安装与升级简介: 什么是开放源码.编译器与可运行档 什么是函式库: 什么是make与configure: 侦测程序会侦测的数据大约有底下这些: 是否有适合的编译器可以编译本软件的程序码: ...

  9. Note For Linux By Jes(13)-认识与分析日志文件

    什么是登录文件: Linux 常见的登录文件档名 /var/log/dmesg: 记录系统在启动的时候核心侦测过程所产生的各项资讯.由於CentOS 默认将启动时核心的硬件侦测过程取消显示,因此额外将 ...

最新文章

  1. c 没有mysql名称空间_MySQL如何删除#sql开头的临时表
  2. WIN10+VS2015环境下安装PCL1.8.1
  3. git tag什么时候使用_git使用教程9pycharm 使用 tag 打标签
  4. 用scanline取BMP上某点的颜色,代码如下,为什么可以编译,运行时却出错呢?...
  5. 实操Tiktok一个月告诉你,10万粉丝轻松拿下?
  6. Silverlight访问Web Service报System.Security.SecurityException: 安全性错误的处理
  7. CSS兼容IE6,IE7,FF的技巧
  8. TensorFlow 实战(一)—— 交叉熵(cross entropy)的定义
  9. 大数据分析常见的几种方法
  10. flowjo汉化版_流式细胞分析软件FlowJo
  11. 在计算机知识post的含义,计算机术语POST是指的什么意思?
  12. Cisco Packet Tracer 子网划分实验
  13. jenkins构建报错: ssh: connect to host github.com port 22: Connection timed out
  14. 专业级游戏测试书上架:精通游戏测试(第3版)
  15. 电脑上的文件经常丢失,怎么办?
  16. Learning to Localize Sound Sources in Visual Scenes: Analysis and Applications
  17. 项目计划执行过程中,如何分析进度偏差?
  18. php 递归 递归方式与算法
  19. 2.4G NRF24L01无线模块总结
  20. 结构静力分析与动力学分析_51CAE_新浪博客

热门文章

  1. 如何将caj转换成word
  2. 如何使用js把网页适配为一屏的几个技巧
  3. 鱼眼校正c语言算法,一种鱼眼图像逆向经纬映射的快速校正算法
  4. php微信群,PHP微信群加群强制分享转发裂变源码
  5. 狂奔与内卷并存,自嗨锅、莫小仙们如何寻找“破局之道”?
  6. 无线Mesh网络简介
  7. 【微信测试版】支持安卓平板和手机同时登录
  8. 给女友的网页小惊喜,(生日,周年,表白通用) ☞谁说程序员不懂浪漫
  9. win10家庭版如何使用远程桌面功能
  10. 秉火429笔记之七位带操作