Linux内核模块与应用程序比较

时间:2022-02-19 02:52:18

在学习Linux驱动开发之前,有必要了解内核模块与应用程序之间的各种不同点。
首先,应用程序(一般的小应用)是从头到尾执行单个任务,而模块是将自己预先注册到内核中一便于为将来某个请求服务。当注册模块时,只是执行其初始化函数,为其后续运行做好准备工作后就立即结束。换句话说,模块的注册时告诉内核:“我在这里,并且我可以干这些工作,以后有这类工作可以找我做。”模块的退出函数是在模块被卸载之前执行的,它告诉内核:“我走了,以后有工作别找我干了。”

另外,应用程序在退出时可以不去释放在其调用前申请的资源,而模块在退出时必须要确定其加载时所申请的一切资源,否则,在系统重启之前它所申请的资源将一直残留系统之中。

Linux内核的模块化开发给开发者带来了很大的便利,由于其每次加载或者卸载驱动模块不需要重启系统,从而有助于缩小开发周期,为开发带来方便。

内核模块和应用程序的另外一个区别是,应用程序的开发者必须可以在程序中调用它并未定义的函数(如C语言的库函数printf()),而内核模块仅仅被连接到内核,因此模块所能调用的函数仅仅是由内核导出的那些函数。

最后,应用程序和内核模块的另外一个重要区别是他们处理错误的方式,应用程序开发中出现段错误一般可以通过调试技术跟踪到代码中,而内核模块中的一个错误,即使不会影响到整个系统,至少也会杀死当前进程。



文章来源:http://kaffeel.org/archives/248