当前位置:首页 » 专业资讯
开发技术指南» 文章正文
    引言: 什么是module 以及如何写一个module 什么是module 以及如何写一个module 作 者: 庄荣城 不知道在什幺时候,Linux 出现了 module 这种东西,的确,它是 Linux 的一大革新。
 

 

 ·我要开始学习linux!    »显示摘要«
    摘要:今天开始我要学习linux.希望我能成功!------------------------------------------今天下午实在无聊,windows这个破系统,实在无聊。自己终于决定应该开始学习linux了。希望我能成功!......
 ·linux下串口编程入门(三)    »显示摘要«
    摘要:读写串口 设置好串口之后,读写串口就很容易了,把串口当作文件读写就是。 发送数据 char buffer[1024];int length;int nbyte;nbyte = write(fd, buffer ,length)读取串口数据使用文件操作read函数读取,如果设置为原始模式(raw mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。 可以使用操作文件的函数来实现异步读取,如fcntl,或者select等来操作。......


内核模块编程强贴一篇
什么是module 以及如何写一个module

什么是module 以及如何写一个module 【相关文章:Linux下流媒体Helix Serve

【扩展阅读:安裝ntop,進行網絡流量的分析

【扩展信息:让apache上的图片有防止盗链的功能

作 者: 庄荣城

不知道在什幺时候,linux 出现了 module 这种东西,的确,它是 linux 的一大革新。有了 module 之后,写 device driver 不再是一项恶梦,修改 kernel 也不再是一件痛苦的事了。因为你不需要每次要测试 driver 就重新 compile kernel 一次。那简直是会累死人。module 可以允许我们动态的改变 kernel,加载 device driver,而且它也能缩短我们 driver development 的时间。在这篇文章里,我将要跟各位介绍一下 module 的原理,以及如何写一个 module。

module 翻译成中文就是模块,不过,事实上去翻译这个字一点都没意义。在讲模块之前,我先举一个例子。相信很多人都用过 redhat。在 redhat 里,我们可以执行 sndconfig,它可以帮我们 config 声卡。config 完之后如果捉得到你的声卡,那你的声卡马上就可以动了,而且还不用重新激活计算机。这是怎幺做的呢 ? 就是靠module。module 其实是一般的程序。但是它可以被动态载到 kernel 里成为 kernel的一部分。载到 kernel 里的 module 它具有跟 kernel 一样的权力。可以 access 任何 kernel 的 data structure。你听过 kdebug 吗 ? 它是用来 debug kernel 的。它就是先将它本身的一个 module 载到 kernel 里,而在 user space 的 gdb 就可以经由跟这个 module 沟通,得知 kernel 里的 data structure 的值,除此之外,还可以经由载到 kernel 的 module 去更改 kernel 里 data structure。

我们知道,在写 c 程序的时候,一个程序只能有一个 main。kernel 本身其实也是一个程序,它本身也有个 main,叫 start_kernel()。当我们把一个 module 载到 kernel 里的时候,它会跟 kernel 整合在一起,成为 kernel 的一部分。请各位想想,那 module 可以有 main 吗 ? 答案很明显的,是 no。理由很简单。一个程序只能有一个 main。在使用 module 时,有一点要记住的是 module 是处于被动的角色。它是提供某些功能让别人去使用的。

kernel 里有一个变量叫 module_list,每当 user 将一个 module 载到 kernel 里的时候,这个 module 就会被记录在 module_list 里面。当 kernel 要使用到这个 module 提供的 function 时,它就会去 search 这个 list,找到 module,然后再使用其提供的 function 或 variable。每一个 module 都可以 export 一些 function 或变量来让别人使用。除此之外,module 也可以使用已经载到 kernel 里的 module 提供的 function。这种情形叫做 module stack。比方说,module a 用到 module b 的东西,那在加载 module a 之前必须要先加载 module b。否则 module a 会无法加载。除了 module 会 export 东西之外,kernel 本身也会 export 一些 function 或 variable。同样的,module 也可以使用 kernel 所 export 出来的东西。由于大家平时都是撰写 user space 的程序,所以,当突然去写 module 的时候,会把平时写程序用的 function 拿到 module 里使用。像是 printf 之类的东西。我要告诉各位的是,module 所使用的 function 或 variable,要嘛就是自己写在 module 里,要嘛就是别的 module 提供的,再不就是 kernel 所提供的。你不能使用一般 libc 或 glibc所提供的 function。像 printf 之类的东西。
...   下一页
 ·理解 xwindow    »显示摘要«
    摘要: 很多人在用 xwindow,但是他们是在用一些包装掩盖下的 xwindow,那些包装有些很不稳定,占用大量资源,以至于有人说 xwindow 是垃圾。其实 xwindow 是一个非常出色的图形系统,你应该抱怨的是那些不稳定的包装,而不是 xwindow 本身。 xwindow 是非常巧妙的设计,很多时候它在概念上比其它窗口系统先进,以至于经过很多年它仍然是工作站上的工业标准。许多其它窗口系统的概念都是从 xwindow 学来的。 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE