原创 utu2440在linux下的“hello_world”驱动(模块编程)

2010-2-25 20:40 2781 8 8 分类: MCU/ 嵌入式

hello_world_driver  hello_world”驱动(模块编程)



注解: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条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条