8.模块支持

 

模块装入

函数名

功能

函数形成

参数

描述

request_module

试图装入一个内核模块

int request_module (const char * module_name)

module_name为模块名

使用用户态模块装入程序装入一个模块。成功返回0,失败返回一个负数。注意,一个成功的装入并不意味着这个模块在自己出错时就能卸载和退出。调用者必须检查他们所提出的请求是可用的,而不是盲目地调用。

如果自动装入模块的功能被启用,那么这个函数就不起作用。

call_usermodehelper

启动一个用户态的应用程序

int call_usermodehelper (char * path, char ** argv, char ** envp);

path为应用程序的路径名,argv为以空字符结束的参数列表,envp为以空字符结束的环境列表。

 

运行用户空间的一个应用程序。该应用程序被异步启动。它作为keventd的子进程来运行,并具有root的全部权能。Keventd在退出时默默地获得子进程。

必须从进程的上下文中调用该函数,成功返回0,失败返回一个负数。

内部模块支持

inter_module_register

注册一组新的内部模块数据

void inter_module_register (const char * im_name, struct module * owner, const void * userdata)

im_name为确定数据的任意字符串,必须唯一,owner为正在注册数据的模块,通常用THIS_MODULE userdata指向要注册的任意用户数据。

检查im_name还没有被注册,如果已注册就发出“抱怨”。对新数据,则把它追加到inter_module_entry链表。

 

inter_module_unregister

注销一组内部模块数据

void inter_module_unregister (const char * im_name)

im_name为确定数据的任意字符串,必须唯一。

检查im_name已经注册,如果没有注册就发出“抱怨”。 对现有的数据,则把它从inter_module_entry链表中删除。

inter_module_get

从另一模块返回任意的用户数据

const void * inter_module_get (const char * im_name)

im_name为确定数据的任意字符串,必须唯一。

如果im_name还没有注册,则返回NULL。增加模块拥有者的引用计数,如果失败则返回NULL,否则返回用户数据。

inter_module_get_request

内部模块自动调用request_module

const void * inter_module_get_request (const char * im_name, const char * modname)

im__name为确定数据的任意字符串,必须唯一;modname为期望注册m_name的模块。

如果inter_module_get失败,调用request_module,然后重试。

 

 

inter_module_put

释放来自另一个模块的数据

void inter_module_put (const char * im_name)

im__name为确定数据的任意字符串,必须唯一。

如果im_name还没有被注册,则“抱怨”,否则减少模块拥有者的引用计数。