模块继续
来源:互联网 发布:手机制作字幕软件 编辑:程序博客网 时间:2024/05/02 00:20
模块的加载函数
加载函数一般以 __init标识声明.如下
static int __init initialization_function(void)//注意__init标识
{
/*初始化代码*/
}
module_init(initialization_function);
上面是模块的加载函数,他返回整形值,初始化成功,则返回0,在Linux里,初始化失败返回一个接近于零的负值为错误
代码。
在内核当中则是调用request_module(const char *fmt,...);
驱动开发人员可以调用下列代码:
request_module(module_name);
灵活加载其他内核模块。
Linux 中,所有标识为__init 的函数如果直接编译进内核,在链接的时候都会放在.init.text这个区段内。
#define __init __attribute__{(__section__{".init.text"})}
所有的__init函数在区段.initcall.init中保存了一份函数指针。在初始化的时候内核会通过这些函数指针调用这些__init
函数。并在初始化完成后,释放init区段。
除了函数以外,数据也可以被定义为__initdata,对于只是初始化需要的数据,内核在初始化完成后也可以释放他们占用的
内存。
static int hello_data __initdata = 1;
模块的卸载函数。
static void __exit cleanup_dunction(void)
{
/*释放代码*/
}
module_exit(cleanup_function);
模块参数
可以使用 "module_param(参数名,参数类型,参数读/写权限);" 为模块定义一个序参数,如下:
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name,charp,S_IRUGO);
static int book_num = 4000;
module_param(book_num,int,S_IRUGO);
在装载模块的时候用户可以像模块传递参数,形式为insmode 或者 modprobe 模块名=参数名。不传递的话直接使用模块定义
的缺省值。
参数类型可以是 byte,short,ushort,int uint,long,ulong,charp(字符指针),bool,invbool(布尔的反)。
除此之外,模块也可以拥有参数数组,形式为: module_param_array(数组名,数组类型,数组长,参数读、写权限);
模块加载后,在 /sys/module 目录下将出现以此模块命名的目录。
运行insmod或者modprobe命令时,应使用逗号分隔输入的数组元素。
定义一个包含两个参数的模块。
/*
*a aimple kernel module supporting aprameters
*
*Licensed under GPLv2 or later
*
*/
#include <linux/init.h>
#include <linux/module.h>
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name,charp,S_IRUGO);
static int book_num = 4000;
module_param(book_num,int,S_IRUGO);
static int __init book_init(void)
{
printk(KERN_INFO"book name:%s\n",book_name);
printk(KERN_INFO"book num:%d\n",book_num);
return 0;
}
module_init(book_init);
static void __exit book_exit(void)
{
printk(KERN_INFO"book module exit\n");
}
module_exit(book_exit);
MODULE_AUTHER();
MODULE_LICENSE("GPL v2");
MODULE_VERSION("V1.0");
加载函数一般以 __init标识声明.如下
static int __init initialization_function(void)//注意__init标识
{
/*初始化代码*/
}
module_init(initialization_function);
上面是模块的加载函数,他返回整形值,初始化成功,则返回0,在Linux里,初始化失败返回一个接近于零的负值为错误
代码。
在内核当中则是调用request_module(const char *fmt,...);
驱动开发人员可以调用下列代码:
request_module(module_name);
灵活加载其他内核模块。
Linux 中,所有标识为__init 的函数如果直接编译进内核,在链接的时候都会放在.init.text这个区段内。
#define __init __attribute__{(__section__{".init.text"})}
所有的__init函数在区段.initcall.init中保存了一份函数指针。在初始化的时候内核会通过这些函数指针调用这些__init
函数。并在初始化完成后,释放init区段。
除了函数以外,数据也可以被定义为__initdata,对于只是初始化需要的数据,内核在初始化完成后也可以释放他们占用的
内存。
static int hello_data __initdata = 1;
模块的卸载函数。
static void __exit cleanup_dunction(void)
{
/*释放代码*/
}
module_exit(cleanup_function);
模块参数
可以使用 "module_param(参数名,参数类型,参数读/写权限);" 为模块定义一个序参数,如下:
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name,charp,S_IRUGO);
static int book_num = 4000;
module_param(book_num,int,S_IRUGO);
在装载模块的时候用户可以像模块传递参数,形式为insmode 或者 modprobe 模块名=参数名。不传递的话直接使用模块定义
的缺省值。
参数类型可以是 byte,short,ushort,int uint,long,ulong,charp(字符指针),bool,invbool(布尔的反)。
除此之外,模块也可以拥有参数数组,形式为: module_param_array(数组名,数组类型,数组长,参数读、写权限);
模块加载后,在 /sys/module 目录下将出现以此模块命名的目录。
运行insmod或者modprobe命令时,应使用逗号分隔输入的数组元素。
定义一个包含两个参数的模块。
/*
*a aimple kernel module supporting aprameters
*
*Licensed under GPLv2 or later
*
*/
#include <linux/init.h>
#include <linux/module.h>
static char *book_name = "dissecting Linux Device Driver";
module_param(book_name,charp,S_IRUGO);
static int book_num = 4000;
module_param(book_num,int,S_IRUGO);
static int __init book_init(void)
{
printk(KERN_INFO"book name:%s\n",book_name);
printk(KERN_INFO"book num:%d\n",book_num);
return 0;
}
module_init(book_init);
static void __exit book_exit(void)
{
printk(KERN_INFO"book module exit\n");
}
module_exit(book_exit);
MODULE_AUTHER();
MODULE_LICENSE("GPL v2");
MODULE_VERSION("V1.0");
0 0
- 模块继续
- 模块继续
- 继续
- 继续
- 继续
- 继续
- 继续
- 继续~~
- 继续
- 继续
- 继续
- 继续
- 继续
- 继续
- 继续?
- 继续
- 继续...
- 继续。。。
- apple pay
- C#93课的主要内容
- 监听keyup 和keydown 事件
- MySQL 的 RowNum 实现
- 【HDFS】Hadoop2.x HDFS shell命令
- 模块继续
- 2016 届蓝桥杯省赛B组第一题
- python 简单实例训练(31~40)
- Microsoft Wins ImageNet 2015 through Feedforward LSTM without Gates
- 欢迎使用CSDN-markdown编辑器
- 腾讯TGW简介
- UVA540
- TI_BLE软件开发者指导5-HCI
- C语言深度解剖之——for循环优化