pc-start

本文详细解析了Linux系统的启动过程,从POST自检到BIOS引导,再到内核加载与初始化,直至运行init进程。涵盖了运行级别的概念,内核模块的管理,以及如何通过chkconfig管理服务的启动配置。同时,深入介绍了initrd与rootfs的作用,以及系统初始化脚本的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

POST(post on self test) --> BIOS(boot sequence) --> MBR(BootLoader,446 Bytes) --> Kernel(接管硬件) -->initrd --> (rootfs)/sbin/init(/etc/inittab)

运行级别(启动服务不同)
    0 halt
    1 single user mode, 直接以root身份切入
    2 multi  user mode, no NFS
    3 multi  user mode, text mode
    4 reserved
    5 mutil  user mode, graphic mode
    6 reboot
查看运行级别
    runlevel
    who -r
查看内核release号
    uname -r

BootLoader(MBR)
    LILO: LInux LOader
    GRUB: GRand Unified BootLoader
        Stage1:MBR
        Stage1_5:
        Stage2:/boot/grub


文件系统
进程管理
内存管理
网络管理
安全功能
驱动程序

Kernel挂载rootfs

/ -->rootfs (普天之下莫非王土)
/usr
/boot
/home

RedHat
    核心:动态加载 内核模块
    内核: /lib/modules/"内核版本号命令的目录"/
    /lib/modules/3.10.0-514.el7.x86_64/kernel


内核设计风格
    单内核 Linux
        核心: ko kernel object
        
        so shared object
    微内核 Windows
    
Kernel初始的过程
    1.设备探测
    2.驱动初始化(initrd(initramfs)装载驱动)
    3.以只读方式挂在根文件系统
    4.装载第一个进程init(PID:1)
    
    upstart ubuntu d-bus
    systemd
    
/etc/rc.d/rc.sysinit
    1.激活udev和selinux
    2.根据/etc/sysctl.conf,设置内核参数
    3.设定时钟
    4.装载键盘映射
    5.启用交换分区
    6.设置主机名
    7.根文件系统检测,读写方式重新挂载
    8.激活RAID和LVM
    9.启用磁盘配额
    10./etc/fstab,检查并挂载其他文件系统
    11.清理过期的锁和pid文件

/proc
/sys
/dev

ramdisk  --> initrd
ramfs  --> initramfs

    
chroot -临时目录作为 /
    1.mkdir -p /test/virroot
    2.cp /bin/bash /test/virroot/bin/bash
    3.ldd /bin/bash
        linux-vdso.so.1 =>  (0x00007ffeb35b5000)
        libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007f19cf1ec000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f19cefe8000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f19cec1b000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f19cf416000)
        cp到/test/virroot/lib64下
    4.chroot /test/virroot

chroot
ldd /path/to/binary_file

OS初始化:
 

服务类脚本
    /etc/init.d > /etc/rc.d/init.d
    SysV : /etc/rc.d/init.d
        start|stop|restart|status
        reload|configtest
        
    chkconfig: runlevel SS KK
    当chkconfig命令为此脚本在rc#.d目录创建链接是,runlevels
    表示默认创建为S*开头的链接,除此之外的级别默认创建以K*开头的链接
    runlevels -  表示没有级别,默认以S*开头,其余的以K*开头
    chkconfig --list 查看所有独立守护服务的启动设定
    cp SERVICE_NAME 到 /etc/rc.d/init.d
    chkconfig --list SERVICE_NAME
    chkconfig --add SERVICE_NAME 添加到checkconfig可以控制的独立守护进程
    chkconfig --del SERVICE_NAME
    
    chkconfig --add myservice
    chkconfig --level RUNLEVELS SERVICE_NAME {on|off}
    
    example:
    #!/bin/bash
    #
    # chkconfig: 2345 77 22
    # description: Test Service

    LOCKFILE=/var/lock/subsys/myservice

    status() {
        if [ -e $LOCKFILE ]; then
            echo "Running"
        else
            echo "stopped"
        fi
    }

    usage() {
        echo "`basename $0` {start|stop|restart|status}"
    }

    case $1 in
    start)
        echo "Starting..."
        touch $LOCKFILE;;
    stop)
        echo "Stopping..."
        rm -rf $LOCKFILE &> /dev/null;;
    restart)
        echo "Restarting...";;
    status)
        status;;
    *)
        usage;;
    esac

    
    
/etc/rc.d/rc.local 系统最后启动的一个服务

/etc/inittab的任务
    1.设置默认运行级别
    2.运行系统初始化脚本
    3.运行指定运行级别对应的目录的脚本
    3.ctrl+alt+delete组合键操作
    4.ups电源故障/恢复执行的操作
    5.启动虚拟终端(2345)
    6.启动图形终端(5)

守护进程
    独立守护进程
    xinitd:超级守护进程,代理人
        瞬时守护进程,不需要关联至运行级别
        
核心: /boot/vmlinuz-version
内核模块 (KO) /lib/modules/version

 

用户空间访问,监控内核方式
    /proc
        伪文件系统
        /proc/sys 很多可读写
    /sys 某些文件可写
设定内核参数值(暂时生效)
    echo VALUE > /proc/sys/TO/SOMEWHERE
    sysctl -w kernel.hostname(立即生效,重启失效)
    sysctl -a 所有内核参数
    
永久生效,不立即生效
    /etc/sysctl.conf
    sysctl -p 生效
    
查看加载内核模块
lsmod

modprobe MODULE_NAME 装载
insmod MODULE_NAME
modprobe -r MODULE_NAME 卸载
rmmod MODULE_NAME

modeinfo MODULE_NAME

内核中的功能除了核心功能之外,编译时,大多数功能有3个选择
1.不用此功能
2.编译进内核
3.不编译进内核


 

 


    

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值