zoukankan      html  css  js  c++  java
  • Linux:Day13(下) GRUB

    GRUB(Boot Loader):

      grub:GRand Unified Bootloader

        grub 0.x:grub legacy

        grub 1.x:grub2

      grub legacy:

        stage1:mbr

        stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;

        stage2:磁盘分区(/boot/grub/)

        配置文件:/boot/grub/grub.conf  <--  /etc/grub.conf

        stage2及内核等通常放置于一个基本磁盘分区;

          功用:

            (1) 提供菜单,并提供交互式接口

              e:编辑模式,用于编辑菜单;

              c:命令模式,交互式接口;

            (2) 加载用户选择的内核或操作系统

              允许传递参数给内核

              可隐藏此菜单

            (3) 为菜单提供了保护机制

              为编辑菜单进行认证

              为启用内核或操作系统进行认证

        如何识别设备:

          (hd#,#)

            hd#:磁盘编号,用数字表示;从0开始编号

            #:分区编号,用数字表示;从0开始编号

        grub的命令行接口

          help:获取帮助列表;

          help KEYWORD:详细帮助信息

          find (hd#,#)/PATH/TO/SOMEFILE;

          root ( hd#,#)

          kernel /PATH/TO/ERNEL_FILE;设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

            例如:init=/path/to/init,selinux=0

          initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk;

          boot:引导启动选定的内核;

          手动在grub命令行接口启动系统:

            grub> root (hd#,#)

            grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE

            grub> initrd /initramfs-VERSION-RELEASE.img

            grub> boot

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

          配置项:

            default=#:设定默认启动的菜单项;茶单项(title)编号从0开始;

            timeout=#:指定菜单项等待用户选择的时长;

            splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;

            hiddenmenu:隐藏菜单;

            password [--md5] STRING:菜单编辑认证;

            title TITLE:定义菜单项“标题”,可出现多次;

              root (hd#,#):grub查找stae2及kernel文件所在设备分区;为grub的“根”;

              kernel /PATH/TO/VMLINUZ_FILE [ PARAMETERS];启动内核

              initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;

              password [--md5] STRING:启动选定的内核或操作系统时进行认证;

          grub-md5-crypt命令

        进入单用户模式:

          (1) 编辑grub菜单(选定要编辑的title,而后使用e命令);

          (2) 在选定的kernel后附加

            1,s,S或single都可以;

          (3) 在kernel所在行,键入“b"命令;

        安装grub:

          (1) grub-install  # 完整安装,三个阶段都会安装

               grub-install  --root-directory=ROOT /dev/DISK

          (2) grub  # 安装第1阶段和1.5阶段

             grub> root (hd#,#)

             grub> setup (hd#)

        练习:

          1、新加硬盘,提供直接单独运行bash系统;

          2、破坏本机grub stage1,而后在救援模式下修复之;

          3、为grub设备保护功能;

    Linux Kernel:

      单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。

        内核组成部分:

          kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE; 

          kernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/

            [ ]:N

            [M ]:M

            [*]:Y

          辅助文件:ramdisk

            initrd

            initramfs

        运行中的内核:

          uname命令:

            uname - print system information

            uname [OPTION]...

              -n:显示节点名称;

              -r:显示VERSION-RELEASE;

          模块:

            lsmod命令:

              显示由核心已经装载的内核模块

              显示的内容来自于:/proc/modules文件

            modinfo命令:

              显示模块的详细描述信息

              modinfo [ -k kernel ] [modulename|filename...]

                -n:只显示模块文件路径

                -p:显示模块参数

                -a:author

                -d:description

                -l:license

            modprobe命令:

              装载或卸载内核模块

              modprobe [ -C config-file ]  [ modulename ] [ module parame-ters... ]  # 直接指定模块名且可自动解决依赖关系

                配置文件:/etc/modprobe.conf,/etc/modprobe.d/*.conf

              modprobe [-r] modulename...

            depmod命令:

              内核模块依赖关系文件及系统信息映射文件的生成工具;

            装载或卸载内核模块:

              insmod命令:  

                insmod [ filename ] [ module options... ]  # 此命令必须指定路径且不能自动解决依赖关系

              rmmod

                rmmod [ modulename ]

        /proc目录:

          内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出。

          参数:

            只读:输出信息

            可写:可接受用户指定“新值”来实现对内核某功能或特性的配置

              /proc/sys

              (1) sysctl命令用于查看或设定此目录中诸多参数;

                 sysctl -w path.to.parameter=VALUE

              (2) echo命令通过重定向的方式也可以修改大多数参数的值;

                 echo "VALUE" > /proc/sys/path/to/parameter

            sysctl命令:

              配置文件:/etc/sysctl.conf

                (1) 设置某参数

                  sysctl -w parameter=VALUE

                (2) 通过读取配置文件设置参数

                  sysctl -p [/path/to/conf_file]

            内核中的路由转发:

              /proc/sys/net/ipv4/ip_forward

              常用的几个参数:

                net.ipv4.ip_forward

                vm.drop_caches

                kernel.hostname

        /sys目录:

          sysfs:输出内核识别出的各硬件设备的相关属性信息;也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性。

          udev通过此路径下输出的信息动态为各设备创建所需要设备文件;uddev是运行用户空间程序;专用工具:udevadmin,hotplug;

          udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下; 

        ramdisk文件的制作:

          (1) mkinitrd命令

            为当前正在使用的内核重新制作ramdisk文件

              ~]# mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

          (2)dracut命令

            为当前正在使用的内核重新制作ramdisk文件

              ~]# dracut /boot/initramfs-$(uname -r).img $(uname -r)

        编译内核:

          前提:

            (1) 准备好开发环境;

            (2) 获取目标主机上硬件设备的相关信息;

            (3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;

          准备好开发环境:

            包组(CentOS 6):

              Server Platform Development

              Development tools    

          目标主机硬件设备相关信息:

            CPU:

              cat /proc/cpuinfo

              x86info -a

              lscpu

            PCI设备:

              lspci

                -v

                -vv

              lsusb

                -v

                -vv

              lsblk

            了解全部硬件设备信息

              hal-device

          简单依据模板文件的制作过程:

            tar xf linux-3.10.57.tar.xz -C /usr/src

            cd /usr/src

            ln -sv linux-3.10.67 linux

            cd linux

            cp /boot/config-$(uname -r) ./.config

     

            make menuconfig

            screen

            make -j #

      

            make modules_install

            make install

            重启系统,并测试使用新内核;

          练习:编译好,并启用之;  

  • 相关阅读:
    BZOJ2095 [Poi2010]Bridges
    BZOJ3307 雨天的尾巴
    【CSP2020】 T3 动物园
    【CSP2020】 T1儒略日
    洛谷P3455 [POI2007]ZAP-Queries
    【黑科技学习】光速幂
    XJTUOJ #1023 JM的祖传零钱箱
    XJTUOJ #1168 zxh的后宫管理系统
    XJYUOJ #1053 nocriz与队列计算机
    XJTUOJ #1017 JM的完美集合
  • 原文地址:https://www.cnblogs.com/sq5288/p/10628793.html
Copyright © 2011-2022 走看看