深度介绍Linux内核是如何工作的(4)

  那么如何知道一个模块会接受什么参数呢?一个比较好的方法是使用modinfo命令,它列出了关于模块的种种信息。这里有一个关于模块snd-hda-intel的例子

  # modinfo snd-hda-intel

  filename: /lib/modules/2.6.20-16-generic/kernel/sound/pci/hda/snd-hda-intel.ko

  description: Intel HDA driver

  license: GPL

  srcversion: A3552B2DF3A932D88FFC00C

  alias: pci:v000010DEd0000055Dsv*sd*bc*sc*i*

  alias: pci:v000010DEd0000055Csv*sd*bc*sc*i*

  depends: snd-pcm,snd-page-alloc,snd-hda-codec,snd

  vermagic: 2.6.20-16-generic SMP mod_unload 586

  parm: index:Index value for Intel HD audio interface. (int)

  parm: id:ID string for Intel HD audio interface. (charp)

  parm: model:Use the given board model. (charp)

  parm: position_fix:Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size). (int)

  parm: probe_mask:Bitmask to probe codecs (default = -1). (int)

  parm: single_cmd:Use single command to communicate with codecs (for debugging only). (bool)

  parm: enable_msi:Enable Message Signaled Interrupt (MSI) (int)

  parm: enable:bool

  对我们来说比较有兴趣的以"parm"开头的那些部分:显示了模块所接受的参数。这些描述都比较简明,如果想要更多的信息,那就安装kernel的源代码,在类似于/usr/src/KERNELVERSION/Documentation的目录下你会找到。

  里面会有一些有趣的东西,比如文件/usr/src/KERNELVERSION/Documentation/sound/alsa/ALSA-Configuration.txt描述的是被许多ALSA声音模块承认的参数;/usr/src/KERNELVERSION/Documentation/kernel-parameters.txt这个文件也很有用。

  前几天在Ubuntu论坛有一个例子,说的是如何将参数传递到一个模块(详见https://help.ubuntu.com/community/HdaIntelSoundHowto)。实际上问题的关键是snd-hda-intel参数在正确驱动声音硬件时需要一点操作,而且在boot time加载时会中止。解决方法的一部分是将probe_mask=1选项赋给模块,如果你是手动加载模块,你需要输入:

  # modprobe snd-hda-intel probe_mask=1

  更有可能,你在文件/etc/modprobe.conf中放置这样类似的一行:options snd-hda-intel probe_mask=1

  这"告诉"modprobe每次在加载snd-hda-intel模块时包含probe_mask=1选项。现在的有些Linux版本将这一信息分离进/etc/modprobe.d下的不同文件中了,而不是放入modprobe.conf中。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzyyzy.html