linux下模块,linux动态加载模块的命令
大家好,今天小编来为大家解答以下的问题,关于linux下模块,linux动态加载模块的命令这个很多人还不知道,现在让我们一起来看看吧!
linux module命令
linux系统下module命令是什么呢?下面是具体介绍:
1、module命令简介:
modules的字面意思是模块,模块化有两个方法解决:设计者可以把各项功能分离到单独的叫做线程的处理中去,或者是将内核以包含/排除一些功能的方式重新编译。如果把功能分离到线程中去,那么内核就叫做“微内核”(micro-kernel),这种解决方法增加了线程间协调工作的通信开销,这种解决方案的优点在于内核的大小。
Linux的解决方案是包含内核模块,这些模块是可以按需要随时装入和卸下的。这样做可以使得内核的大小和通信量都达到最小。将模块从内核中独立出来,不必预先『绑』在 kernel codes中。
这样做有三种优点:一,将来修改 kernel时,不必全部重新compile,可节省不少时间;二,若需要安装新的 modules,不必重新 compile kernel,只要插入(通过insmode指令)对应的 modules即可;三,减少内核对系统资源的占用,内核可以集中精力做最基本的事情,把一些扩展功能都交由modules实现。
模块也可以用来尝试新的内核代码而不需要每次都创建和重激活内核。但是,这样做带来的问题是:使用内核模块通常会轻微的增加性能和内存开支。一个可加载模块肯定会产生更多的代码,这种代码和额外的数据结构会占用更多一点的内存。另外因为间接访问内核资源也让模块的效率轻微降低。
2、加载模块方法:
加载内核模块的方法有两种。
一是使用insmod命令手工把它插入到内核。
二是在需要的时候加载这个模块,叫做按需加载(demand loading)。当内核发现需要一个模块的时候,例如当用户安装一个不在内核的文件系统的时候,内核会请求内核守护进程(kerneld)试图加载合适的模块。
3、与modules有关的命令:
lsmode:列出已经被内核调入的模块
insmode:将某个module插入到内核中
rmmod:将某个module从内核中卸载
depmod:生成依赖文件,告诉将来的 insmod要从哪儿调入 modules。这个依赖文件就在/lib/modules/[您的kernel版本]/modules.dep。
Kerneld:负责自动的将模块调入内核和把模块从内核中卸载。
举例:
编译一个最小的Linux内核
必须要编译到内核中的内容:
1、root所在的硬盘配置。哪果您的硬盘是IDE接口,就把 ide的选项标记下来。如果是SCSI接口,请把您的接口参数及 SCSI id记标下来。
2、选择使用哪一个文件系统。Linux的默认文件系统是是 ext2,那么就一定要把它标记下来。如果机器中还其它的操作系统,如win98或windows NT,您还会可能选择FAT32或NTFS的支持,不过后面你可以通过手工加载的方式来加入新的模块支持。
3、选择Linux所支持的可执行文件格式。这里有两种格式可供选择:elf:这是当前Linux普遍支持的可执行文件格式,必须编译到内核中。
a.out:这是旧版的Linux的可执行文件各函数库的格式,如果你确认肯定用不到这种格式的可执行文件,那么就可以不把它编译到内核当中。
其它内容凡是所有选项中m提示的,都选择m,这样可以通过手工的方式添加该模块。
** Loadable module support*Enable loadable module support(CONFIG_MODULES) [Y/n/?]Set version
information on all symbols for modules(CONFIG_MODVERSIONS) [N/y/?]Kernel daemon support(e.g.
autoload of modules)(CONFIG_KERNELD) [Y/n/?]
分别回答 Y,N,Y。其中 CONFIG_KERNELD的 default值是 N,所以要注意选择Y。
make config完后,仍旧是 make dep; make clean。接下来要 make zlilo或 make zImage。然后 make modules; make modules_install。完成之后,就编译出一个没有调入多余模块的一个“干净的”内核映像文件了。
linux包含哪些模块
一、进程调度模块
Linux以进程作为系统资源分配的基本单位,并采用动态优先级的进程高级算法,保证各个进程使用处理机的合理性。进程调度模块主要是对进程使用的处理机进行管理和控制。
二、进程间通信模块
进程间通信主要用于控制不同进程之间在用户空间的同步、数据共享和交换。由于不同的用户进程拥有不同的进程空间,因此进程间的通信要借助于内核的中转来实现。一般情况下,当一个进程等待硬件操作完成时,会被挂起。当硬件操作完成,进程被恢复执行,而协调这个过程的就是进程间的通信机制。
进程间通信模块保证了Linux支持多种进程间通信机制,包括管道、命名管道、消息队列、信号量和共享内存等。
三、内存管理模块
Linux的内存管理模块采用先进的虚拟存储机制,实现对多进程的存储管理。它提供了十分可靠的存储保护措施,对进程赋予不同的权限,用户不能直接访问系统的程序和数据,保证了系统的安全性。同时,为每个用户进程分配一个相互独立的虚拟地址空间。
四、文件系统模块
Linux的文件系统模块采用先进的虚拟文件系统技术,屏蔽了各种文件系统的差别,为处理各种不同的文件系统提供了统一的接口,支持多种不同的物理文件系统达90多种。同时,Linux把各种硬件设备看作一种特殊的文件来处理,用管理文件的方法管理设备,非常方便、有效。
五、网络接口模块
Linux具有最强大的网络功能。网络接口模块通过套接字机制实现计算机之间的网络通信,并采用网络层次模型提供对多种网络协议和网络硬件设备的支持。
网络接口提供了对各种网络标准的实现和各种网络硬件的支持。网络接口一般分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序则主要负责与硬件设备进行通信,每一种可能的网络硬件设备都有相应的设备驱动程序。
linux insmod命令详解
linux系统下insmod命令是什么呢?下面是insmod命令的具体介绍:
1、insmod命令简介:
insmod全称是install module,用于载入模块 install loadable kernel module。
2、语法:
insmod [-fkmpsvxX][-o模块名称][模块文件][符号名称=符号值]
3、参数:
-f不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。
-k将模块设置为自动卸除。
-m输出模块的载入信息。
-o模块名称指定模块的名称,可使用模块文件的文件名。
-p测试模块是否能正确地载入kernel。
-s将所有信息记录在系统记录文件中。
-v执行时显示详细的信息。
-x不要汇出模块的外部符号。
-X汇出模块所有的外部符号,此为预设置。
4、使用说明:
Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
insmod命令主要用于在Linux 2.4内核之前加载Linux内核模块命令。对于通过此命令加载的Linux内核模块,系统不仅不会自动解决内核模块之间的依赖关系,而且还要求将模块路径写详细。所以在Linux 2.6内核出现时,此命令已渐渐被遗忘。
加载RAID1阵列级别模块,如下所示:
[root@rhel5boot]#insmod/lib/modules/2.6.
18-8.el5/kernel/drivers/md/raid1.ko
[root@rhel5boot]#lsmod|grepraid1
raid1251530
从以上显示结果可知,RAID1模块已加载成功。只是在使用insmod命令加载模块时,需要使用绝对路径方能加载,且加载时无法自动解决依赖关系。
5、insmod和modprobe的区别:
insmod与 modprobe都是载入 kernel module,不过一般差别于 modprobe能够处理 module载入的相依问题。
比方你要载入 a module,但是 a module要求系统先载入 b module时,直接用 insmod挂入通常都会出现错误讯息,不过 modprobe倒是能够知道先载入 b module后才载入 a module,如此相依性就会满足。
不过 modprobe并不是大神,不会厉害到知道 module之间的相依性为何,该程式是读取/lib/modules/2.6.xx/modules.dep档案得知相依性的。而该档案是透过depmod程式所建立。