注解:borlittle
仅供学习参考,源代码版权归原著者所有
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />/*
*文件名:hello.c
*功能介绍:hello驱动模块
*
*/
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
/*
告诉内核该模块的版权信息,用于声明模块的许可证,很多情况下,用GPL或者BSD
http://www.diybl.com/course/6_system/linux/Linuxjs/2008815/136065.html)
*/
static int hello_init(void) /*模块加载提示*/
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void) /*模块卸载提示*/
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
module_init(hello_init); /*模块加载*/
module_exit(hello_exit); /*模块卸载*/
/*
*文件名:hello.mode.c
*功能介绍:hello测试程序编译后生成的文件
*这个文件是模块在编译的时候,调用了linux-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2.6.24/scripts/modpost这个文件生成的
*http://www.7747.net/Article/200912/43810.html
*/
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
MODULE_INFO(vermagic, VERMAGIC_STRING);
#undef unix
struct module __this_module /*定义模块变量*/
/*定义属性*/
__attribute__((section(".gnu.linkonce.this_module"))) = {
.name = __stringify(KBUILD_MODNAME),
.init = init_module,
#ifdef CONFIG_MODULE_UNLOAD
.exit = cleanup_module,
#endif
};
/*
*__section用来修饰一个函数是放在哪个区域里的,不使用编译器默认的方式
*http://haoyeren.blog.sohu.com/115430836.html
*/
static const char __module_depends[]
__attribute_used__
__attribute__((section(".modinfo"))) =
"depends=";
/*MODULE_INFO宏用来生成模块的magic字符串*/
MODULE_INFO(srcversion, "31FE72DA6A560C890FF9B3F");
文章评论(0条评论)
登录后参与讨论