内核模块
Posted forsake-dream
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内核模块相关的知识,希望对你有一定的参考价值。
内核参数说明
/proc目录介绍详见链接
内核参数目录及配置文件:
- /proc/*
- /usr/lib/sysctl.d/*
- /etc/sysctl.d/*.conf
- /etc/sysctl.conf #开机读取的内核参数文件:
修改内核参数的注意事项
- Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现。
- 修改/proc下内核参数文件内容,不能使用编辑器来修改内核参数文件,理由是由于内核随时可能更改这些文件中的任意一个,另外,这些内核参数文件都是虚拟文件,实际中不存在,因此不能使用编辑器进行编辑,而是使用echo命令,然后从命令行将输出重定向至 /proc 下所选定的文件中。参数修改后立即生效,但是重启系统后,该参数又恢复成默认值。因此,想永久更改内核参数,需要修改/etc/sysctl.conf文件。
- echo 1 > /proc/sys/net/ipv4/ip_forward
- sysctl -w net.ipv4.ip_forward=1
- 永久的方法:
- echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
- 如果想使参数马上生效,也可以执行如下命令sysctl -p
模块说明
全称为动态可加载内核模块(Loadable Kernel Module,LKM),简称为模块
模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行,这与运行在用户空间的进程是不同的。模块通常由一组函数和数据结构组成,用来实现一种文件系统、一个驱动程序或其他内核上层的功能。
总之,模块是一个为内核(从某种意义上来说,内核也是一个模块)或其他内核模块提供使用功能的代码块。
模块存放目录以及配置文件:
- /etc/modprobe.d/*.conf | /run/modprobe.d/*.conf| /usr/lib/modprobe.d/*.conf #依次从/etc/,/run/,/usr/lib/目录读取,模块的额外参数
- /etc/modules-load.d/*.conf | /run/modules-load.d/*.conf | /usr/lib/modules-load.d/*.conf #依次从/etc/,/run/,/usr/lib/目录读取,读取开机加载的模块
- 该目录格式为每个模块一行
- 注意不要给模块名加任何后缀
- 具体效果可以详见右图
- /usr/lib/modules/$(uname -r)/kernel/ #注:不同版本内核的模块目录不同,所有安装的模块都在该目录下,如果需要把模块加载到内核中,则可以通过命令来加载该目录下的对应模块即可
- arch #与硬件平台有关的项目,例如CPU的等级等等
- crypto #核心所支持的加密的技术,例如md5或者des等等
- drivers #一些硬件的驱动程序,例如显卡、网卡、PCI相关硬件等等
- fs #核心所支持的filesystems,例如vfat、reiserfs、nfs等等
- lib #一些函数库
- net #与网络有关的各项协定数据,还有防火墙模块
- sound #与音效有关的各项模块
模块之间的依赖性
使用depmod命令读取/lib/modules/$(uname -r )/kernel/目录下每个模块并分析,然后把分析结果写入/lib/modules/$(uname -r)/modules.dep文件中。
语法结构
内核参数控制命令
sysctl [OPTIONS] [variable[=value]] [...] #在运行环境中配置内核参数
- OPTIONS
- -a #显示所有变量
- -p #从文件中读取值
- -w #写一个值到变量中
- EXAMPLE
模块控制命令
depmod #输出适用于modprobe可用性的依赖列表,然后把分析结果写入/lib/modules/$(uname -r)/modules.dep文件中。
- EXAMPLE
- depmod -n #可以不写入文件而把结果输出到屏幕上
- depmod -e #显示出目前已载入的不可执行的模块名称
lsmod #显示当前系统下已经加载了哪些模块。共三列信息Module(模块名)、size(模块的大小)、Used by(此模块被哪个模块所使用)
- EXAMPLE
- lsmod ##显示当前系统下已经加载了哪些模块
modinfo [OPTIONS] <ModuleName|FileName...> #通过模块名或者模块文件名来查看模块信息
- OPTIONS
- -a #仅列出作者名称
- -d #仅列出该module的description
- -l #仅列出该module的license
- -n #仅列出该module的filename项(module的文件所在路径)
- EXAMPLE
modprobe [OPTIONS] ModuleName #通过module的名字管理module(不能通过文件名);如果用该命令不加任何OPTIONS则是加载module,重启后消失
modprobe(module探针)(自动处理可载入模块)是linux的一个命令,可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod.dep文件的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块
- OPTIONS
- -c #列出目前系统所有的模块
- -f #强制载入该模块
- -r #移除摸个module
- EXAMPLE
以上是关于内核模块的主要内容,如果未能解决你的问题,请参考以下文章