Tuesday, September 22, 2009

module的alias

/etc/modprobe.conf中就定义了module的alias
从modprobe.conf的man手册中描述的是:
This  allows  you  to  give  alternate  names  for  a  module
这种机制常常会使人想的一种使用方式: 把复杂的, 长的, 不人性化的module名alia到简单的, 短的, 容易记的module名.

但是modprobe.conf中会出现相反的:
alias sound-service-0-1 snd-seq-oss
alias char-major-108    ppp_generic

alias pnp:dPNPb02f analog

其实, 上面的例子中, 我不觉得alia名比module名好记多少

但在实现应用中, 这个alias就有相当重要的作用.

/usr/src/linux/socket.c 文件中的一段代码:
#ifdef CONFIG_MODULES
    /* Attempt to load a protocol module if the find failed.
     *
     * 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
     * requested real, full-featured networking support upon configuration.
     * Otherwise module support will break!
     */
    if (net_families[family] == NULL)
        request_module("net-pf-%d", family);
#endif

"net-pf-%d"就是网络协议的alia名. 一个module判断需求的另一个module, 是根据kernel space中是否某一变量:
jessinio@niolaptop /usr/src/linux $ cat /proc/kallsyms |grep net_families
c09270e0 d net_families
* 至少这个变量是否被module的初始化函数去声明. 暂不理会.

可以从上面的使用方式去理解module的alia的作用: 为module定义一个不变的名字

怎么解理呢?
/usr/src/linux/socket.c的代码中, 使用了"net-pf-%d"字符串, 如果ipv4的module名因为需求变化了. 这就会影响到socket.c的使用! 当alia的存在可以很方便解决这种问题

其实就与NSS机制(配置文件为nsswitch.conf)是一样道理的.


No comments:

Post a Comment

Note: Only a member of this blog may post a comment.