zoukankan      html  css  js  c++  java
  • linux内核管理初步

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

    内核的组成部分:

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

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

        [ ]:N 不装载
        [M]:M 装载为模块
       [
    *]:Y 装载进内核

      辅助文件:ramdisk

        centos5:initrd
        centos6:initramfs

    运行中的内核信息查看:uname命令

    uname [OPTION]...    
        -n:显示节点名称
        -r:显示内核的版本号,VERSION-RELEASE
        -v:显示内核制作版本信息
        -m:显示硬件平台
        -p:显示处理器类型,处理器本身的架构
        -s:显示操作系统名称
        -i:显示硬件平台架构
        -o:显示操作系统名称
        -a:显示所有信息

    1.查看内核版本号
    [root@study kernel]# uname -r
    2.6.32-754.el6.x86_64
    2.查看节点名称
    [root@study kernel]# uname -n
    study.ckh
    3.显示操作系统名称
    [root@study kernel]# uname -s
    Linux

    模块相关命令:

    lsmod命令:显示由核心已经装载的内核模块,显示额内容来自于/proc/modules
    modinfo命令:显示模块的详细描述信息
      modinfo [OPTION] modulename
        -n:显示模块文件路径
        -p:显示模块参数
        -a:auther信息
        -d:description
        -l:liscense

    1.显示模块文件路径
    [root@study kernel]# modinfo -n xfs
    /lib/modules/2.6.32-754.el6.x86_64/kernel/fs/xfs/xfs.ko
    modprobe命令:装载或卸载内核模块
      配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf
      -r:卸载模块

    1.装载xfs模块
    [root@study kernel]# modprobe xfs
    2.卸载xfs模块
    [root@study kernel]# modprobe -r xfs

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

    装载或卸载内核模块:
    insmod命令:
    insmod [ filename ][ module options... ]

    rmmod
    rmmod [ modulename ]

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

    参数:
    只读:输出信息
    可写: 可接受用户指定”新值“来实现对内核某功能或特性的配置
    /proc/sys
    # sysctl -w kernel.hostname=mail.magedu.com

    systctl命令用于查看或设定此目录中诸多参数
    sysctl -w path.to.parameter=VALUE
    echo命令通过重定向的方式也可以修改大多数参数的值
    # echo "www.magedu.com" > /proc/sys/kernel/hostname

    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通过此路径下输出的信息动态为各设备创建所需要设备文件:udev是运行用户空间程序;专用工具: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.获取到目标主机系统功能的相关信息,例如要启用的文件系统

    准备好开发环境
    包组:
    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.67.tar.xz -C /usr/src
    # cd /usr/src
    # ln -sv linux-3.10.67
    # cd linux
    # cp /boot/config-$(uname -r) ./.config

    # make menuconfig : 根据可配置的内核选项进行配置
    # screen
    # make -j # 如果内核多核心编译

    # make modules_install 安装模块
    # make install 安装内核

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

    练习:编译好,并启用之

    回顾: 内核组成部分

    内核组成部分:
    核心: 模块
    核心: /boot/vmlinuz-VERSION-RELEASE
    模块: /lib/moduules/VERSION_RELEASE/

    模块管理的相关命令
    lsmod, modinfo, modprobe [r],insmod, rmmod, depmod

    内核编译:
    []
    [M]
    [*]

    步骤:
    make menuconfig:配置内核选项
    .config: 文本文件
    make [-j #]: 多内核编译
    make modules_install
    make install
    安装bzImage为/boot/vmlinuz-VERSION-RELEASE
    生成initramfs文件
    编辑grub的配置文件

    Linux内核编译(2)

    编译内核的步骤:
    1.配置内核选项
    支持”更新“模式进行配置
    a.make config: 基于命令行以遍历的方式去配置内核中可配置的每个选项
    b.make menuconfig:基于curses的文本窗口界面
    c.make gconfig:基于GTK开发环境的窗口界面
    d.make xconfig:基于Qt开发环境的窗口界面

    支持”全新配置“模式进行配置
    a.make defconfig: 基于内核为目标平台提供的”默认“配置进行配置
    b.make allnoconfig:所有选项均回答为”no“

    2.编译:
    make [-j #]

    如何只编译内核中的一部分功能

    a.只编译某子目录中的相关代码
    # cd /usr/src/linux
    # make dir/

    b.只编译一个特定的模块
    # cd /usr/src/linux
    # make dir/file.ko

    例如:只为e1000编译驱动
    # make drivers/net/ethernet/intel/e1000/e1000.ko

    如何交叉编译内核
    编译的目标平台与当前平台不相同

    # make ARCH=arch_name

    要获取特定目标平台的使用帮助
    # make ARCH=arch_name help

    比如基于arm平台的编译:
    # make ARCH=arm viper_defconfig

    如何在已经执行过编译操作的内核源码树做重新编译
    实现清理操作:
    # make clean:清理大多数编译生成的文件,但会保留config文件等
    # make mrproper: 清理所有编译生成的文件、config及某些备份文件
    # make distclean: mrproper、patches补丁以及编译器备份文件

    screen命令
    打开新的screen:
    # screen
    退出并关闭screen
    # exit
    剥离当前screen
    Ctrl+a,d
    显示所有已经打开的screen
    screen -ls
    恢复screen
    screen -r [SESSION]
    远程关闭正在运行程序的screen:
    screen -X -S 73260 quit

  • 相关阅读:
    IE浏览器下报错: strict 模式下不允许一个属性有多个定义
    Vue 做的项目在IE下面打开一片空白解决方法
    小程序如何动态修改标题navigationBarTitleText
    小程序-for循环遍历的使用
    vue项目-打印页面中指定区域的内容(亲测有效!)
    vue省市区三级联动(高仿京东)
    vue-父组件向子组件传值
    Sea.js 手册与文档
    angular之模块开发二
    angular之跨域
  • 原文地址:https://www.cnblogs.com/ckh2014/p/14051886.html
Copyright © 2011-2022 走看看