Linux 内核及系统启动流程

    kernel的功能:
        进程管理
        文件系统
        硬件驱动
        内存管理
        安全功能:SELinux
        网络子系统

        标准库:glibc

        调用:返回
            利用别的组件的功能,完成某特定事务
            返回值

    内核设计流派:
        单内核体系:
            Linux
                支持模块化
                模块还可以动态装载或卸载

            Linux内核:核心 + 外围模块
                核心:/boot/vmlinux-VERSION-release
                模块:/lib/modules/VERSION-release
                    .ko: kernel object
                ramdisk: /boot/initramfs-VERSION-release.img
                    在内核启动过程中装载根文件系统时有用;

        微内核体系:
            Windows
            Solaris

    Linux系统启动流程:X86(PC)

        POST:加电自检
            ROM+RAM
                ROM:CMOS (BIOS)
                RAM:
                        EFI()

            引导次序:按次序找引导设备,第一个有引导程序的设备即为启动PC server所用到的设备;
                1st boot:
                2nd boot:
                3rd boot:

        MBR:Master Boot Record
            1st sector:512bytes
                446: bootloader
                64: partation table
                2: 5A

        bootloader: 选择要启动的内核(在当前磁盘的某或某些分区上)

            LILO: LInux LOader
                0-1023范围内的柱面构成的分区的内核文件
            GRUB: GRand Unified Bootloader
                CentOS 5,6 Grub 0.97
                CentOS 7, Grub2 1.96

        kernel:
            自身初始化
                探测所有能识别的硬件
                装载驱动程序
                以只读方式装载根文件系统(rootfs)
                /sbin/init

            CentOS 5: SysV, init
            CentOS 6: upstart, init
            CentOS 7: systemd, init

            CentOS 5 SysV, init, /etc/inittab --> /etc/rc.d/rc.sysinit
            CentOS 6 Upstart, /etc/init/*.conf (/etc/inittab)--> /etc/rc.d/rc.sysinit
                chkconfig
            CentOS 7 Systemd,
                /usr/lib/systemd/system/

        CentOS 5: init
            kernel ==> /sbin/init (/etc/inittab)
                设定系统默认运行级别
                    0-6: 7个级别
                        0:关机
                        1: single user mode, s, S, single
                        2: multi user mode, 不支持NFS功能
                        3:完全多用户模式,文本接口
                        4:未使用,预留级别
                        5:完全多用户械,图形接口
                        6: 重启

                    切换级别:init #

                进一步初始化系统
                    /etc/rc.d/rc.sysinit

                启动指定的默认级别的默认为启动的服务,停止指定的级别下默认为关闭的服务;
                    /etc/rc.d/rc#.d
                        S##: 启动的服务
                        K##:停止的服务

                        ##:01-99,数字越小,越优先启动或关闭;

                    脚本如果期望能够被chkconfig命令使用,要在脚本中添加如下行
                        # chkconfig: - 85 15
                            -:当此脚本由chkconfig控制时,默认哪些级别就是开启的,
                            85:启动优先级
                            15: 关闭优先级

                        # chkconfig --add SRV_SCRIPT
                        # chkconfig --del SRV_SCRIPT
                        # chkconfig SRV_SCRIPT {on|off}
                            默认为2345级别;
                            --level ######

                        /etc/rc.d/rc.local (/etc/rc.local): 是一个脚本,通常为系统启动完成的最后运行一个脚本;

                    定义一些组合键的功能:通常是Ctrl+Alt+Delete

                    初始化字符终端

                    如果有需要,启动图形终端

            CentOS 5: /etc/inittab
                每一行定义一种action和对应的程序;
                    id:runlevels:action:process
                    例如
                    si::sysinit:/etc/rc.d/rc.sysinit

                    action: respwan, wait, initdefault
                    l3:3:wait:/etc/rc.d/rc 3

            CentOS 6: /etc/inittab
                由/etc/init/*.conf 一类的配置文件定义init的初始化动作
                    由upstart调用,程序为/sbin/init

    /etc/rc.d/rc.sysinit: 系统初始化脚本
        设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名
        打印文本欢迎信息
        激活SELinux和udev
        挂载/etc/fstab文件中定义的其它文件系统
        激活swap
        检测根文件系统,并以读写方式重新挂载;
        设置系统时钟
        根据/etc/sysctl.conf设置内核参数
        激活LVM和RAID设备;
        加载额外设备的驱动程序;
        清理操作

    初始化流程:POST --> (BIOS)boot sequence --> MBR(bootloader) --> kernel + ramdisk(initrd, initramfs) --> mount rootfs (ro) --> /sbin/init (CentOS 5: /etc/inittab, CentOS6 /etc/init/*.conf)
        设定默认运行级别 --> 使用/etc/rc.d/rc.sysinit初始化系统 --> 分别启动并关闭指定服务 --> Ctrl+Alt+Delete组合键 --> 启动字符终端 --> 启动图形终端

    GRUB: GRand Unified Bootloader
        grub程序由两段组成:
            stage1: MBR (0柱面 0磁道 1扇区)
            stage1_5: MBR随后的扇区
            stage2: 读取grub.conf配置文件,并实现引导功能的扩展

        grub的功能:
            1、提供菜单,并提供交互式接口
                e: 进入编辑模式
            2、选择要启动的内核或系统
                允许传递引导参数给内核
                选择界面可隐藏
            3、为编辑功能提供保护机制
                启用内核文件:
                    选择运行指定的内核得先输入密码
                传递参数:
                    使用e命令得先输入密码

        grub命令行接口:
            root:指定哪个分区为接下来要启动的系统或内核文件所在的分区
                root (DEVICE)
                    所有硬盘都识别为hd
                    不同的硬盘基于数字标识:如hd0, hd1等
                    同一个硬盘上的不同分区,也使用数字标识,如hd0,0  hd1,5

                    root (hd0,0)

                find (DEVICE)/path/to/file

                kernel: 指定要运行的内核文件
                initrd: 为要运行的内核指定其可用的ramdisk文件

                boot: 启动此前配置好的内核或系统

        grub.conf:
            参数:
                default=: 选择第几个title配置的内核或系统,各title从0开始编号
                timeout=#: 菜单显示的超时时长;
                splashimage=/path/to/some_image_file:指定菜单的背景图片;此图片只能为14bits色,xpm格式,gzip压缩;
                hiddenmenu: 隐藏菜单
                title TILTE STRING:显示于菜单中的标题
                    root
                    kernel
                    initrd

        grub保护机制:
            1、生成密码:
                # grub-md5-crypt
            2、保护编辑功能,则需要title之外的添加
                password --md5 密码串
            3、保护使用某内核,则需要内核对应的title之下添加
                password --md5 密码串

        安装grub的方式:
            1、使用grub-install命令
                # grub-install [--root-directory=/path/to/somewhere] DEVICE

                --root-directory=/path/to/somewhere
                    /path/to/somewhere:内核及initrd文件所在的分区的挂载点的父目录,且此挂载点必须叫boot
                        例如:/dev/sdb1: /mnt/boot
                        # grub-install --root-directory=/mnt /dev/sdb

总结:  系统启动流程
    POST --> 引导次序(BIOS)--> BootLoader(MBR) --> kernel + ramdisk (临时根) --> 根切换 (rootfs) --> /sbin/init (配置文件)

    配置文件:设置默认运行级别 --> 指定系统初始化脚本进行系统初始化 --> 启动服务(关闭服务)(/etc/rc.d/rc#.d, /etc/rc.d/init.d/) --> /etc/rc.d/rc.local -> 设置CtrlAltDel组合的功用 --> 启动终端(mingetty),并在终端附加登录程序(login) --> 如果级别为5, 则要启动 X server

    login: root
    password: mageedu

    nsswitch: 检查用户帐是否存在,并且如果存在,还能将其解析为UID;
        库(API),而非服务
        /usr/lib64/libnss*
        /lib64/libnss*
    pam: pluggable authentication module, 做用户认证
        库 (API)
        /lib64/security/*

    ramdisk
        centos5: initrd
            ram disk: 块设备
        centos6: initramfs
            ram fs:

    配置文件:
        c5: sysv init, /etc/inittab
        c6: upstart, /etc/inittab + /etc/init/*.conf
            chkconfig --add, --del, --list, --level
        c7: systemd, /usr/lib/systemd/

    X-Window: Client --> Server
        X protocol
        twm
        Desktop: GNome, KDE, Xfce

    GRUB: GRand Unified Bootloader
        stage1
        stage1_5
        stage2

        命令行接口:
        grub>

        配置文件:
        /boot/grub/grub.conf

        编辑模式:

    Linux内核:单内核,模块化
        内核的某些功能:
            编译进内核本体  [*]
            编译成内核模块  [M]
            不选择使用        [ ]

        内核的组成部分:
            /boot/vmlinuz-VERSION
            /lib/modules/VERSION/
                *.ko: kernel object
                模块间有可能存在依赖关系

内核的模块管理

lsmod: 显示内核已装载模块

 动态装卸载模块:
       卸载:modprobe -r MOD_NAME
       装载:modprobe MOD_NAME

       装载:insmod /path/to/module_file
       卸载:rmmod MOD_NAME

  查看某模块的详细信息:
       modinfo MOD_NAME

  检查并生成模块间依赖关系的命令:
       depmod

原文地址:https://www.cnblogs.com/dragon-123/p/10320427.html

时间: 2024-11-06 03:29:19

Linux 内核及系统启动流程的相关文章

Python学习之路——Linux基础之系统启动流程

系统启动流程 整体过程:BIOS → MRB → Kernel → init 1.BIOS决定从哪个盘开始读操作系统 主引导记录MBR:共512bytes:前446代表引导信息,中64代表分区信息,后2代表标志位 主引导记录加载boot loader,常见的bootloader有GRUB,GRUB用来控制加载哪个操作系统内核 init 切换系统启动级别 1)init 0 重启 2)init 5 切换到图形界面 3)init 3 命令行界面 在加载系统时按任意键进入识别Kernel步骤,按e修改,

Linux内核的启动流程之基础概念

Linux系统的组成部分 从运行状态角度来看 分为 内核+根文件系统 从静态角度来看 分为 磁盘分区+相关文件 内核调用 第一个方式:调用内核过于复杂,所以有些内核开发人员创建了库文件,通过调用库文件来调用内核程序.那么shell就是通过调用库的用户接口(用户程序) 第二个方式:程序开发人员很牛B,他为了追求效率,他自己编写程序直接调用内核程序. 内核设计流派 1.单内核设计 把所有功能集成与同一程序.方便使用,但是一个功能出了问题就影响整个程序.linux就是例子 2.微内核设计 每种功能使用

Linux双核SMP系统启动流程(Zynq-ARM-CortexA9)

转载:http://blog.chinaunix.net/uid-20648445-id-3329217.html 1:资料附录:    <ug585-Zynq-7000-TRM.pdf>                            xilinx zynq 7000技术参考手册    <ug821-zynq-7000-swdev.pdf>                          xilinx zynq 7000软件开发手册    <ug925-zynq-z

Linux学习笔记&mdash;&mdash;系统启动流程

CentOS 启动流程 POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端 POST 加电自检

linux内核之系统启动(二)

在上一节提到由BIOS构建实模式下的内存中断向量表和中断服务程序,那么接下来就是利用这些中断加载操作系统内核,这一步又有三个步骤:1.引导程序bootsect加载:2.setup程序加载:3.system内核加载. 在中断向量表和中断服务程序构建完成以后,BIOS会产生int 0x19中断,该中断的中断服务程序负责从系统盘的第一个扇区(512B)将bootsect程序拷贝到内存的0X07C00(BOOTSEG)位置.在这里int 0X19中断服务程序与操作系统无关,操作系统厂商与硬件厂商有一个约

Linux内核(一)系统启动过程

转载请注明出处:jiq?钦's technical Blog (1) CPU自身初始化: CPU加电之后需要进行一系列的初始化工作: (2) CPU加载BIOS(Basic InputOutput System): CPU执行一个固定的位置(一般是0xFFFFFFF0)的指令.这是一条跳转指令,跳转到BIOS代码的首部.BIOS固化在主板上一个很小的ROM中,主要完成两个工作: (a) 加电自检(POST):完成系统硬件(内存,系统总线等)检测: (b) 加载内核引导程序:读取主引导记录MBR(

第4天--linux内核学习-上午

驱动使用方式1.编译到内核中 * make uImage进入到系统后mknod /dev/led c 500 0 创建设备节点 2.编译为模块 M make module进入到系统后 mknod /dev/led c 500 0 创建设备节点insmod fs4412_led_drv.ko(驱动可执行程序) 加载驱动 uImage的编译1.步骤 make uImage -jNUM NUM = 处理器数量*处理器核心数 2.流程进入顶层目录下的Makefile 找不到uImage 就去找inclu

Linux系统启动流程、内核及模块管理

Linux系统启动流程.内核及模块管理 Linux系统的组成部分组成:内核+根文件系统(kernel+rootfs)内核(kernel): 进程管理(创建.调度.销毁等).内存管理.网络管理(网络协议栈).驱动程序.文件系统.安全功能IPC:Inter Process Communication机制本地进程间通信机制:消息队列.semerphor.shm(共享内存)跨主机进程间通信机制:socket等运行中的系统环境可分为两层:内核空间.用户空间内核空间(模式):内核代码(特权级操作-->系统调

Linux系统启动流程

一直以来对于电脑的开机过程概念还停留在按下开机键,然后等待自动开启.但是对于开启的这一过程几乎一无所知,包括它如何能够通电后自己启动包括内部的一系列的过程. 目前也只是对Linux系统的启动流程有了一个浅显的认识,但它启动的过程也想以自己的理解来分享一下. 一般Linux系统的开机过程有这么几个步骤: 按下电源键 BIOS自检 系统引导 Linux内核启动 初始化系统 登录系统 其中每个过程中又可细分为很多的子过程.按下电源键这一步自不必多说,我们从BIOS自检说起. BIOS自检 BIOS自检