内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe

  首先,我们得知道内核与内核模块放在哪里。

内核:/boot/vmlinuz或/boot/vmlinuz-version;

内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version);

内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel;

内核源码:/usr/src/linux 或 /usr/src/kernels;

  如果内核顺利被加载了,会有以下几个信息记录:

内核版本:/proc/version

系统内核功能:/proc/sys/kernel

  假如我有个新硬件,偏偏我的系统不支持,要这样做:

重新编译内核,并加入最新的硬件驱动程序源码;

将该硬件的驱动程序编译成为模块,在启动时加载该模块。

 

  下面我们着重讲一下内核模块

一、内核模块与依赖性

  基本上,内核模块放置处是在 /lib/modules/$(uname -r)/kernel当中,里面的几个目录主要为:

arch 与硬件平台有关的选项

crypto 内核所支持的加密的技术

drivers 一些硬件的驱动程序

fs 内核所支持的文件系统

lib 一些函数库

net 与网络有关的各项协议数据,还有防火墙模块等

sound 与音效有关的各项模块

  还有文件/lib/modules/$(uname -r)/modules.dep ,记录了内核支持的模块的依赖性。那么如何创建该文件呢?如下:

#depmod [-Ane]

  -A:不加任何参数时,depmod会主动去分析目前内核的模块,并且重新写入/lib/modules/$(uname -r)/

modules.dep当中。如果加-A参数,则会查找比modules.dep内还要新的模块,如果真找到,才会更新。

  -n:不写入modules.dep,而是将结果输出到屏幕上。

  -e:显示出目前已加载的不可执行的模块名称。

 

  例子:我做好一个网卡驱动程序a.ko(内核模块名以.ko结尾),该如何更新内核的依赖性?

#cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net

#depmod

 

 

二、内核模块的查看

  查看目前模块加载了多少的模块。

#lsmod

模块名称     模块的大小  此模块是否被其他模块使用

 

查阅每个模块信息

#modinfo [-adln] [module_name|filename]

  -a:仅列出作者名

  -d:仅列出该modules的说明

  -l:仅列出授权

  -n:仅列出该模块的详细路径

 

  例子:#modinfo mii

 

 

三、内核模块的加载与删除

  最好使用modprobe这个命令加载模块,因为modprobe会主动查找modules.dep的内容,解决了依赖性后,才决定需要加载的模块有哪些。

  insmod则完全由用户自行加载一个完整文件名的模块,并不会主动分析模块依赖性。

#insmod [/full/path/module_name] [parameters]

 

  例子:尝试载入cifs.ko这个文件系统模块

#insmod /lib/modules/$(uname -r)/kernel/fs/cifs/cifs.ko

  记住,一定要是完整的文件名。

 

#rmmod [-fw] module_name

  -f:强制将该模块删除掉,不论是否正在被使用

  -w:若该模块正在被使用,则等待该模块被使用完毕后再删除

 

  insmod与rmmod的问题时,你必须自行找到模块的完整文件名才行。所以,我们一般使用modprobe.

#modprobe [-lcfr] module_name

  -c:列出目前系统上面所有的模块

  -l:列出目前在/lib/modules/`uname -r`/kernel当中的所有模块完整文件名

  -f:强制加载该模块

  -r:删除某个模块

 

  例子:加载cifs模块

   #modprobe cifs

  很方便,因为我们根本不用知道完整的模块文件名

 

内核模块的额外参数配置:/etc/modprobe.conf

  如果你想修改某些模块的额外参数设置,就在这个文件内。

  #vi /etc/modprobe.conf

时间: 2024-10-26 05:54:11

内核与内核模块:depmod,lsmod,modinfo,insmod,rmmod,mdprobe的相关文章

《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #3 如何编写内核模块

HACK #3 如何编写内核模块 本节将介绍向Linux内核中动态添加功能的结构-内核模块的编写方法. 内核模块 Linux内核是单内核(monolithic kernel),也就是所有的内核功能都集成在一个内核空间内.但是内核具有模块功能,可以将磁盘驱动程序.文件系统等独立的内核功能制作成模块,并动态添加到内核空间或者删除. 内核模块是可以动态添加到Linux内核空间的二进制文件,文件扩展名为ko. 内核模块的编写方法大致有两种.一种是将内核源码树带有的功能编写为模块的方法(参考Hack #2

Linux内核分析(二)----内核模块简介|简单内核模块实现

原文:Linux内核分析(二)----内核模块简介|简单内核模块实现 Linux内核分析(二) 昨天我们开始了内核的分析,网上有很多人是用用源码直接分析,这样造成的问题是,大家觉得很枯燥很难理解,从某种意义上来说linux系统本身就是由一个个模块构成的,所以我会结合内核模块的设计,去分析内核,从而达到对linux内核的理解. 今天我们会分析到以下内容: 1.      Linux内核模块简介 2.      简单内核模块实现   l  Linux内核模块简介 1.       何为内核模块 在上

【Linux驱动】linux内核模块简介

一. 摘要 这篇文章主要介绍了Linux内核模块的相关概念,以及简单的模块开发过程.主要从模块开发中的常用指令.内核模块程序的结构.模块使用计数以及模块的编译等角度对内核模块进行介绍.在Linux系统开发过程中,以模块的形式开发其重要性不言自明,而在嵌入式设备驱动开发中将驱动程序以模块的形式发布,更是极大地提高了设备使用的灵活性--用户只需要拿到相关驱动模块,再插入到用户的内核中,即可灵活地使用你的设备. 二. 文章提纲 1. 摘要 2. 文章提纲 3. 概述 4. 模块开发常用的指令 5. 内

《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #6 使用localmodconfig缩短编译时间

HACK #6 使用localmodconfig缩短编译时间 本节介绍使用make localmodconfig生成精简的.config文件,缩短内核编译时间的方法. 为了能够应对各种各样的环境,发布版的内核包含很多内核模块.但是在某个特定机器,例如,大家自己平时使用的PC上实际用到的模块只是其中的极小一部分.重新构建内核时,对不使用的模块进行编译就会浪费时间.编译后的模块存放在磁盘里,因此也会造成磁盘空间的浪费. 将localmodconfig作为make的目标,就可以生成仅以正在使用的内核模

Debian/Ubuntu Linux下内核编程者必备

如果你想要升级你的Debian/Ubuntu Linux内核,或者你希望为内核开发新的模块,或者您要为某个硬件写新的驱动程序--这一切都涉及到Debian/Ubuntu Linux内核编程. 作为一个内核编程者,有那么几个软件是你必须要有的,看作是你进行内核编程的几件法宝吧,下面我一一列举出来: 1.gcc 大名鼎鼎的gcc我想没有人不知道的吧?它是任何编程者必然要先安装的一个武器了.不过一般如果你是安装的Debian系统,应该已经默认安装了的.要是Ubuntu你就安装一下吧,安装方法嘛,就是输

Linux 内核测试和调试(4)

Linux 内核测试和调试(4) 自动测试工具 这里列出一些能满足不同需求的测试工具供你选择.本小节只是简单介绍个大概,并不提供详细操作指南. AuToTest AuToTest 是一个全自动测试框架,存在的主要目的就是测试 Linux 内核,当然也可以用来测试其他东西,比如测试一块新硬件是否能稳定工作.AuToTest 是开源软件,以 GPL 方式授权,运行于 server-client 架构(即 C/S 架构).你可以通过配置 server 端来对运行了 client 端的系统执行初始化.运

Linux中常用命令

一.Linux下常用命令:文件与目录操作 basename:从文件名中去掉路径和扩展名 cd:切换当前工作目录到指定目录 chgrp:改变文件所属组 chmod:改变文件的权限 chown:改变文件的所有者和组 cp:复制文件或目录 dd:复制文件并转换文件内容 file:确定文件类型 find:在指定目录下查找文件并执行指定的操作 ln:创建文件链接 locate/slocate:快速定位文件的路径 ls/dir/vdir:显示目录内容 mkdir:创建目录 mv:移动或重命名文件 pwd:显

The Linux Kernel Module Programming Guide

The Linux Kernel Module Programming Guide Peter Jay SalzmanMichael BurianOri Pomerantz Copyright 2001 Peter Jay Salzman The Linux Kernel Module Programming Guide is a free book; you may reproduce and/or modify it under the terms of the Open Software

linux 命令速查

查看本地端口的服务程序 netstat -tpl  启动停止apache apachectl -k start/stop  监听本地端口 nc -l port  显示[所有]进程 ps [-A]  关闭进程 kill pid  强制关闭进程 kill -KILL pid  清屏 clear|reset 看磁盘剩余空间 df 看文件占用? du  wget 下载文件 安装 tar.gz 文件 tar -xzvf xxx.tar.gz make  有些命令前要加./ ./doit  原因:执行一个命