Linux模块的实现机制可移出符号

时间:2009-02-18

  在某种意义上来说,从可安装模块的角度来看,内核也是一个模块,只不过是一个不可安装的模块。既然把可安装模块安装到了内核这个模块上并向内核提供服务.那么这些可安装模块就必须有与内核交互的手段。实现两个模块之间交互的简单的手段就是实现双方的变量和函数的共享.

  为了使被安装模块知道内核的哪些变量和函数是模块可以使用的,Linux内核以“可移出”符号的形式提供了可供其他模块共享的变量和函数名称。这里所谓的“可移出”,是指外部可以引用,即是暴露在内核外面的符号。在文件中,可移出符号的定义形式如下:

  而模块在需要引用内核的一个“可移出”符号时,要把该符号用extern声明为外部引用。

  为了使加载的各模块之间也可通过可移出符号进行交互,模块也可声明自己的移出符号,以供其他模块使用。所以这些移出符号可看做是内核与模块以及模块之间的信号通路,模块之间就是通过这些内核或模块的可移出符号实现交互的。

  但需要注意的是,模块可以引用内核及其他模块的可移出符号,而内核不能引用模块的可移出符号。也就是说,内核与模块之间的互连是一种“单向”的互连。 模块与内核之间连接示意图如图所示。

模块和内核的连接

  图 模块和内核的连接
  


  
上一篇:什么是Linux内核模块
下一篇:Linux外部设备的基本概念

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料