一、内核模块管理

1.1 内核源码与模块路径

内核源码路径:

ls /usr/src/kernels/$(uname -r)/
ls /usr/src/kernels/2.6.32-279.el6.x86_64/

建议不要删除内核源码,因为有些软件在编译安装时需要使用内核源码。

Linux 系统的基本组成:

linux = boot + kernel + fs

内核模块(可理解为驱动)路径:

ls /lib/modules/$(uname -r)/kernel

输出目录及含义:

目录 含义
arch/ 架构平台相关
crypto/ 加密相关
drivers/ 驱动相关
fs/ 文件系统
kernel/ 内核核心
lib/ 库
net/ 网络
sound/ 声音

由内核源码编译出来的模块按分类放在上述目录中。

1.2 模块查看与信息

查看当前已装载的模块:

lsmod

查看特定模块信息:

modinfo cdrom

输出示例:

filename:       /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/cdrom/cdrom.ko
license:        GPL
srcversion:     6C1B1032B5BB33E30110371
depends:
vermagic:       2.6.32-431.el6.x86_64 SMP mod_unload modversions
parm:           debug:bool
parm:           autoclose:bool
parm:           autoeject:bool
parm:           lockdoor:bool
parm:           check_media_type:bool
parm:           mrw_format_restart:bool

1.3 确认网卡模块名称

通过 dmesg 查看网卡模块名称:

dmesg | grep eth

输出示例:

e1000 0000:02:01.0: eth0: (PCI:66MHz:32-bit) 00:0c:29:72:3e:33
e1000 0000:02:01.0: eth0: Intel(R) PRO/1000 Network Connection
e1000 0000:02:05.0: eth1: (PCI:66MHz:32-bit) 00:0c:29:72:3e:3d
e1000 0000:02:05.0: eth1: Intel(R) PRO/1000 Network Connection
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
eth0: no IPv6 routers present

上例中网卡模块名为 e1000。

1.4 模块的装载与删除

命令 说明
rmmod <模块名> 删除模块
modprobe <模块名> 装载模块,只需写模块名
insmod <模块绝对路径> 装载模块,必须写绝对路径
rmmod vmci
modprobe vmci
insmod /lib/modules/2.6.32-279.el6.x86_64/misc/vmci.ko

1.5 模块操作示例:删除并恢复网卡模块

删除网卡模块后网络立即不可用,重新装载后恢复:

mii-tool eth0
# eth0: negotiated 100baseTx-FD flow-control, link ok

rmmod r8169
mii-tool eth0
# SIOCGMIIPHY on 'eth0' failed: No such device

modprobe r8169

二、内核编译

2.1 什么是内核编译

对内核源码的功能进行定制。内核源码可从 www.kernel.org 下载。

当前系统使用的内核源码:

ls /usr/src/kernels/$(uname -r)

2.2 什么情况下需要编译内核

  1. 系统需要支持某个功能,但内核默认不支持,又不想升级成新系统,则需要编译内核。
  2. 开发了一个模块,需要内核的支持,也需要编入内核。

2.3 内核编译需要考虑的因素

  1. 自己定制的内核运行更快,具有更少的代码。
  2. 把不需要的功能编译进内核可能会有被漏洞利用的风险。
  3. 将某种功能编译成模块方式,比直接编译进内核速度要慢。

2.4 内核编译步骤

第一步:准备内核源码并解压

tar xf /var/www/html/index.html/soft/kernel/linux-4.4.tar.xz -C /usr/src/kernels/
cd /usr/src/kernels/linux-4.4/

第二步:清理源码树

make mrproper

该命令清除当前内核源码中的编译痕迹,使之干净,类似于编译软件时的 make clean。

第三步:配置内核选项

有多种配置界面可选:

命令 说明
make config 基于文本的传统配置界面,不推荐使用
make menuconfig 基于 ncurses-devel 库的文本选单方式(需安装 ncurses-devel)
make oldconfig 在原来的内核配置基础上进行修改
make xconfig 基于 X Windows 的图形配置界面,基于 Qt(需安装 avahi-qt3-devel)

使用 make menuconfig 时,如果终端窗口太小会报错:

It must be at least 19 lines by 80 columns.

配置界面中选项的含义:

符号 含义
* 编入内核
M 编成模块
空 不编入内核

有三种括号类型:

括号 含义
方括号 [ ] 要么编进,要么不编
尖括号 < > 三种选择:编进、不编、编成模块
圆括号 ( ) 多选一

定制完成后保存,所有选择结果会保存到 .config 文件中,可用 vi 打开查看。

第四步:编译内核

make

编译过程相当漫长。

第五步:安装模块

make modules_install

将编译后的模块复制到 /lib/modules/<内核新版本>/ 目录下,之后即可用 modprobe、insmod 装载使用。

第六步:安装内核

make install

拷贝 vmlinuz、initramfs 到 /boot/ 目录下,并自动修改 GRUB 配置。

编译完成后,重启系统,在 GRUB 菜单中选择新内核进入系统进行验证。

2.5 RPM 方式安装内核(RHEL 5 时代)

内核类型 说明
PAE(Physical Address Extend) 物理地址扩展,使 32 位系统可以使用大于 4G 的内存
xen Xen 虚拟化使用的内核(半虚拟化需要修改内核)
rpm -ivh /share/yum/Server/kernel-PAE-2.6.18-164.el5.i686.rpm
rpm -ivh /share/yum/Server/kernel-xen-2.6.18-164.el5.i686.rpm

2.6 作业

  1. 写出安装一个以 .src.rpm 结尾的软件包的命令步骤。
  2. 写出编译一个源码包的安装步骤。

最后修改:2026 年 09 月 20 日
如果觉得我的文章对你有用,请随意赞赏