2

我正在尝试找到一个工具来从 Xserver 模块中提取模块版本信息(模块记录的一部分)。例如,在 Xorg 日志中,我可以在 Xorg.0.log 文件中看到 librecord 模块的以下信息...

[    39.892] (II) Loading /usr/lib/xorg/modules/extensions/librecord.so
[    39.905] (II) Module record: vendor="X.Org Foundation"
[    39.905]    compiled for 1.9.0, module version = 1.13.0
[    39.905]    Module class: X.Org Server Extension
[    39.905]    ABI class: X.Org Server Extension, version 4.0

是否有工具可以让我轻松提取上述信息。有时您可以在模块上使用 modinfo,它会有版本信息,但这并不总是有效。我现在知道的唯一一致的方法是解析 xorg 日志文件。谢谢。

4

1 回答 1

1

是的,有,你也可以尝试写一个小的。

http://gitorious.org/xdriverprobe

问题是 xdriverprobe 不会在较新的服务器上编译,因为我没有将它更新到最新的 ABI。此外,xdriverprobe 仅用于视频驱动程序,但它可以适用于其他模块。主要源代码文件(xdriverprobe.c)不到500行,阅读起来很容易学习。

它适用于 Ubuntu 11.10..../xdriverprobe -o moduledata提供您想要的信息。

查看它的源代码。它确实:

  • dlopen() 模块
  • 找到一个叫做的符号modulenameModuleData(如果你的模块被调用modulename
  • 那个符号是XF86ModuleData*See/usr/include/xorg/xf86Module.h
  • 检查其名为的成员vers

花几个小时,您将能够编写一个非常小的代码来满足您的需求。

更多信息:http ://www.xfree86.org/current/DESIGN17.html#65 (非常古老的文档,但其中大部分内容在今天仍然适用)。如果您对该文档不满意,则必须阅读 Xorg 源代码。

快乐黑客!

于 2011-10-19T19:30:27.783 回答