linux-内核启动过程杂记

Bootlaoder:
      BIOS 启动之后,把存在硬盘上的系统"搬到"内存中
     <1>为内核传递参数,管理多个操作系统启动  
     <2> 查看硬件信息,设别分区,操作磁盘
     <3> 加载操作系统,加载额外的模块 
     <4> 常见的两种,   Grub(X86系统)和U-Boot(MIPS系统中)
      

Linux 系统启动的三个元素: 
      <1>Bootloader
      <2>Kernel
             (1)根文件系统
             (2)initrd
      <3>文件系统

UEI  bios:可扩展固件接口, 用来做各种主板硬件识别,配置,管理的固件,以后可能把搬操作系统的活儿都缆过去(bootloader)
  
linux 最小系统制作和启动
     1 dd 制作一个磁盘
       dd  if=/dev/zero   of=disk  ibs=4096  count=4096 
     2 磁盘上创建文件系统
       mkfs.ext4  disk 
     3 创建的磁盘文件挂载到目录
       mkdir    mnt 
       mount  disk   mnt/
     4  创建文件系统的一些目录
       mkdir    sbin   bin  etc  var  root    
     5  卸载文件系统
         umount  mnt 
        dd  if=disk   bs=1k  |  gzip -v9  >   rootfs.gz 
        mount  osImage
        fdisk  /dev/loop1
        mkfs  /dev/loop1
      6 安装  Bootloader 
        grub-install   /dev/loop1
       #  拷贝  bzImage (arch/x86/boot/下) 到/boot, 再生成initrd
       # 启动时,指定 Grub 和initrd, 传递适当的参数   boot

安装grub 
      truncate   -s32M    rootfs 
      fdisk  roots   
      grub-install     rootfs


inintrd 文件系统
      cd    /boot/ 
      mkdir  initrd_fs
      cp   initrd.img-4.4.0-57-generic   initrd_fs/initrd.gz
      cd   initrd_fs
      gunzip  initrd.gz

lsinitrtamfs  命令来查看 initrd里面内容

内核启动过程  (initrd 第一个程序/init)
<1>   建立 sysroot根目录,挂载真实的文件系统
<2>   设置命令的环境变量
<3>   mount  proc 文件系统到 /proc, Linux 内核动态状态的一个表现和设置入口
<4>   mount  sysfs 到/sys ,  Linux  内核资源有组织的表现和设置入口
<5>   mount  devtmps 到 /dev, 临时表征当时设备节点的文件系统,加速系统启动(/dev目录对当前用户程序运行置关重要)
<6>   准备/dev 目录一些节点 ( stdin, stdout, stderr, 等fd)fd 文件描述符
<7>   为内核输入额外参数的机会
<8>   解析内核启动参数并执行( udev 开始之前执行一些准备 )
<9>   启动 systemd-udevd, 配置其要响应的行为
<10> 循环处理$hookdir/initqueue下任务
<11> mount  根文件系统
<12> 找到根文件系统的init 程序
<13> 停止 systemd-udevd 服务程序
<14> 一些清理操作
<15> 切换到根文件系统的init程序  启动完成

EFI启动桩
  EFI 强大的功能,将来可能会吞并 Bootloader

init之后    启动管理程序
开始初始化整个系统的应用程序或者服务器------》 linuxrc 脚本

常用的Linux 启动脚本:
   /initxrc
   /etc/rcS
   /etc/rc.local
   /etc/profile

systemd 启动管理系统
rcN.d 目录( 不同的一套完整的所有系统启动服务 )  rc1.d   rc2.d  ...rc6.d

网络服务
一个超级进程监控全部端口: 哪个端口有数据就启动哪个, xinetd 守护进程

/etc/ininttab    存放 runlevel 等级
runlevel    0  关机
runlevel    1  单用户无图行
runlevel    3  多用户无图形
runlevel    5  多用户有图形
runlevel    6  重新启动

读取完成执行对应的启动目录 如   /etc/rc3.d

init 同步顺序启动效率低下, upstat实现异步事件驱动的启动模式
systemd 
起源于  Tizen Linux 系统
传统init 开机启动进程是顺序的,systemd 将启动尽可能的并行化,形成了程序集
systemd 调度执行取代  cron
systemd device hotplugging 取代udev
systemd 封装 Domain  Socket  和 D-Bus
systemd 用统一的原语实现了几乎整个 linux 系统服务
systemd 进程是系统第一个启动进程,也是最后一个结束进程,用户端进程根进程


systemd 定义了整套脚本语义

systemd是守护进程
systemctl 定义服务和行为
system-analyze 分析启动效率
systemd  用内核的 cgroup接口开发

systemd 重要服务:
consoled:   取代传统的虚拟终端
journald:    取代 syslog,  syslog-ng,  rsyslog
logind:       取代传统用户登陆服务
networkd:取代传统网络配置( network  manager) 
timedated:所有于时间有关的操作     
udevd:         udev 代码被  systemd 完成吸收合并

linux  内核启动顺序:
1   内核加载到内存
2   内核移动到指定内存位置
3   开始检查CPU ID,   machine ID
4   初始化页表
5   设置C语言代码运行环境
6    内核第一个C函数  startkernel
7    大内核锁锁住内核
8    初始化页表,MMU,中断,内存区域,计时器,Slab,VFS等
9    跳到init 内核进程
10  内核端init进程自身替换为用户端的init进程


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值