+++++++X86平台系统启动流程

简介:

操作系统的组成、内核的功能、库、函数、头文件、函数名、Linux内核、X86平台系统启动流程

忘记密码如何登陆系统


操作系统的组成:kernel + rootfs , kernel + 应用程序


kernel的功能

    1、输出系统调用

    2、实现tcp/ip,文件系统

    3、协调硬件工作

    4、模块化装载驱动,让硬件工作


kernel完成的功能

进程管理:(创建、调度、销毁、进程结构体、task struct、tast list、虚拟内存空间和地址、物理内存空间和地址、常驻内存集、虚拟内存集、进程间通信IPC机制、内核多任务工作、进程的类型、结构、定义、进程的状态) 创建进程和销毁进程系统调用


网络管理(网络定义、CSMA/CD、PARC实验室、网络拓扑、网桥和交换机隔离冲突产生广播(MAC表)、MAC、路由器隔离广播域(路由表)、IP协议、分类、子网掩码的作用、ARP协议和攻击方式?、广域网和城域网、端口号作用、进程间通信、URL、ISO的OSI模型、如何将主机接入网络 创建、绑定、监听socket(多路复用)) 内核中实现tcp/ip协议,通过系统调用输出


内存管理(申请内存、释放内存) 通过系统调用完成 


文件系统 (文件系统中识别一切皆是文件,按名存取,交换分区,日志型文件系统和非日志型文件系统,格式化,VFS,)通过系统调用open() read() write()


安全管理: selinux,权限模型

驱动程序


为什么会用到rootfs?

linux系统运行需要路径完成,目录格式在FHS中定义。不同路径提供完成不同的功能,/bin,/sbin开机所需的程序,/lib,/lib64开机程序所依赖的库


操作系统的组成kernel + 程序(【程序运行时所依赖的】库+二进制程序)


库和二进制程序的区别

相同:都是程序

不同:

    库: 没有执行入口,只能作为有执行入口程序的片段运行,与运行的程序一块存活(函数的生命周期)

    二进制程序有执行入口


程序开发调用库 和 源码编译为二进制程序运行时加载至共享内存中不相同

程序开发时,调用syscall二次封装的库(Glibc库 gun/libc)及查看头文件

glibc库的位置: /usr/lib,/usr/lib64,/lib,/lib64

头文件:记录库的数量和有多少个调用的函数库,函数名,及可向函数传递的参数

:函数集合,functions 功能

函数:代码片段,函数可以接受参数,完成灵活多样的功能

函数名:方便使用代码就为其取了一个名字

    调用函数:即为调用函数名,完成功能

    调用接口:即为功能入口或功能的名字


依据库被调用执行后是否有执行结果返回对库调用进行分类

    过程调用:没有返回值,procedure

    函数调用:有返回值:function


kernel了解

   单内核:所有功能在内核单个进程中以线程实现。稳定,效率高。如果任何一处出故障,全体崩溃。(Linux)

   微内核:所有功能独立成一个子系统。不稳定,效率低。任何处出故障不影响全局,可单模块修复。(Windows,Solaris)


   微内核理论比单内核更为先进,但是微内核多个子系统间的协调过于复杂,所以单内核和微内核设计思想或建构方式不分伯仲。

    

Linux内核

    1、进程轻量,轻量到相当于微内核中线程线程的概念。

    2、进程中类似于轻量级进程模式运行进程,进程称为thread

    3、linux线程实现与windows、Solaris不一样

    4、当有人质疑Linux使用单内核时,linus曾说:只要linux能跑起来,而且没有什么严重的问题,我们就应该让它进行下去,毕竟稳定压倒一切

    5、吸收微内核设计:支持模块化设计:内核中模块 .ko (kernel object) 程序调用的库 .so (share object) 模块相当于程序的库的概念,只是模块只能被kernel调用。库只能被程序调用

    6、更多硬件、协议、文件系统运行


kernel组成

    核心文件: /boot/vmlinuz-VERSION-release

        ramdisk: (安装系统后由,安装程序生成)

            CentOS 5: /boot/initrd-1.2.3-1.OS.CPU.img

            CentOS 6+: /boot/initramfs-1.2.3-1.OS.CPU.img

    模块: /lib/modules/1.2.3-1.OS.CPU


CentOS x86平台 启动流程

wKiom1miT9Sx793UAAE0Jok0yCw090.png

    加电自检、Bootsquence(MBR)、MBR工作(系统引导)、Kernel工作、只读切换挂载rootfs、启动init


加电自检

 加电 -- CPU自举(CPU找到ROM特定地址空间中的特定指令,CPU运行指令,完成硬件自检)-- 显示BIOS界面

 

Bootsquence(MBR)

    根据BIOS设定,从上至下依次查找第一个有MBR的设备或模拟MBR的设备。

    如果存储设备都没有MBR,到网络设备时:

        1、通过网卡发送广播,找到dhcp服务器,获取一个IP地址

        2、并通过dhcp获得能够传递过来一个引导加载程序的文件服务器(tftp)

        3、传递引导程序过来,完成系统引导


MBR工作(系统引导)

    引导加载器:MBR=446(bootloader) + 64(fat) + 2 SSAA

    作用:显示菜单,加载内核至内存,移交控制权

    引导加载器分类:

        Windows NT Loader (New Technology)

        Linux 

            LILO Linux Loader 古老,无法加载1024后的柱面,现多用于嵌入式

            grub:grand uniform boot 统一引导加载器(Linux,Windows,BSD),突破LILO限制

                grub1 CentOS5,6 0系

                grub2 CentOS 7 1系


    Step1: 找到MBR时,运行MBR进入1

    Step1.5:是分区的文件系统的驱动。 step1.5在MBR后面的一段空间中,1完成后自动运行1.5

    Step2:进入分区,运行grub程序,根据配置显示菜单,根据用户选择的内核,和ramdisk,加载至内存。移交控制权给内核


Kernel工作

    内核自动解压、展开

    1、探测硬件

    2、加载驱动(包括从ramdisk中加载驱动)


            ramdisk分类

                CentOS 5: ramdisk 在内存中当作磁盘,当内核挂载根时,需要再一次缓冲ramdisk

                CentOS 6,7: ramfs 在内存中当作文件系统,直接挂载

            

只读切换挂载rootfs


启动init

            init分类

                CentOS 5 System V init (1、进程切换,2、进程依赖 。 串行启动进程)

            配置文件:/etc/inittab


                CentOS 6 Ubuntu upstart --> init (dbus:进程间通信基于BUS总线。基于dbus机制,没有依赖。接近并行启动进程 )

            配置文件: /etc/inittab, /etc/init/*.conf


                CentOS 7 MAC/OS systemd (1、不借助bash解释器 ,systemd能完成初始化[仅启动需要的进程,不需要的进程,假启动,在需要访问此进程时,都会启动])

            配置文件: /etc/systemd/system , /usr/lib/systemd/system

                

    CentOS5,6: service

    CentOS 7: systemctl


init程序初始化

1、设置主机名

1
2
3
4
5
6
1 )CentOS  5 : HOSTNAME=`/bin/hostname`
2 )CentOS  6 : HOSTNAME=$(/bin/hostname)
# Set the hostname.
update_boot_stage RChostname
action $ "Setting hostname ${HOSTNAME}: "  hostname ${HOSTNAME}
[ -n  "${NISDOMAIN}"  ] && domainname ${NISDOMAIN}

2、设置欢迎信息 baner

1
2
1)CentOS 5:  echo  -en $ "\t\tWelcome to "
2) CentOS 6: echo  -en $ "\t\tWelcome to "

3、激活udev和selinux

4、挂载/etc/fstab文件中定义的文件系统

1
2
3
4
action $ "Mounting local filesystems: "  mount -a -t nonfs,nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev
else
         action $ "Mounting local filesystems: "  mount -a -n -t nfs4,smbfs,ncpfs,cifs,gfs,gfs2 -O no_netdev
fi

5、检测根文件系统,并以读写挂载文件系统

1
  mount  -n -o remount,ro /

6、设置系统时钟

7、激活swap设置

8、根据/etc/sysctl.conf文件设置内核参数

9、激活lvm2及software RAID

10、加载额外设备的驱动

11、清理操作


CentOS 6启动区别

    程序: upstart

    配置文件: /etc/inittab , /etc/init/*.conf

        注意: /etc/init/*.conf遵循upstart语法格式


    tty.conf 与终端相关

1
exec /sbin/mingetty $TTY

    rc.conf 启动服务

1
exec /etc/rc.d/rc $RUNLEVEL

    rcS.conf 初始化

1
exec  /etc/rc .d /rc .sysinit



如何跳过开机密码,进入维护模式

    1、启动系统

wKiom1mim3nguOhJAAASWcZY-Pc725.png

     2、在此界面下,按任意键。      

      向上下箭头:完成上下移动。

      e : 在启动前编辑高亮菜单 

      a : 在启动前修改内核参数

      c : 打印一个命令行

wKioL1mim62jq0scAAAuTKzUPlQ650.png

     3、按e编辑高亮菜单

        b 引导起动

        e 编辑boot顺序所选的命令行

        c 打印一个命令行

        o 在所选行后,打开一个新行

        O 在所选先前,打开一个新行

        d 删除,光标所在行

wKioL1minIDzcf3nAAA3xPfuiNc611.png

    3、光标移到kernel /vmlinuz行,按e键。    

        类BASH的行编辑器,支持命令行补全(TAB)

        ENTER:在编辑完毕后,可以按ENTER键,接受你的改变

wKiom1minbyQ_yEBAAAmhLsTdsE356.png

    4、在其后可以输入 1 或 s 或 S 或 single , 并按ENTER键,保存

     

wKiom1minzLj2-KOAAAczpOpHgU210.png

wKioL1minyLinFTFAAANXvcSGyk783.png

    5、按b键引导,即可完成元密码登入bash

      wKiom1mioDjQC-Q1AAAV2KvACzY017.png

    6、修改密码

1)echo "PASSWORD" | passwd -n 2 -x 2 -i 100 root

2)passwd root

3)openssl passwd -salt $(openssl rand -hex 4) -1 和 usermod -p PASSWORD user











本文转自 lccnx 51CTO博客,原文链接:http://blog.51cto.com/sonlich/1959597,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
6月前
|
SQL 人工智能 移动开发
Android应用启动流程:从启动到可交互的过程解析
Android应用启动流程:从启动到可交互的过程解析
|
3月前
|
中间件 Linux 芯片
一张图秒懂嵌入式Linux系统的启动流程
一张图秒懂嵌入式Linux系统的启动流程
61 0
|
3月前
|
调度 UED 开发者
【鸿蒙软件开发】UIAbility组件概况、生命周期与启动模式
【鸿蒙软件开发】UIAbility组件概况、生命周期与启动模式
136 0
【鸿蒙软件开发】UIAbility组件概况、生命周期与启动模式
|
11月前
|
消息中间件 NoSQL 前端开发
应用系统服务安装全过程(从基础搭建框架到部署运行)
应用系统服务安装全过程(从基础搭建框架到部署运行)
139 0
应用系统服务安装全过程(从基础搭建框架到部署运行)
|
11月前
|
存储 小程序 Shell
【平台开发】技术整合思考(一)——启动配置
【平台开发】技术整合思考(一)——启动配置
79 0
|
开发框架 测试技术 Linux
测试思想-项目启动 项目启动过程
测试思想-项目启动 项目启动过程
69 0
|
Java 调度 Android开发
android体系课-系统启动流程-之SystemServer启动过程源码分析
笔者刚开始学习Android的时候也和大部分同学一样,只会使用一些应用层面的知识,对于一些比较常见的开源框架如<mark>RxJava</mark>,<mark>OkHttp</mark>,<mark>Retrofit</mark>,以及后来谷歌推出的<mark>协程</mark>等,都只在使用层面,对于他们<mark>内部原理</mark>,基本没有去了解觉得够用就可以了,又比如Activity,Service等四大组件的使用原理,系统开机过程,Launcher启动过程等知之甚少,知其然而不知其所以然,结果就是出现某些问题,不知道从哪里找原因,只能依赖万能的百度,但是百度看多了,你会发现自己
|
Android开发
RK3399平台开发系列讲解(其他篇)1.3、U-boot启动流程分析
RK3399平台开发系列讲解(其他篇)1.3、U-boot启动流程分析
152 0
|
Java 调度 Android开发
android体系课-系统启动流程-之zygote进程启动过程源码分析
笔者刚开始学习Android的时候也和大部分同学一样,只会使用一些应用层面的知识,对于一些比较常见的开源框架如<mark>RxJava</mark>,<mark>OkHttp</mark>,<mark>Retrofit</mark>,以及后来谷歌推出的<mark>协程</mark>等,都只在使用层面,对于他们<mark>内部原理</mark>,基本没有去了解觉得够用就可以了,又比如Activity,Service等四大组件的使用原理,系统开机过程,Launcher启动过程等知之甚少,知其然而不知其所以然,结果就是出现某些问题,不知道从哪里找原因,只能依赖万能的百度,但是百度看多了,你会发现自己