美文网首页Linux初学者学习笔记
20170903 系统启动与内核管理(二)

20170903 系统启动与内核管理(二)

作者: 哈喽别样 | 来源:发表于2017-09-04 09:32 被阅读13次
    • 自制linux系统
    • /proc目录
    • /sys目录
    • 内核编译

    一、自制linux系统

    • 分区并创建文件系统
      fdisk /dev/sdb
      设计成:/dev/sdb1对应/boot目录 /dev/sdb2对应根目录
      mkfs.ext4 /dev/sdb1
      mkfs.ext4 /dev/sdb2

    • 挂载boot
      mkdir /mnt/boot:子目录必须为boot,grub-install安装时会自动寻找/boot目录
      mount /dev/sdb1 /mnt/boot

    • 安装grub
      grub-install --root-directory=/mnt /dev/sdb

    • 恢复内核和initramfs文件
      cp /boot/vmlinuz-2.6.32-642.el6.x86_64 /mnt/boot/
      cp /boot/initramfs-2.6.32-642.el6.x86_64.img /mnt/boot

    • 建立grub.conf

    vim /mnt/boot/grub.conf
    title DIY_linux
    root (hd0,0)
    kernel /vmlinuz-2.6.32-642.el6.x86_64 root=/dev/sda2 selinux=0 init=/bin/bash
    //虽然制作系统时,硬盘名称为/dev/sdb,但是制作完成后硬盘拆下来作为启动磁盘时名称应为/dev/sda,故root=/dev/sda2
    //selinx=0用于禁用selinux,保证启动过程顺利
    //没有默认初始化程序/sbin/init,设置为/bin/bash保证系统能够启动
    initrd /initramfs-2.6.32-642.el6.x86_64.img
    
    • 创建一级目录
    mkdir /mnt/sysroot
    mount /dev/sdb2 /mnt/sysroot
    mkdir -pv/mnt/sysroot/{etc,lib,lib64,bin,sbin,tmp,var,usr,sys,proc,opt,home,root,boot,dev,mnt,media}
    
    • 复制bash和相关库文件
      利用脚本将程序和相关依赖的库文件复制到/mnt/sysroot

    二、/proc目录

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

    • 参数:分为只读参数和可写参数

      • 只读:输出信息
      • 可写:可接受用户指定“新值”来实现对内核某功能或特性的配置
    • /proc/sys:有两种方式修改目录下的参数

      • echo命令:通过重定向方式修改大多数参数的值
        echo "VALUE" > /proc/sys/path/to/parameter
      • sysctl命令:用于查看或设定此目录中诸多参数
        sysctl -w path.to.parameter=VALUE
    • 无论是sysctl命令还是echo命令重定向,对内核参数的修改都只在本次开机中有效,重启后修改的设置消失。通过修改/etc/sysctl.conf文件,可以实现永久生效。

    • sysctl命令用法:

      • sysctl -w parameter=VALUE:修改参数值,临时生效
      • sysctl -p:重新读取配置文件/etc/sysctl.conf使之生效,永久生效
      • sysctl -a:查看所有生效的参数
    • 实验:修改/proc/sys/net/ipv4/icmp_echo_ignore_all参数

    1、echo修改参数值为1

    2、sysctl修改参数值为0

    可以看到其他主机对本机的ping命令在修改参数值为1后,忽略了icmp请求,当参数值改为0后,恢复了对icmp请求的响应。可以看到ping结果中的断层。

    3、修改/etc/sysctl.conf文件,将参数改为1
    在文件中加入一行net.ipv4.icmp_echo_ignore_all=1,执行sysctl -p重新读取配置文件

    注意:删除之前增加的记录,执行sysctl -p重新读取配置文件后,会发现参数并没有消失。这是因为sysctl -p命令在读取配置文件后,对当前参数执行的是覆盖操作,而配置文件里面没有的参数将保留原状。

    三、/sys目录

    • 定义:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性

    • udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序

      • udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/usr/lib/udev/rules.d目录下,使用udevadm trigger命令可以使修改的规则文件立即生效

    四、内核编译

    (一)内核的组成与管理
    • 内核组成部分:一般可以理解分为内核核心和内核对象

      • kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE。还有内核启动需要的辅助文件ramdisk,与kernel位于相同目录下,名称为initramfs-VERSION-RELEASE-img。
      • kernel object: 内核对象,一般放置于/lib/modules/VERSION-RELEASE/目录下。
    • 系统信息查询uname:
      uname -n:显示主机名称,等于hostname命令
      uname -r:显示内核版本信息
      uname -a:显示所有信息

    • 内核模块管理

      • lsmod命令:显示核心已经装载的内核模块
        显示的内容来自于: /proc/modules文件
      • modinfo命令: 显示模块的详细描述信息
        语法:modinfo [options] module_name
        -n: 只显示模块文件路径
        -p: 显示模块参数
        -a: author
        -d: description
        -l: license
      • modprobe命令:装载或卸载内核模块
        语法:
        modprobe module_name:装载内核模块,自动解决依赖模块
        modprobe -r module_name:卸载内核模块
      • depmod命令:内核模块依赖关系文件及系统信息映射文件的生成工具
      • insmod module_name:装载内核模块,不自动解决依赖模块
      • rmmod module_name:卸载模块
    (二)编译内核前的准备工作
    • 准备工作一:
      开发环境准备:安装Server Platform Development和Development Tools包组

    • 准备工作二:获取主机硬件设备的相关信息

      • 查询CPU信息:
        cat /proc/cpuinfo
        x86info -a
        lscpu
      • 查看PCI设备信息:
        lspci
        lsusb
        lsblk
      • 了解全部硬件设备信息
        hal-device(CentOS 6专有)
    • 准备工作三:下载源码文件

    (三)编译内核
    • 第1步,内核选项配置
      准备文本配置文件.config,位于源码解压缩目录中。里面详细说明了每个内核编译选项的配置。可以复制/boot/config-VERSION-RELEASE文件,并改名为.config
      ,再根据需要修改。

      make menuconfig:配置内核选项的字符界面工具,以源码目录下的.config为模板,可以对.config文件进行微调。
      菜单选项分为[ ], [M], []三种类型:[ ]指明该选项不编译,[M]指明该选项编译为内核模块,[]选项指明该选项编译进入kernel文件

      在general setup-->local version中,自定义内核本地版本号

    • 第2步,编译过程
      make [-j #]:-j 选项指定几个CPU核心用于编译内核

    • 第3步,安装
      make modules_install:安装模块
      make install :安装内核相关文件,完成以下几个工作

      • 安装bzImage为/boot/vmlinuz-VERSION-RELEASE
      • 生成initramfs文件
      • 编辑grub的配置文件
    (四)编译内核清理
    • make clean:清理大多数编译生成的文件,但会保留config文件等
    • make mrproper:清理所有编译生成的文件、config及某些备份文件
    • make distclean:mrproper、patches以及编辑器备份文件
    (五)卸载内核
    • 删除/lib/modules/目录下不需要的内核库文件
    • 删除/usr/src/linux/目录下不需要的内核源码
    • 删除/boot目录下启动的内核和内核映像文件
    • 更改grub的配置文件,删除不需要的内核启动列表

    相关文章

      网友评论

        本文标题:20170903 系统启动与内核管理(二)

        本文链接:https://www.haomeiwen.com/subject/ubdjjxtx.html