内核及内核模块编译(2)

[root@bogon shared]# tar -jxvf r8168-8.038.00.tar.bz2
=>解压缩内核模块
[root@bogon shared]# ll
drwxrwxrwx 1 root root      0 01-08 16:56 r8168-8.038.00
-rwxrwxrwx 1 root root  74460 04-08 21:07 r8168-8.038.00.tar.bz2

[root@localhost r8168-8.038.00]# make clean
[root@localhost r8168-8.038.00]# make modules
=>编译内核模块
[root@localhost r8168-8.038.00]# make install
=>安装内核模块
make -C src/ install
make[1]: Entering directory `/mnt/hgfs/shared/r8168-8.038.00/src'
make -C /lib/modules/2.6.18-371.el5/build SUBDIRS=/mnt/hgfs/shared/r8168-8.038.00/src INSTALL_MOD_DIR=kernel/drivers/net modules_install
make[2]: Entering directory `/usr/src/kernels/2.6.18-371.el5-i686'
  INSTALL /mnt/hgfs/shared/r8168-8.038.00/src/r8168.ko
  DEPMOD  2.6.18-371.el5
make[2]: Leaving directory `/usr/src/kernels/2.6.18-371.el5-i686'
make[1]: Leaving directory `/mnt/hgfs/shared/r8168-8.038.00/src'

[root@localhost ~]# ll /lib/modules/2.6.18-371.el5/kernel/drivers/net/r8168.ko
-rwxr-xr-x 1 root root 1083997 04-09 14:44 /lib/modules/2.6.18-371.el5/kernel/drivers/net/r8168.ko
=>内核模块已经安装成功
[root@localhost ~]# depmod –a
=>建立内核模块依赖关系
 [root@localhost ~]# ll /lib/modules/2.6.18-371.el5/modules.dep
-rw-r--r-- 1 root root 228487 04-09 14:54 /lib/modules/2.6.18-371.el5/modules.dep
=> modules.dep已经被修改

总结起来编译独立内核模块主要分为这么几步

1.      清除缓存make clean

2.      编译内核模块make modules

3.      安装内核模块 make install

4.      建立依赖关系depmod –a

说明:上面只是将内核模块编译与安装,还未将内核模块加载到内核,因此还需使用insmod进行内核模块的加载

内核模块管理

内核模块依赖性

内核模块存放在/lib/modules/$(uname –r)/kernel当中,其中内核模块一直是存在依赖性的。这些依赖关系记录在/lib/modules/$(uname –r)/modules.dep当我们增加会减少内核模块时就要修改内核模块之间的依赖关系。依赖关系的修改可以通过depmod命令来进行

语法:depmod

depmod  [-Anea]

选项与参数:

不加参数:分析目前所有内核,模块并重写写入

-A:只分析比modules.dep记录还新的内核模块。才会更新

-n: 不写入modules.dep只输出到聘雇

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

-a:分析所有可用模块

内核模块的查看

查看所有内核模块

lsmod

查看指定名称的内核模块

modinfo  模块名称

[root@bogon kernels]# lsmod
Module                  Size  Used by
ppdev                  12613  0
autofs4                28997  3
hidp                  22977  2
=> Used by代表此内核模块被其他内核模块所使用

[root@localhost ~]# modinfo r8168
filename:      /lib/modules/2.6.18-371.el5/kernel/drivers/net/r8168.ko
version:        8.038.00-NAPI
license:        GPL
description:    RealTek RTL-8168 Gigabit Ethernet driver
…….
depends:       
vermagic:      2.6.18-371.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1

内核模块的加载与删除

内核模块加载

Insmod  内核模块绝对路径
[root@localhost 2.6.18-371.el5-i686]#
 insmod /lib/modules/2.6.18-371.el5/kernel/drivers/net/r8168.ko
[root@localhost 2.6.18-371.el5-i686]# lsmod|grep r8168
r8168                248428  0

内核模块删除

rmmod  内核模块绝对路径
[root@localhost ~]# rmmod /lib/modules/2.6.18-371.el5/kernel/drivers/net/r8168.ko
[root@localhost ~]# lsmod|grep r8168

modprobe内核模块处理

使用上面的方法可以管理内核模块,但是需要指定内核模块的完整路径,同时如果要删除某个内核模块时如果存在依赖关系,则无法删除成功。使用modprobe可以避免此问题

Modprobe去modules.dep中寻找内核模块因此不需要指定绝对路径(前提我们已经使用的depmod将依赖关系写入该文件)

语法:modprobe[-lfr] 内核模块名称

选项与参数:

-l:列出所有内核模块

-f:强制加载内核模块

-r:删除内核模块

举例:
[root@localhost ~]# modprobe vfat =>加载内核模块
[root@localhost ~]# lsmod |grep vfat
vfat                  15937  0
[root@localhost ~]# modprobe -r vfat =>删除内核模块

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/18648.html