挑战启动极速(5)---modprobe优化分析

本博客原创文章属本人lurker0ster所有,欢迎转载。
转载时需同意以下条件:
1. 必须保持版权信息,以及文章出处http://blog.csdn.net/lurker0ster/
2. 不准演绎,修改,必须完整转载全部内容。

===================分割线====================

     Modprobe 是insmod的智能版本。它可以根据依赖关系把目标驱动相关的驱动也一并加载,使用上非常方便,所以有很多linux发行版本采用modprobe做启动时的驱动加载工具。

     一般而言,有两个地方决定了modorbe加载驱动的顺序。一处是/lib/modules/<version>/,一处是/etc/modprobe.d/*.conf。前者的作用类似与数据库,后者是控制部分。工具还提供了对旧版本modprobe的配置文件modprobe.conf的兼容,这在GNU工具中是很少见的。

/lib/modules/<version>/modules.dep依赖文件;语法很像makefile
/lib/modules/<version>/modules.alias模块的别;格式是(别名,真实名) 可以有多个别名
/lib/modules/<version>/modules.symbols特定符号对应的模块名

这三个文件都有**.bin版本,比如modules.symbols.bin。这个设计主要是设计者考虑到文本搜索效率低而采取的优化措施。

/etc/modprobe.d/*.conf在前面的数据库基础上做了智能控制的部分。有如下功能:

  1. 1.解决依赖关系
  2. 2.禁止有问题驱动加载(防止误配置)
  3. 3.启动时指定各自的参数
    4.同时启动额外的程序
    5.模块版本控制(别名机制) (比如B依赖A, A有1.4/1.3 或者新版本改名字了这种情况有起作用了)
  • *.conf支持几种命令,可以在man modprobe中查到。
  • alias别名
    options制定模块每次加载时需要的参数
    install在加载驱动前,加载配套的程序。
    install pcnet32 /sbin/modprobe -q --ignore-install vmxnet; /sbin/modprobe --ignore-install pcnet32 $CMDLINE_OPTS
    include包含依赖关系
    blacklist黑名单
    remove卸载驱动
    config配置modprobe 工作方式。比如config binary_indexs yes

  •       modprobe是一个独立的工具。每次运行modprobe都得调用parse_toplevel_config函数,扫描一遍/etc/modprobe.d目录下的文件,把modname对应options commands aliases blacklist都分析出来,然后对alias应用blacklist去掉禁止使用的模块。运行时间取决于配置文件以及条目的数量,而且是字符串比较,所以非常地耗时间。

     它的缺点在于:

1.使用符号名作为依据,很难维护
2.不能够做到加载并行化(针对没有依赖关系的驱动)
3.每次都扫描,效率很差
      针对用户环境不会经常变动的情况,其实我们可以只在正常使用时产生一次驱动的顺序加载列表,然后在下一次启动时调用insmod读取这个顺序表,一次加载对这个驱动。另外,很多驱动没有必要在启动的时候加载,可以在第一次使用的时候加载。就算是有多种硬件环境,也可以使用硬件配置文件的设定来提供这种灵活性,windows正是这么做的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值