Linux驱动程序实例

Linux驱动程序实例

ID:41583402

大小:61.18 KB

页数:7页

时间:2019-08-28

Linux驱动程序实例_第1页
Linux驱动程序实例_第2页
Linux驱动程序实例_第3页
Linux驱动程序实例_第4页
Linux驱动程序实例_第5页
资源描述:

《Linux驱动程序实例》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1、最简单的设备驱动程序hcllo.c#include#ineludeMODULE_LICENSE(nGPLH);staticinthello_init(void){printk(KERN_ALERT,,Hello,Hello,LinuxDriver!n);return0;}staticvoidhello_exit(void){printk(KERN_ALERTnGoodbye,Hello,LinuxDriver!H);}module_init(hello_init);mod

2、ule_exit(hello_exit);说明:(1)前两行为所包含的头文件,位于内核源码的目录下include文件夹下的。(2)程序中的MODULE_LICENSE(nGPL");用于声明模块的许可证。⑶module_init()为注册加载时执行的函数,module_exit()为/注册卸载时执彳亍的函数。传递给这两个函数的的参数为所要进行初始化的函数的地址(函数名)。⑷模块的编译:使用gcc编译器,与编译普通程序不同的是要在参数-工后指定内核源代码的目录,2.4的内核模块编译后将生成.o格式的文件。命令行下的编译格式如下:gcc-DMOD

3、ULE-DKERNEL-I/usr/src/linux-2.4.20/include-chello.c•其中-DMODULE-D—KERNEL—为两个宏定义,如果文件中包含这两个的宏定义,可以在gCC编译时不用再指定。文件中宏定义的内容如下:#ifndef—KERNEL—#define—KERNEL—#endif#ifndefMODULE#defineMODULE#endif(5)模块的加载与卸载模块加载:在命令行下执行:insmodhello.o»如果成功加载到内核将在终端上显水:Hello,Hello,LinuxDriver!。查看加载的

4、模块:通过lsmod命令町以杳看内核屮已经加载的模块。模块的卸载:rmmodhello.Oo卸载成功的话将终端显示:Goodbye,Hello,LinuxDriver!⑹驱动模块运行在内核空间,运行时不能依赖于任何函数库和模块连接,所以在耳驱动时所调用的函数只能是作为内核一部分的函数。内核代码不能实现浮点书运算。2、-般驱动程序都会实现一个file_operation结构中的函数。如test.c程序中所实现的file_operation结构如下:struct,file_operationstest_fops={read:read_test,w

5、rite:writ,open:open_test,release:release_test,};该驱动程序所实现的功能是在内存中开辟-•段空间,write实现了往这段内屮写数据,read正好相反,是从这段内存中读出数据。(1)头文件和全局变量定义如下:#include#includedinux/fs.h>#includevlinux/mm.h>#inc丄ude<丄inux/errno•h>#include#include#includedinux/mod

6、ule.h>#include#include//设备号//存放内心空间的指针//当前内存中拥有的数据的字节数MODULE_LICENSE(f,GPLf,);unsignedinttest_major=254;char*str_test;unsignedintcount_driver;constunsignedintcount_driver_max=255;//容虽的最大值(2)模块初始化函数为:staticinttest_init_modu1e(void)intresult;r

7、esult=register_chrdev(test_majorz,,test,,z&test_fops);if(result<0){printk(KERN_INFOntest:can11getmajornuir.bern);returnresult;}printk("registei:okn);if((str_test=(char*)kmalloc(256,GFP_KERNEL))==NULL)//屮请256字节fl勺内存空MJ{printk(nkmallocerrorK);return-1;Elseprintk(,Tkamll

8、ocsuccess!n);count_driver=0;}return0;}完成了两个工作:一、通过register_chrdev()向系统注册了一个设备名为t

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。