linux自动加载模块
⑴ Linux怎么在系统启动时自动加载内核模块
写入/etc/rc.local
⑵ Linux下编写和加载 .ko 文件(驱动模块文件
一、.ko 文件介绍
.ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载。
二、优点
(1)这样可以缩小内核体积;
(2)使用方便。
三、.ko文件一般的用处
(1)作为一个功能模块,需要使用时,直接插入运行就行。如在imx6上连接模拟摄像头,先运行模拟摄像头对应的驱动模块 camera.ko文件,然后对应的工程执行文件运行就行。
四、使用.ko 文件
1、加载驱动模块test.ko
(1)方法一
进入test.ko驱动模块文件所在的目录,然后直接 insmod test.ko
(2)方法二
将test.ko文件拷贝到/lib/mole/#uname-r#/目录下,这里,#uname -r#意思是,在终端中输入
uname -r后显示的内核版本及名称,例如mini2440中#uname-r#就是2.6.32.2-FriendlyARM。
然后 depmod(会在/lib/moles/#uname -r#/目录下生成moles.dep和moles.dep.bb文件,表明模块的依赖关系)
最后 modprobe test(注意这里无需输入.ko后缀) 即可
注:两种方法的区别
modprobe和insmod类似,都是用来动态加载驱动模块的,区别在于modprobe可以解决load mole时的依赖关系,它是通过/lib/moles/#uname -r/moles.dep(.bb)文件来查找依赖关系的;而insmod不能解决依赖问题。也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。而如果你要加载的驱动模块还依赖其他ko驱动模块的话,就只能将模块拷贝到上述的特定目录,depmod后再modprobe。
⑶ Linux 添加 net 模块
Linux 添加 net 模块的方法是:
1、创建c文件和makefile文件:在任意位置创建一个文件夹(我创建的名称为/drive)mkdir drive后,输入cd drive进入文件夹。输入vim hello.c新建hello.c文件,输入以下代码。
操作使用工具:Linux。
使用工具版本:CentOS-7.0-x86_64-DVD-1503-01.iso。
Linux编译内核模块Makefile中指令的作用是:
obj-m:指定构建为可加载内核模块的目标文件。 构建外部模块的命令是:make -C<path_to_kernel_src>M=$PWD。
-C $(KERNEL_DIR):内核源所在的目录。 “make”实际上会在执行时更改为指定的目录,并在完成时更改回来。
KERNEL_DIR:指内核源目录的路径。
M = $ PWD:通知make正在构建外部模块。 赋予“M”的值是外部模块所在目录的绝对路径。
⑷ 如何查看Linux加载内置模块的信息
一、找出内置模块列表
要得到内置模块列表,运行下面的命令。
$
cat
/lib/moles/$(uname
-r)/moles.builtin
你也可以用下面的命令来查看有哪些内置模块:
二、找出内置模块参数
每个内核模块无论是内置的还是可加载的都有一系列的参数。对于可加载模块,modinfo命令可以显示它们的参数信息。然而这个命令对内置模块没有用。你会得到下面的错误。
modinfo:
ERROR:
Mole
XXXXXX
not
found.
如果你想要查看内置模块的参数,以及它们的值,你可以在
/sys/mole
下检查它们的内容。
在
/sys/mole目录下,你可以找到内核模块(包含内置和可加载的)命名的子目录。进入每个模块目录,这里有个“parameters”目录,列出了这个模块所有的参数。
比如你要找出tcp_cubic(内核默认的TCP实现)模块的参数。你可以这么做:
$
ls
/sys/mole/tcp_cubic/parameters
接着阅读这个文件查看每个参数的值。
$
cat
/sys/mole/tcp_cubic/parameters/tcp_friendliness
以上就是Linux查看内置模块的信息的方法了,这样我们就可以知道Linux安装了哪些内置模块,还可以把没用的模块删除掉,减轻系统的负担。
⑸ Linux如何在系统启动时自动加载模块
rc.sysinit中有这样的一段代码:
# Load other user-defined moles
for file in /etc/sysconfig/moles/*.moles ; do
[ -x $file ] && $file
done
# Load moles (for backward compatibility with VARs)
if [ -f /etc/rc.moles ]; then
/etc/rc.moles
fi
可见只需要配置两个地方的任何一个就可以了(以加载fuse内核模块为例)
(1) 在/etc/sysconfig/moles/下面创建*.moles文件,参考已经有的*.moles文件,例如我写创建文件my.moles,内容为modprobe fuse
记得最后chmod 755 my.moles
(2) 或者在/etc/rc.moles里面加上modprobe fuse,没有的话创建该文件。
然后reboot,lsmod | grep fuse验证一下就OK了。