当前位置:嗨网首页>书籍在线阅读

09-加载平台设备驱动程序

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

19.5 加载平台设备驱动程序

使用udev可以很容易地动态加载平台驱动程序。嵌入式系统中可以安装一条udev软件包中的默认规则。这条规则看起来应该和代码清单19-4中的第一条规则类似。为了方便引用,我们将它复制在这里:

612.png 这条规则的含义是:如果驱动设置了 MODALIAS 并且环境变量 DRIVER 没有被设置,那么就运行modprobe,并将 MODALIAS 传递给它。只要你在驱动中以正确格式包含了 MODULE_ALIAS 宏,它会被depmod收集并放置在文件modules.alias中。modprobe在运行时会使用传递给它的 MODALIAS 在这个文件中查找匹配的条目。19.4.1节详细讲述了这个过程。

BeagleBoard开发板上的OMAP3530处理器中内置了一个Inventra双重角色USB控制器,让我们以此为例看一下它的平台驱动。代码清单19-12显示了这个USB主机控制器驱动程序中的几行内容。其中的最后一行中会被收集到文件modules.alias中,而modprobe也会使用它来加载对应的驱动。

代码清单19-12 musb_hdrc.c的一部分内容

613.png MODULE_ALIAS 宏实际上会创建一个常量字符串( const char ),而它会被放置到设备驱动程序(模块)目标文件的一个特殊的段中。这个字符串类似于环境变量,存在形式是 alias="string" 。这个特殊段的名称是 .modinfo ,其中包含的属性描述了驱动的各方面特征。可以使用交叉版本的 readelf 来查看这个段的头部信息。回顾一下第13章中介绍的readelf细节,具体命令如下所示:

614.png 这里显示的 .modinfo 的内容并不便于阅读,为此,我们可以使用module-init-tools软件包中的modinfo工具:

615.png 注意其中的模块别名(alias)—— platform:musb_hdrc 。如果一切准备就绪,你应该可以使用 modalias 字符串手工加载设备驱动程序,而udev也正是将这个字符串传递给modprobe:

616.png 当然,如果udev配置正确,而且有类似代码清单19-4所示的规则,udev会使用 modalias 字符串替你加载这个模块。代码清单19-10中显示了一个示例的udev启动脚本,当其中的 udevadam trigger 命令执行完毕后,这个驱动就会被加载。如此而已!