#include<linux/init.h>
#include<linux/module.h>
static int __init hello_init(void) //内核初始化函数 
{  
        printk("hello world!\n"); //打印函数,和prinft类似 
        return 0;  
}  
static void __exit hello_exit(void)//内核清除函数 
{  
        printk("good bye!\n");  
}  
module_init(hello_init); //指定初始化函数 
module_exit(hello_exit); //指定清除函数 
MODULE_LICENSE("GPL"); //指定代码使用的许可证 
MODULE_AUTHOR("laowu"); //指定作者 
MODULE_VERSION("1.0"); //指定代码修订号 obj-m += hello.o             
KDIR:=~/linux-2.6
make -C $(KDIR) M=`pwd` modules  pwd modules insmod hello.ko
module_param函数使用方法:  
module_param(name, type, perm) 
name:内核参数的名称,自己定义;  
type:内核参数的类型,常见的类型byte、short、int、long、ulong、bool 、charp(字符指针); 
perm:内核参数的权限S_IRUGO(对模块参数具有读权限)。其实权限和文件的 权限差不多 
内核加载模块时传递参数的方法:  
使用命令:insmod xxx.ko a=1 
模块加载后,并且他的权限不为0,就可在/sys/module/xxx/parameter目录下 找到对应的模块参数。 
使用EXPORT_SYMBOL将函数导出,供其他模块使用;在”/proc/kallsyms”文件中对应这符号表,它记录了函数的符号和函数在内存所在的地址。
原文:http://blog.csdn.net/feitian944/article/details/51344204