QUERY_MODULE - Linux手册页

时间:2019-08-20 17:59:11  来源:igfitidea点击:

Linux程序员手册 第2部分
更新日期: 2017-09-15

名称

query_module-向内核查询与模块有关的各种位

语法

#include <linux/module.h>

int query_module(const char *name, int which, void *buf,
                 size_t bufsize, size_t *ret);

注意:glibc标头中未提供此系统调用的声明;请参阅注释。

说明

注意:此系统调用仅在Linux 2.6之前的内核中存在。

query_module()向内核请求有关可加载模块的信息。返回的信息放置在buf指向的缓冲区中。调用者必须在bufsize中指定buf的大小。返回信息的确切性质和格式取决于指定的操作。一些操作需要名称来标识当前加载的模块,某些操作需要名称为NULL,表明内核正确。

可以为其指定以下值:

0
如果内核支持query_module(),则返回成功。用于探测系统调用的可用性。
QM_MODULES
返回所有已加载模块的名称。返回的缓冲区由一系列以null终止的字符串组成; ret设置为模块数。
QM_DEPS
返回指定模块使用的所有模块的名称。返回的缓冲区由一系列以null终止的字符串组成; ret设置为模块数。
QM_REFS
使用指定的模块返回所有模块的名称。这是QM_DEPS的反函数。返回的缓冲区由一系列以null终止的字符串组成; ret设置为模块数。
QM_SYMBOLS
返回由内核或指示的模块导出的符号和值。返回的缓冲区是以下形式的结构数组
struct module_symbol {
    unsigned long value;
    unsigned long name;
};
后跟以null终止的字符串。 name的值是字符串相对于buf开头的字符偏移量; ret设置为符号数。
QM_INFO
返回有关指示模块的其他信息。输出缓冲区格式为:
struct module_info {
    unsigned long address;
    unsigned long size;
    unsigned long flags;
};
其中address是模块所在的内核地址,size是模块的大小(以字节为单位),flags是MOD_RUNNING,MOD_AUTOCLEAN等的掩码,指示模块的当前状态(请参阅Linux内核源代码)。文件include / linux / module.h)。 ret设置为module_info结构的大小。

返回值

成功时,返回零。如果出错,则返回-1并正确设置errno。

错误说明

EFAULT
名称,buf或ret中至少有一个不在程序的可访问地址空间范围内。
EINVAL
无效;或名称为NULL(表示"内核"),但不允许使用其中指定的值。
ENOENT
没有使用该名称的模块。
ENOSPC
提供的缓冲区大小太小。 ret设置为所需的最小大小。
ENOSYS
此版本的内核不支持query_module()(例如,内核为2.6版或更高版本)。

版本

该系统调用仅在Linux 2.4内核之前存在;否则,仅在Linux上可用。在Linux 2.6中已将其删除。

遵循规范

query_module()是特定于Linux的。

备注

可以从/ proc / modules,/ proc / kallsyms以及目录/ sys / module下的文件获得以前可以通过query_module()获得的某些信息。

glibc不支持query_module()系统调用。 glibc标头中未提供任何声明,但经过一段古怪的历史,glibc确实为此系统调用导出了一个ABI。因此,为了使用此系统调用,在代码中手动声明接口就足够了。或者,您可以使用syscall(2)调用系统调用。

另外参见

create_module(2),delete_module(2),get_kernel_syms(2),init_module(2),lsmod(8),modinfo(8)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/