linux设备驱动程序开发总结

linux设备驱动程序开发总结

ID:27775561

大小:47.50 KB

页数:5页

时间:2018-12-06

linux设备驱动程序开发总结_第1页
linux设备驱动程序开发总结_第2页
linux设备驱动程序开发总结_第3页
linux设备驱动程序开发总结_第4页
linux设备驱动程序开发总结_第5页
资源描述:

《linux设备驱动程序开发总结》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、不管我们学3什么编程语言,和我们见面的第一个程序就是“helloworld!”相信各位道上的朋友都遇到过这种个程序!!学习驱动程序也不例外,我学的第一个驱动程序就是“helloworld!!具体的程序代码如下:#include#includeMODULE_LICENSE(nDualBSD/GPL");staticinthello_init(void){printk(KERN_ALERTnHello,world!n);return0;

2、}staticvoidhello_exit(void){printk(KERN_ALERT’’bybyFriendyARMmini2440!H);}module_init(hello_init);module_exit(hello_exit);将其复制到工作0录下,并编写一个简单的Makefile文件:由于每个人使用的Linux系统不一样且每个人内核源代码所存放的位置也不是一样的。所以编写Makefile文件的时候,参考别人的进行修改是一个很不错的的学习Makefile文件的方法。当然你能把

3、Linux内核的Makefile文件了解一下,对你了解Linux内核有很大的帮助的。学习心得:1、驱动模块运行在内核空间,运行是不能依赖任何函数库和模块连接,所以在写驱动程序的时候所调用的函数只能是作为内核一部分的函数2、驱动模块和应用程序的一个重要不同是:应用程序退出时可不管资源释放或者其他的清除工作,但模块的退出啊哈念书必须仔细撤销初始化函数所做的一切,否则,在系统想重新引导之前某些东西就会残留在系统中。3、处理器的多种工作模式其实就是为了操作系统的用户空间和内核空间设计的,在Unix类的操

4、作系统中只是用到了两个级别:最高级别和最低级别。4、要十分注意驱动程序的并发处理。在Linux驱动程序中必须解决的一个问题就是多个进程对共享资源的并发访问.Linux对解决并发访问可能导致的竟态问题提供了几种机制:中断屏蔽、原子操作、自旋锁、信号量等机制。5、内核API中具有下划线(_)的函数,通常是接口的底层组件,应该慎用。6、内核代码不能实现浮点运算。内核中没有提供一套进行浮点运算的完整的环境。7、Makefile文件的分析:obj-m:=hello.o代表了我们要构建的模块名为hello.

5、ko,make会子啊该目录下自动找到hello.c文件进行编译。如果hello.o文件是有其他的源文件生成(比如file.l和filel.c)的,则在下面加上:hello-objs:=file.ofilel.o......(其中用红色标志的是对应关系)$(MAKE)-C$(KERNELDIR)M=$(PWD)modules其中-C$(KERNELDIR)指定了内核源代码的位置,其中保存有内核的顶层makefile文件。M=$(PWD)指定了模块源代码的位置modules目标指向obj-m变量中设

6、定的模块8、insmod使用公共内核符号表来解析模块中未定义的符号,公共内核符号表中包含了的、所有的全局内核项(即函数和变量的地址),这是实现模块化驱动程序所必须的。9、Linux使用模块层叠技术,我们可以将模块划分为多个层次,通过简化每个层可以缩短开发周期。如果一个模块需要向其他模块导出符号,则使用下面宏:EXPORT一SYMBOL(name);EXPORT一SYMBOL一GPL(name);为这两个宏将被扩展为符号必须子啊模块文件的全局变量部分导出,一个特殊变量的声明,而该变量必须是全局的。

7、10、所有的模块代码都必须包含下面两个头文件:#include#include11、所有模块代码都应指定所使用的许可证:MODULE_LICENSE("DuaIBSD/GPL”);12、初始化和关闭初始化的实际定义通常是:staticintinitinitialization一funetion(void){/*初始化代码*/}module一init(initialization一function)清除函数的实际定义是.•/*清除代码*

8、/}module_exit(cleanup_function)13、还有一些是可选的其他的描述型的定义:MODULE_AUTHOR(nn);MODULE_DESCRIPTION(nn);MODULE_VERSION(Hn);MODULE一ALIAS(nn);MODULE—DEVICE—TABLEC…);这些模块的声明习惯性的放在模块程序的最后14、Linux内核模块的初始化出错处理一般使用“goto”语句,通常情况下很少使用“goto”,但是出错处理是(可能是唯一的情况),它却非常的有用。在大一

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

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

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