l​i​n​u​x​内​核​模​块​的​加​载

Linux内核模块存放位置:/lib/modules/`uname -r`/kernel/

开机时自动加载的模块列表:/etc/modprobe.conf

加载使用者自订模块:/etc/sysconfig/modules  

开机时用于加载模块的脚本文件:/etc/rc.d/rc.sysinit  

开机时读取的一些服务的相关设定文件存放目录:/etc/sysconfig

已加载的内核模块以及加载在内存中的位置:/proc/modules  

lsmod:查看文件/etc/proc/modules;显示已加的载模块及在内存中的位置

modprobe:这个指令是用来加载模块的,它会主动去搜寻modules.dep的内容

格式为:modprobe[-lcf] module_name  

-c:列出当前系统所有的模块

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

-f:强制加载该模块

-r:类似rmmod,就是移除某个模块:modprobesmbfs:加载smbfs模块

insmod:完全由使用者自行加载一个完整文件名

:insmod /lib/modules/`uname-r`/kernel/fs/smbfs/smbfs.ko  

Rmmod [-fw] module_name  

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

-w:若该模块正被使用,rmmod会等待该模块被使用完毕后,才移除他

上面介绍了跟linux模块相关的一些文件和常见的命令,一般来说,系统内核自带的内核模块都能满足实际的需求,但也有些硬件,在系统内部找不到相对应的内核模块,这就需要我们自己去编译加载了。

编译加载步骤(以在RedHat 9中加载D-link530网卡为例):

1查看内核版本(版本不同,模块放置路径也不同):uname�Cr  

2进入内核模块路径:cd /lib/modules/`uname-r`/kernel/drivers/net(为2.4版本路径)                   cd /lib/modules/`uname-r`/net(为2.2版本路径)

3查询模块:ls�Cl via*via为该芯片组名的前三个字母)

如果自己不知道网卡被检测到,可以用以下方法来测试:dmesg | grep ethdmesg用来显示开机启动信息的,如果被linux系统检测到,就不需要编译内核模块了,万一检测不到就必须进行编译工作了。

4、编译模块:

1-:下载网卡驱动程序模块(dlkfet-4.24.tar.gz

2-:确认安装所需要的包:kernel-source-2.4.20-18.9 kernel-2.4.20-18.9 gcc-3.2.2-5 make-3.79.1-17  

3-:编译模块:tar vxfdlkfet-4.24.tar.gzcd dlkfet

-4.24makecprhinefet.o/lib/modules/`uname -r`/kernel/drivers/netdepmod�Ca

5、加载模块:

1-:加载模块测试:modproberhinefet            

2-:设置开机加载模块:vim /etc/modules.conf;在文件中加入一行:alias eth0  rhinefet  

3-:重新启动,看是否正常启动模块


你可能感兴趣的:(模块,内核)