Linux内核模块概述 .
Linux 内核具有模块化设计。在引导时,只有少量的驻留内核被载入内存。这之后,无论何时用户要求使用驻留内核中没有的功能,某内核模块(kernel module) ,有时又称驱动程序(driver) 。就会被动态地载入内存。
在安装过程中,系统上的硬件会被探测。基于探测结果和用户提供的信息,安装程序会决定哪些模块需要在引导时被载入。安装程序会设置动态载入机制来透明地运行。
如果安装后添加了新硬件,而这个硬件需要一个内核模块,系统必须被配置来为新硬件载入正确的内核模块。当系统使用新硬件引导后,Kudzu 程序会运行,如果新硬件被支持,它就会被检测到,该程序还会为它配置模块。你也可以通过编辑模块配置文件 /etc/modules.conf 来手工指定这个模块。
例如,如果某系统包括了一个 SMC EtherPower 10 PCI 网卡,模块配置文件包含以下行:
alias eth0 tulip
如果系统上添加了第二个网卡,它和第一个网卡一模一样,在 /etc/modules.conf 中添加这一行:
alias eth1 tulip
内核模块工具
如果安装了 modutils 软件包,你还可以使用一组管理内核模块的命令。使用这些命令来判定模块是否被成功地载入了,或为一件新硬件试验不同的模块。
/sbin/lsmod 命令显示了当前载入了的模块列表。例如:
Module Size Used by Not tainted
iptable_filter 2412 0 (autoclean) (unused)
ip_tables 15864 1 [iptable_filter]
nfs 84632 1 (autoclean)
lockd 59536 1 (autoclean) [nfs]
sunrpc 87452 1 (autoclean) [nfs lockd]
soundcore 7044 0 (autoclean)
ide-cd 35836 0 (autoclean)
cdrom 34144 0 (autoclean) [ide-cd]
parport_pc 19204 1 (autoclean)
lp 9188 0 (autoclean)
parport 39072 1 (autoclean) [parport_pc lp]
autofs 13692 0 (autoclean) (unused)
e100 62148 1
microcode 5184 0 (autoclean)
keybdev 2976 0 (unused)
mousedev 5656 1
hid 22308 0 (unused)
input 6208 0 [keybdev mousedev hid]
usb-uhci 27468 0 (unused)
usbcore 82752 1 [hid usb-uhci]
ext3 91464 2
jbd 56336 2 [ext3]
对每行而言,第一列是模块名称;第二列是模块大小;第三列是用量计数。
用量计数后面的信息对每个模块而言都有所不同。如果 (unused) 被列在某模块的那行中,该模块当前就没在使用。如果 (autoclean) 被列在某模块的那行中,该模块可以被 rmmod -a 命令自动清洗。当这个命令被执行后,所有自从上次被自动清洗后未被使用的被标记了“autoclean”的模块都会被卸载。红帽企业 Linux 不默认执行自动清洗行动。
如果模块名称被列举在行尾的括号内,括号内的模块就依赖于列举在这一行的第一列中的模块。例如,在以下行中:
usbcore 82752 1 [hid usb-uhci]
hid 和 usb-uhci 内核模块依赖于 usbcore 模块。
/sbin/lsmod 输出和查看 /proc/modules 的输出相同。
要载入内核模块,使用 /sbin/modprobe 命令,然后跟着内核模块的名称。按照默认设置,modprobe 试图从 /lib/modules/<kernel-version> /kernel/drivers/ 子目录中载入模块。每类模块都有一个子目录,如用于网络接口驱动程序的 net/ 子目录。某些内核模块有模块依赖关系,这意味着你必须首先载入其它模块才能载入这些模块。 /sbin/modprobe 命令检查这些依赖关系,并在载入指定模块前载入满足这些依赖关系的模块。
例如:
/sbin/modprobe hid
这个命令载入任何满足依赖关系的模块,然后再载入 hid 模块。
要在 /sbin/modprobe 执行命令的时候把它们都显示在屏幕上,使用 -v 选项。例如:
/sbin/modprobe -v hid
所显示的输出和下面相似:
/sbin/insmod /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o
Using /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o
Symbol version prefix 'smp_'
你还可以使用 /sbin/insmod 命令来载入内核模块;不过它不解决依赖关系。因此,推荐你使用 /sbin/modprobe 命令。
要卸载内核模块,使用 /sbin/rmmod 命令和模块名称。rmmod 工具只卸载不在使用的、和不是被正使用的模块所依赖的模块。
例如:
/sbin/rmmod hid
这个命令卸载 hid 内核模块。
另一个有用的模块工具是 modinfo 。使用 /sbin/modinfo 命令来显示关于内核模块的信息。一般语法是:
/sbin/modinfo [options]
包括 -d 在内的选项显示了关于模块的简短描述,-p 选项列举了模块所支持的参数。要获取选项的完整列表,请参阅 modinfo 的说明书页(man modinfo )。
分享到:
相关推荐
1. **Linux内核概述**:Linux内核是操作系统的核心,负责管理硬件资源,提供系统调用接口供用户进程使用,以及管理进程、内存、文件系统和网络等子系统。 2. **系统调用**:Linux内核通过系统调用来提供服务。...
1. **Linux内核概述**:首先,书中会介绍Linux内核的基本架构,包括内核的模块化设计、进程管理、内存管理和I/O处理机制等,这些都是理解内核工作流程的基础。 2. **进程管理**:深入讲解进程的创建、调度、同步和...
### Linux内核模块编程知识点概览 #### 一、引言 **内核模块简介** - **定义**:内核模块是一种特殊的软件组件,可以动态加载到Linux内核中,用于扩展内核的功能而不需重启整个系统。这些模块通常用于添加硬件支持...
### Linux内核模块编译方法 #### 概述 在Linux操作系统中,内核作为操作系统的核心部分,负责管理和调度硬件资源、提供系统调用接口等关键功能。为了满足不同的应用场景需求,用户通常需要对内核进行扩展或定制,...
9. 内核模块:Linux内核支持动态加载和卸载模块,使得系统可以根据需要添加或移除功能,如添加新的文件系统或硬件驱动。 10. 调试工具:为了便于开发和调试,Linux内核提供了如kdump、sysfs、procfs等工具,允许...
### 一、Linux内核源码剖析概述 #### 1. Linux内核简介 Linux内核是Linux操作系统的核心部分,它负责管理和协调计算机硬件资源,为用户提供友好的接口。内核的主要功能包括进程管理、内存管理、文件系统管理、网络...
### Linux内核设计与实现知识点概述 #### 一、Linux内核基础知识 - **定义**:Linux内核是操作系统的核心部分,负责管理系统的硬件资源,为应用程序提供接口。 - **功能**:包括进程管理、内存管理、文件系统、网络...
7. **模块化设计**:Linux内核支持模块化驱动,使得驱动可以动态加载和卸载,有利于系统的灵活性和资源管理。 总的来说,Linux驱动开发不仅涉及硬件层面的编程,还需要对操作系统、图形系统、多媒体处理等有深入...
### Linux内核编程知识点概述 #### 1. Hello, World - **背景**: 在学习编程时,“Hello, World”程序通常作为入门的第一个程序。对于Linux内核编程而言,也是如此。 - **基本结构**: 一个典型的内核模块至少包含...
在前言中,作者概述了编写本书的目的和组织结构,强调了深入理解Linux内核对于IT专业人士的重要性。书中分为多个章节,从历史的角度回顾了Linux自1991年以来的演变,包括Linux的诞生、关键发展时期以及各个重要里程...
### Linux内核完全注释知识点概览 #### 一、书籍基本信息 - **书名**:《Linux内核完全注释》 - **版本**:0.11 (0.95) - **作者**:赵炯 - **联系方式**: - 邮箱:gohigh@sh163.net - 网站:www.oldlinux.org ...
### Linux内核模块编程概述 #### 什么是内核模块? 内核模块是可加载到Linux内核中的独立软件组件,它们允许系统管理员和开发者在不重新编译整个内核的情况下扩展或修改内核功能。模块可以动态加载和卸载,这使得...