驱动编程学习----内核模块与应用程序区别
2010-03-04 20:28
513 查看
内核模块相比于应用程序
每个内核模块只注册自己以便来服务将来的请求, 并且它的初始化函数立刻终止. 换句话说, 模块初始化函数的任务是为以后调用模块的函数做准备; 好像是模块说, " 我在这里, 这是我能做的."模块的退出函数( 例子里是hello_exit )就在模块被卸载时调用. 它好像告诉内核, "我不再在那里了, 不要要求我做任何事了."这种编程的方法类似于事件驱动的编程, 但是虽然不是所有的应用程序都是事件驱动的, 每个内核模块都是. 另外一个主要的不同, 在事件驱动的应用程序和内核代码之间, 是退出函数: 一个终止的应用程序可以在释放资源方面懒惰, 或者完全不做清理工作, 但是模块的退出函数必须小心恢复每个由初始化函数建立的东西, 否则会保留一些东西直到系统重启.
卸载模块的能力是你将最欣赏的模块化的其中一个特色, 因为它有助于减少开发时间; 你可测试你的新驱动的连续的版本, 而不用每次经历漫长的关机/重启周期.
应用可以调用额外的库,所以有些函数不需要去定义就可以直接调用,而内核不可以,只能是自己定义才使用,并且缺乏浮点的支持。
只有实际上是内核的一部分的函数才可以在内核模块里使用. 内核相关的任何东西都在头文件里声明, 这些头文件在你已建立和配置的内核源码树里; 大部分相关的头文件位于 include/linux和 include/asm, 但是别的 include 的子目录已经添加到关联特定内核子系统的材料里了
另外一个在内核编程和应用程序编程之间的重要不同是每一个环境是如何处理错误: 在应用程序开发中段错误是无害的, 一个调试器常常用来追踪错误到源码中的问题, 而一个内核错误如果不终止整个系统至少会杀掉当前进程。
每个内核模块只注册自己以便来服务将来的请求, 并且它的初始化函数立刻终止. 换句话说, 模块初始化函数的任务是为以后调用模块的函数做准备; 好像是模块说, " 我在这里, 这是我能做的."模块的退出函数( 例子里是hello_exit )就在模块被卸载时调用. 它好像告诉内核, "我不再在那里了, 不要要求我做任何事了."这种编程的方法类似于事件驱动的编程, 但是虽然不是所有的应用程序都是事件驱动的, 每个内核模块都是. 另外一个主要的不同, 在事件驱动的应用程序和内核代码之间, 是退出函数: 一个终止的应用程序可以在释放资源方面懒惰, 或者完全不做清理工作, 但是模块的退出函数必须小心恢复每个由初始化函数建立的东西, 否则会保留一些东西直到系统重启.
卸载模块的能力是你将最欣赏的模块化的其中一个特色, 因为它有助于减少开发时间; 你可测试你的新驱动的连续的版本, 而不用每次经历漫长的关机/重启周期.
应用可以调用额外的库,所以有些函数不需要去定义就可以直接调用,而内核不可以,只能是自己定义才使用,并且缺乏浮点的支持。
只有实际上是内核的一部分的函数才可以在内核模块里使用. 内核相关的任何东西都在头文件里声明, 这些头文件在你已建立和配置的内核源码树里; 大部分相关的头文件位于 include/linux和 include/asm, 但是别的 include 的子目录已经添加到关联特定内核子系统的材料里了
另外一个在内核编程和应用程序编程之间的重要不同是每一个环境是如何处理错误: 在应用程序开发中段错误是无害的, 一个调试器常常用来追踪错误到源码中的问题, 而一个内核错误如果不终止整个系统至少会杀掉当前进程。
相关文章推荐
- linux设备驱动编程-初探(2)--在内核中构造和运行模块
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】详解Linux内核之双向循环链表
- Linux2.6内核驱动移植(与2.4模块的区别)
- Linux系统应用程序和内核模块的区别
- linux驱动学习之一内核模块
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- linux 学习- 编程基础之内核模块开发
- linux驱动学习--第六天:第四章 Linux 内核模块 之 Linux 内核模块编译
- 内核驱动编程------一个模块包含多个中断线资源
- c语言编程基础------0.5 c应用程序和c内核驱动程序的沟通和区别
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--同步篇
- linux驱动学习--第四天:第三章 linux内核以及内核编程 之 在Linux内核中新增程序的方法
- 【内核编程】【Makefile】:嵌入式驱动开发时驱动模块于内核版本不匹配的解决
- Linux 内核模块编程的第一个字符设备驱动
- Linux内核驱动学习(三)----内核模块基础 | 设计 | 可选项
- 如果你在学嵌入式底层驱动,内核模块编程将是你的第一课!小白学Linux之内核模块编程详解
- Linux内核驱动学习(三)----内核模块基础 | 设计 | 可选项
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】全面解析Linux内核的同步与互斥机制--互斥篇
- 驱动编译进内核和编译模块的区别
- 驱动学习之模块编程(转)