`
fp_moon
  • 浏览: 971145 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Linux内核模块概述 --转

阅读更多

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 )。 

 

分享到:
评论

相关推荐

    嵌入式linux学习资料之使用UML调试Linux内核和模块--千锋培训

    文档介绍了概述,一、构建UML内核调试环境,1.构建UML内核树,1)下载一份内核源码包,2)解压之后cd到源码根目录下,3)配置内核并编译,4)编译内核模块,2.准备运行UML的根文件系统和交换文件系统

    深入分析Linux内核源码.chm

    10.5 编写内核模块 第十一章 设备驱动程序 11.1 概述 11.2 设备驱动基础 11.3 块设备驱动程序 11.4 字符设备驱动程序 第十二章 网络 12.1 概述 12.2 网络协议 12.3 套接字(socket) 12.4 套接字缓冲区(sk_buff) 12.5 ...

    Linux编程--Linux内核

    Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作...

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    丛书名: Linux内核源代码情景分析 出版社:浙江大学出版社 目录 第1章 预备知识 1.1 Linux内核简介. 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux...

    Linux编程--Linux内核概念系统结构

    Linux内核概念系统结构 摘要 323 前言 324 第1章 系统结构 325 1.1 系统概述 325 1.2 内核的目标 325 1.3 内核结构的概述 325 1.4 支持多个开发人员 327 1.5 系统数据结构 328 1.5.1 任务列表 328 1.5.2 内存映射 ...

    嵌入式Linux视频教程全套2011新版-国嵌嵌入式培训下载地址

    -国嵌内核驱动进阶班-1-4(Linux内核模块开发).avi -国嵌内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -国嵌内核驱动进阶班-2-1(嵌入式linux系统架构).avi -国嵌内核驱动进阶班-2-2(交叉工具链)....

    Linux内核 内容很全

    处理器 115 10.1 X86 115 10.2 ARM 115 10.3 Alpha AXP处理器 115 第11章 Linux内核源代码 117 11.1 怎样得到Linux内核源码 117 11.2 内核源码的编排 117 11.3 从何处看起 118 第12章 Linux...

    深入分析Linux内核源码

    深入分析Linux内核源码 前言 第一章 走进linux 1.1 GNU与Linux的成长 1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化 1.4 分析Linux内核的意义 ...

    华清远见驱动教程

    -第4章、Linux内核模块 -第5章、Linux文件系统与设备文件系统 -第6章、字符设备驱动 -第7章、Linux设备驱动中的并发控制 -第8章、Linux设备驱动中的阻塞与非阻塞IO -第9章、Linux设备驱动中的异步通知与异步IO -第10...

    边干边学——LINUX内核指导

    第4章 内核模块 4. 1 概述 4. 2 模块实现机制 4. 3 实例 第5章 系统调用 5. 1 一个简单的例子 5. 2 系统调用基础知识 5. 3 相关数据结构. 源代码分析及流程 5. 4 详细讲解一个系统调用的实现 5. 5 简单系统调用的...

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    读核感悟 kbuild系统 内核模块的编译 22 读核感悟 kbuild系统 编译到内核和编译成模块的区别 24 读核感悟 kbuild系统 make bzImage的过程 26 读核感悟 kbuild系统 make menuconfig 31 读核感悟 文件系统 用C来实现...

    Linux内核阅读

    读核感悟-kbuild系统-内核模块的编译.........................................22 读核感悟-kbuild系统-编译到内核和编译成模块的区别...........................24 读核感悟-kbuild系统-make bzImage的过程.........

    mini2440国嵌视频教程+课件+工具+软件+镜像+教程源码下载地址

    -国嵌内核驱动进阶班-1-4(Linux内核模块开发).avi -国嵌内核驱动进阶班-1-5(必修实验).avi -第2天(U-Boot移植) -国嵌内核驱动进阶班-2-1(嵌入式linux系统架构).avi -国嵌内核驱动进阶班-2-2(交叉工具链)....

    安装 SUSE Linux Enterprise Server --服务器版

    特殊的控制器(如 RAID 控制器)需要额外的内核模块,请向安装系统提供一 个内核模块更新磁盘。 4 入门指南 其他安装目标可能是提供运行操作系统所需的足够磁盘空间和速度的所有种类 的块设备。这包括网络块设备,如...

    Linux内核情景分析

    1. 1 Linux内核简介 1. 2 Intel X86 CPU系列的寻址方式 1. 3 i386的页式内存管理机制 1. 4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 ...

    linux 内核源代码分析

    1. 1 Linux内核简介 1. 2 Intel X86 CPU系列的寻址方式 1. 3 i386的页式内存管理机制 1. 4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架...

    Linux内核情景分析(非扫描版)

    1. 1 Linux内核简介 1. 2 Intel X86 CPU系列的寻址方式 1. 3 i386的页式内存管理机制 1. 4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的汇编语言代码 第2章 存储管理 2.1 Linux内存管理的基本框架 2.2 ...

    linux内核源代码情景分析

    《linux内核源代码情景分析》(非扫描电子版本) 第1章 预备知识 1.1 Linux内核简介 1.2 Intel X86 CPU系列的寻址方式 1.3 i386的页式内存管理机制 1.4 Linux内核源代码中的C语言代码 1.5 Linux内核源代码中的...

    linux内核进程管理

    1、linux进程管理的模块组织框架 2、相关数据结构。 3、进程调度原则,调度算法,。 4、进程的创建和运行管理。 5、进程间通讯。 6、更多的技术 进程调度和中断处理交接 进程管理涉及的内核机制:bottom-half处理...

    linux网络编程-宋敬彬-part4

    1.5.1 Linux内核的主要模块 7 1.5.2 Linux的文件结构 9 1.6 GNU通用公共许可证 10 1.6.1 GPL许可证的历史 10 1.6.2 GPL的自由理念 10 1.6.3 GPL的基本条款 11 1.6.4 关于GPL许可证的争议 12 1.7 Linux...

Global site tag (gtag.js) - Google Analytics