linux内核管理

内核模块管理和编译

单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核核心,一般为bzImage,通常在/boot目录下
名称为 vmlinuz-VERSION-RELEASE
kernel object:内核对象,一般放置于
/lib/modules/VERSION-RELEASE/

​ 辅助文件:ramdisk
​ initrd
​ initramfs

内核版本

运行中的内核:
uname命令:
uname – print system information
uname [OPTION]…
-n: 显示节点名称
-r: 显示VERSION-RELEASE
-a:显示所有信息

内核模块命令

lsmod命令:

  • 显示由核心已经装载的内核模块
  • 显示的内容来自于: /proc/modules文件

modinfo命令:

功能:管理内核模块

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

  • 显示模块的详细描述信息
modinfo [ -k kernel ]  [ modulename|filename... ]

常用选项:

-n:只显示模块文件路径
-p:显示模块参数
-a:作者
-d:描述

范例:

lsmod |grep xfs 
modinfo  xfs
  • 装载或卸载内核模块

    modprobe [ -C config-file ]  [ modulename ]  [ module parame-ters... ]
    modprobe [ -r ] modulename…

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

insmod命令:指定模块文件,不自动解决依赖模块

insmod [ filename ]  [ module options... ]

范例:

insmod modinfo –n exportfs
lnsmod modinfo –n xfs

rmmod命令:卸载模块

rmmod [ modulename ]

范例:

rmmod xfs
rmmod exportfs

编译内核

编译安装内核准备:
(1) 准备好开发环境
(2) 获取目标主机上硬件设备的相关信息
(3) 获取目标主机系统功能的相关信息,例如:需要启用相应的文件系统
(4) 获取内核源代码包, www.kernel.org

编译准备
目标主机硬件设备相关信息

CPU:

cat /proc/cpuinfo
x86info -a
lscpu

PCI设备:lspci -v ,-vv

[root@centos8 ~]#lspci
00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 01)
00:01.0 PCI bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 08)
00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:07.7 System peripheral: VMware Virtual Machine Communication Interface (rev 10)
00:0f.0 VGA compatible controller: VMware SVGA II Adapter
00:10.0 SCSI storage controller: Broadcom / LSI 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01)
00:11.0 PCI bridge: VMware PCI bridge (rev 02)
00:15.0 PCI bridge: VMware PCI Express Root Port (rev 01)
00:15.1 PCI bridge: VMware PCI Express Root Port (rev 01)

USB设备:lsusb -v,-vv

[root@centos8 ~]#dnf install usbutils -y
[root@centos8 ~]#lsusb
Bus 001 Device 004: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
[root@centos8 ~]#lsmod |grep usb
usb_storage            73728  1 uas

lsblk 块设备

全部硬件设备信息:hal-device:CentOS 6

开发环境相关包

gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel

内核编译安装实现
  • 下载源码文件
  • 准备文本配置文件/boot/.config
  • make menuconfig:配置内核选项

  • make [-j #] 或者用以下两步实现:

    make -j # bzImage

    make -j # modules

  • 安装模块:make modules_install
  • 安装内核相关文件:make install

    • 安装bzImage为 /boot/vmlinuz-VERSION-RELEASE
    • 生成initramfs文件
    • 编辑grub的配置文件
编译安装内核实战案例
[root@centos8 ~]#yum install gcc make ncurses-devel flex bison openssl-devel elfutils-libelf-devel
[root@centos8 ~]#tar xf linux-5.4.13.tar.xz -C /usr/src
[root@centos8 ~]#cd /usr/src
[root@centos8 ~]#ln -sv linux-5.4.13 linux
[root@centos8 ~]#cd /usr/src/linux
[root@centos8 ~]#cp /boot/config-$(uname -r)   ./.config
[root@centos8 ~]#vim .config 
# CONFIG_MODULE_SIG is not set
CONFIG_SYSTEM_TRUSTED_KEYS=""
# CONFIG_DEBUG_INFO is not set

[root@centos8 ~]#make help
[root@centos8 ~]#make menuconfig
[root@centos8 ~]#make -j 2   或者 make -j 2 bzImage ; make -j 2 modules
[root@centos8 ~]#make modules_install
[root@centos8 ~]#make install
[root@centos8 ~]#reboot 
内核编译说明
  1. 配置内核选项

    ​ 支持“更新”模式进行配置:make help
    ​ (a) make config:基于命令行以遍历的方式配置内核中可配置的每个选项
    ​ (b) make menuconfig:基于curses的文本窗口界面
    ​ (c) make gconfig:基于GTK (GNOME)环境窗口界面
    ​ (d) make xconfig:基于QT(KDE)环境的窗口界面

    ​ 支持“全新配置”模式进行配置

    ​ (a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置
    ​ (b) make allyesconfig: 所有选项均回答为“yes“
    ​ (c) 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

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

​ make ARCH=arch_name

要获取特定目标平台的使用帮助
make ARCH=arch_name help
示例:
make ARCH=arm help

4 重新编译需要事先清理操作

make clean:清理大多数编译生成的文件,但会保留config文件等
make mrproper: 清理所有编译生成的文件、config及某些备份文件
make distclean:mrproper、清理patches以及编辑器备份文件
卸载内核
  • 删除/lib/modules/目录下不需要的内核库文件
  • 删除/usr/src/linux/目录下不需要的内核源码
  • 删除/boot目录下启动的内核和内核映像文件
  • 更改grub的配置文件,删除不需要的内核启动列表 grub2-mkconfig -o /boot/grub2/grub.cfg
  • CentOS 8 还需要删除 /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-新内核版本.conf

本文链接:http://www.yunweipai.com/33947.html

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/52433.html

(0)
上一篇 2021年8月6日
下一篇 2021年8月6日

相关推荐

发表回复

登录后才能评论