二十七、Linux内核管理

内核组成: uname命令

内核:uname,mkinitrd,dracut

模块: lsmod,modinfo,depmod,modprobe,insmod,rmmod

/proc,sysctl,/sys,/dev,udevadm,hotplug命令



一、静态视角:

Linux内核模块

  吸收微内核设计:支持模块化设计:

  内核中模块 .ko (kernel object)

  程序调用的库 .so (share object)

内核模块相当于程序的库的概念,只是模块只能被kernel调用。库只能被程序调用

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

  内核组成部分:

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

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

    辅助文件 initramfs(CentOS 6,7) , initrd (CentOS5)

 三种选择:
      [ ]: N  ---不编译此功能(不支持该功能)
      [M]:M  ---编译成模块(按需动态加载)
      [*]: Y ---编译成核心组成部分(需要直接使用)

二、动态视角:

 2.1、uname 命令

查看内核相关的信息

    uname 显示系统(kernel)信息

        -s 显示操作系统名称

        -n 显示当前主机名称: 显示节点名称

        -r 显示VERSION及RELEASE号 

        -v 显示内核制作信息号 SMP 对称多处理器

        -m 当前硬件平台 x86_64

        -p 显示处理器类型或架构 x86_64

        -i 硬件架构 x86_64

        -o 操作系统(GNU/Linux)

2.2、lsmod --- 查看由内核已经装载的模块  

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

# lsmod
Module     Size        Used by
模块       大小        使用次数

2.3、modinfo --- 显示模块的详细描述信息

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

    -d :显示模块的描述

   -p :模块的参数 

    -k kernel  :显示指定内核的模块信息

   -a  :Author

    -l:License

1、显示所有信息
# modinfo ext4
filename:       /lib/modules/2.6.32-696.el6.i686/kernel/fs/ext4/ext4.ko
license:        GPL
description:    Fourth Extended Filesystem
author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts‘o and others
srcversion:     74AEE2BDA63AC8482A78F4D
depends:        mbcache,jbd2
vermagic:       2.6.32-696.el6.i686 SMP mod_unload modversions 686 

2、仅显示filename
# modinfo -n ext4
/lib/modules/2.6.32-696.el6.i686/kernel/fs/ext4/ext4.ko

3、仅显示License
# modinfo -l ext4
GPL

4、仅显示description
# modinfo -d ext4
Fourth Extended Filesystem

5、仅显示作者
# modinfo -a ext4
Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts‘o and others

6、显示模块参数
# modinfo -p ext4

2.4、生成模块的依赖关系 depmod

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

为指定内核生成依赖 -b

/boot/system.map-VERSION-RELEASE 内核依赖的模块及库

/lib/modules/VERSION-RELEASE/modules.dep.bin 模块的依赖关系

2.5、装载模块 modprobe MODULE 或 insmod $(modinfo -n MODULE)

# modprobe pcnet32
# lsmod | fgrep pcnet32
pcnet32                29107  0
mii                     4476  1 pcnet32

安装pcnet32模块
# insmod $(modinfo -n pcnet32)
insmod: error inserting ‘/lib/modules/2.6.32-696.el6.i686/kernel/drivers/net/pcnet32.ko‘: -1 Unknown symbol in module
该情况可能是由于依赖关系造成
查看依赖
# modinfo pcnet32
depends:        mii

依据路径安装被依赖的模块
# insmod $(modinfo -n mii)

查看是否安装
# lsmod | fgrep mii
mii                     4476  0 

安装Pcnet32
# insmod $(modinfo -n pcnet32)

查看是否安装
# lsmod | fgrep pcnet32
pcnet32                29107  0
mii                     4476  1 pcnet32

2.6、modprobe --- 拆除模块

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

    modprobe -r MODULE 或 rmmod MODULE

# modprobe -r pcnet32
# lsmod | fgrep pcnet32
# 

# rmmod pcnet32
# lsmod | fgrep pcnet32
#

2.7、/proc目录

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

  只读 :输出信息-----内核内部统计、状态信息

  可写: 可配置参数,/proc/sys目录中,由sysctl命令控制,内核性能调整

    临时生效:echo ‘STRING‘ > /proc/sys/kernel/hostname , sysctl -w kernel.hostname=‘STRING‘

    永久有效:/etc/sysctl.conf   

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

    sysctl  -w path.to.parameter=VALUE

    #sysctl -w kernel.hostname= liu

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

    echo “VALUE” > path/to/parameter

    #echo "localhost" > /proc/sys/kernel/hostname

sysctl命令:
  配置文件: /etc/sysctl.conf
-a 显示所有内核参数-p 重读配置文件 
-p CONFIG_FILE 读取文件设定参数 -w PARAMETER=‘VALUE‘ 设定内核参数     主机名: /proc/sys/kernel/hostnam      # echo ‘VALUE‘ > /proc/sys/kernel/hostname
      # sysctl -w kernel.hostname=‘VALUE‘

内核路由转发: /proc/sys/net/ipv4/ip_forward  1:开启; 0:关闭 

cache/buffer回收: /proc/sys/vm/drop_caches  1: dropcache   #sysctl -w vm.drop_caches=1 
 常用几个参数:(被映射为目录)    net.ipv4_forward    vm.drop_caches    kernel.hostname

2.8、/sys目录---针对硬件设备

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

a)、内核探测的硬件信息

kernel 2.4- /dev/目录下事先创建所有设备文件,/dev/目录文件多,造成大量空间浪费

kernel 2.4+ /dev/目录下按需生成设备文件,kernel临时探测,按需创建,节约空间

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

  • udev工具: udevadmin,hotplug
  • udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下 
  • 读取/sys目录下的硬件信息,在/dev目录下创建设备文件

三、ramdisk文件的制作

(1)mkinitrd 命令  :为当前正在使用的内核重新制作ramdisk文件

  mkinitrd [OPTION...] [<initrd-image>] <kernel-version>

#mv /boot/initramfs-2.6.32-573.el6.x86_64.img   /root/
#mkinitrd  /boot/initramfs-$(uname -r).img   $(uname -r)

(2)dracut 命令

  dracut [OPTION]... <image> <kernel-version>

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

3.2、展开  initramfs-$(uname -r).img

1、查看文件的类型
file 

2、改名.gzip结尾
mv 

3、解压
gzip -d

4、查看文件类型
file

5、展开
install -d initrd
cd initrd
cpio -id < ../

四、简易编译内核

1)准备好开发环境

2)获取源码

3)获取目标主机的硬件设备信息

4)获取到目标主机系统功能的项管部信息---目标实际需要

准备开发环境

  包组(centos 6):  yum grouplist

    Server Platform Development

    Development Tools

4.1、

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

CPU

  cat /proc/cupinfo

  yum install x86info
    x86info  -a
  lsmod

PCI

  #lspci

  #lsusb

  #lsblk

了解全部硬件设备信息

  #hal-device

第一次最好从参照模块文件来做如图:

4.2、

1)、获取源码

  https://www.kernel.org/

  **小于3.10版本

2)、展开至/usr/local/目录

tar xf  linux-3.10.67.tar.xz  -C  /usr/local/src

3)、创建符号链接

  ln  -sv linux-3.10.67  linux

4)、[[email protected] src]#cd linux

  [[email protected] src]#cp /boot/config-2.6.32-573.el6.x86_64 .config

5)、选择支持的模块

根据提示需要安装ncurses-devel, yum -y install ncurses-devel

再执行make menuconfig命令会弹出如图界面(会加载.config文件内容)

a)、设置release号

  

b)、设置主机名

  

c)、设置支持NTFS文件系统

  

d)、设置支持的网络驱动

打开一个虚拟的屏幕:

  yum -y install screen
  退出: ctrl + a 松开a后按d
  列出: screen -ls  找出ID
  连接回: screen -r ID

6)、编译

make -j #
    # lscpu 中 cpu(s) 后的数字为cpu核心数

7)、执行安装:

    make  modules_install

    make install

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

原文地址:https://www.cnblogs.com/liuzhiyun/p/11440666.html

时间: 2024-10-08 12:48:59

二十七、Linux内核管理的相关文章

Linux学习之CentOS(二十三)--Linux软件管理之源代码以及RPM软件包管理

在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 先我们先来看一下源代码的方式.我们知道,在开源的环境下,大多数的开源软件都是以源代码的形式来发布,通常将源代码打包成tar.gz的归档压缩文件发 布到网上供我们下载使用.但是我们下载下来的源代码方式我们还不能够直接使用,不像在windows系统上直接下载下来可执行的二进制文件,我们需要将下 载好的

Linux系列教程(十二)——Linux软件包管理之yum在线管理

上一篇博客我们介绍了rpm包管理之rpm命令管理,我们发现在使用rpm命令手动安装rpm包的时候,会发现安装遇到到的依赖让你痛不欲生,安装一个rpm时会要先先安装某个依赖的rpm,而安装这个依赖的rpm包是可能又必须先安装它所依赖的.在实际操作中,我们肯定是不会使用rpm命令手动安装软件包的,更简单的方法就是这篇博客我们将介绍RPM包管理——yum在线管理. 1.yum在线管理 yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUS

Linux 内核管理

Linux内核基础:Linux Kernel:  Linux内核的体积结构是单内核的,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制,使得虽然是单内核,但工作在模块化的方式下,并且模块可以动态装载或卸载:Linux内核负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.如是我们在了解Linux内核的基础上根据自己的需要量身定制一个更高效更稳定的内核,就需要我们手动去编译和配置内核里的各项相关的参数和信息.  内核的组成部分: 1.Kernel:内核核心,一般

Linux内核管理风格

内核社区管理是一个很独特很有挑战性的事情, 各系统维护者拥有很大的权利,却又无法命令和管理社区参与者: 一边不停的拒绝人们各种功能提交,一边却希望开发者留在自己的领域继续贡献力量.这篇文章向您揭示,成功的社区维护者如何展示领导力(捣糨糊).祝大家 假期快乐! 这是一个简短的文档,描述了Linux内核的首选(或编造的,取决于您问谁)管理风格. 它的目的是在某种程度上参照 process/coding-style.rst 主要是为了避免反复回答 [1] 相同(或类似)的问题. 管理风格是非常个人化的

第三十二课 linux内核链表剖析

__builtin_prefetch是gcc扩展的,用来提高访问效率,需要硬件的支持. 在标准C语言中是不允许static inline联合使用的. 删除依赖的头文件,将相应的结构拷贝到LinuxList.h中: 此外,需要将container_of改写成我们自己的形式. 1 #define container_of(ptr, type, member) ((type *)((char *)ptr - offsetof(type,member))) 移植后的内核链表如下: 1 #ifndef _

Linux学习笔记(二)——Linux用户管理和权限管理

Linux系统的权限管理 Linux系统是一个多用户多任务的操作系统,多用户是指系统资源可以被不同用户各自拥有,即每个用户对自己的资源有特定的权限,用户之间互不影响.Linux系统有一套权限管理机制,文件不允许非授权用户访问或修改.这种机制的实现是通过用户和组的形式实现的. 5.1           Linux安全机制 账户管理是Linux安全机制的核心部分.登录Linux系统的用户都会被分配一个的用户账户.用户对系统上文件的访问权限取决于他们登录系统时使用的账户.每个用户的权限是通过创建用户

第十二章 linux磁盘管理-lvm(2)

yum install lvm2-2.02.72-8.el6_0.4.x86_64 1.将新创建的两个分区/dev/sdb1 /dev/sdb2转化成物理卷,主要是添加LVM属性信息并划分PE存储单元. pvcreate /dev/sdb1 /dev/sdb2 pvs pvdisplay 2.创建卷组 vgdata ,并将刚才创建好的两个物理卷加入该卷组.可以看出默认PE大小为4MB,PE是卷组的最小存储单元.可以通过 –s参数修改大小 vgcreate vgdata /dev/sdb1 /de

Linux内核管理--内存(一)

1)Linux把空闲的物理内存划出一部分用作buffer,cache 2)buffer cache是高速缓存环从,目的是为了解决磁盘读取速度远小于内存这个问题,cpu从内存直接读取最快: 3)但是物理内存有限,不可能所有数据都在物理内存,swap交换分区就出现了,内核会根据""最近经常使用""算法,把不经常使用的内存数据交换到swap: 4)有时可以发现物理内存充足,swap也使用了很多也是正常的,因为linux内存交换是不时在进行的,一个占用内存资源很大的程序开始

【转载】Linux磁盘管理:LVM逻辑卷管理

Linux学习之CentOS(二十五)--Linux磁盘管理:LVM逻辑卷基本概念及LVM的工作原理 这篇随笔将详细讲解Linux磁盘管理机制中的LVM逻辑卷的基本概念以及LVM的工作原理!!! 一.传统的磁盘管理 其实在Linux操作系统中,我们的磁盘管理机制和windows上的差不多,绝大多数都是使用MBR(Master Boot Recorder)都是通过先对一个硬盘进行分区,然后再将该分区进行文件系统的格式化,在Linux系统中如果要使用该分区就将其挂载上去即可,windows的话其实底