内核驱动_模块方式_hello world

731阅读 1评论2010-12-31 strongerII
分类:LINUX

hello world!模块
  hello.c   
    #include
    #include   // 这两个头文件包含相应宏定义    
    MODULE_LICENSE("GPL");   // 告知内核,这是free模块
    static int __init hello_init(void)   // 模块进入函数
    {
          printk(KERN_ALERT "Hello World\n");       
    return 0;
    }
    static void __exit hello_exit(void)  // 模块退出函数
    {
           printk(KERN_ALERT "Hello World exit\n");
    }    
    module_init(hello_init);    // 初始化
    module_exit(hello_exit);   // 退出     
    MODULE_AUTHOR("Di Zhuang"); // 作者声明
    MODULE_DESCRIPTION("A simple Hello World Module");
    MODULE_ALIAS("a simplest module");

 
Makefile:    
 
ifneq ($(KERNELRELEASE),)
obj-m :=hello.o
else
KDIR := /lib/modules/2.6.18-194.8.1.el5/build
all:
   make -C $(KDIR) M=$(PWD) modules
clean:
   rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif

加载 insmod  insmod hello.ko
卸载 rmmod   rmmod hello
查看 lsmod
加载 modprobe  modprobe hello 看加载的文件是否依赖其他文件,如果是,则会先找到这些模块,把他们先加载到内核
 
MODULE_LICENSE("GPL")  许可证申明
MODULE_AUTHOR(“Simon Li");  作者
MODULE_DESCRIPTION("Hello World Module"); 模块描述
MODULE_VERSION("V1.0");    模块版本
MODULE_ALIAS("a simple module"); 模块别名
module_param(name,type,perm) 模块参数
 
EXPORT_SYMBOL(符号名)
EXPORT_SYMBOL_GPL(符号名)
 
 
常见问题:
 
内核模块版本  与正在运行的内核版本必须一致
 

    
上一篇:DM365开发环境搭建
下一篇:内核驱动_直接编译到内核_hello world

文章评论