在VmWare VM中为Linux来宾操作系统实现内核调试模块

时间:2012-03-03 20:27:06

标签: linux vmware virtualization kernel

对不起这篇文章很抱歉。

我需要对我将要进行的项目提出一些意见。

我正在尝试创建一个应用程序,它从位于VmWare虚拟机内的来宾Linux操作系统收集内核调试信息,并将它们有效地发送到主机操作系统。

到目前为止,我找到了一个类似的项目,但是为Windows编写[1]。 该项目的作者编写了一个加载到内存中的DLL,并替换了KdSendPacket和KdReceivePacket函数的实现,以使用VmWare GuestRpc [2]机制,而不是慢速串行端口。 然后通过命名管道将数据发送到主机(Kd或WinDbg)上的调试应用程序。

作者声称通过避免串口传输,速度提高了45%。

我正在尝试实现类似的功能,但对于Linux,并尝试使调试过程比使用串行端口快一点。

我的具体问题是:

  1. 是否存在任何类似的应用程序? 我找不到任何。
  2. 这样的应用程序是否值得,例如将其功能与netconsole [3]进行比较?
  3. 您建议使用哪种拦截printk消息的方法?
  4. Linux上是否有等效的KdSendPacket / KdReceivePacket?
  5. [1]。 http://virtualkd.sysprogs.org/dox/operation.html

    [2]。 http://articles.sysprogs.org/kdvmware/guestrpc.shtml

    [3]。 http://www.kernel.org/doc/Documentation/networking/netconsole.txt

2 个答案:

答案 0 :(得分:0)

使用串口实际上并不是最理想的。即使是(虚拟)网络也会比这更好,但回到主客户IPC频道,我想到了VMware的VMCI。

答案 1 :(得分:0)

可以使用许多方法来实现您的目标,如果网络连接,可以应用以下方法:

  1. 使用syslog服务并通过网络将日志传输到您的服务器: syslogd,syslogng似乎支持使用一些过滤器标准将日志发送到日志服务器。

  2. 直接调用内核模块中的tcp / udp套接字函数,将收集到的数据发送回服务器。

  3. 其他方法,您可以在主机上编写应用程序,调用hypervisor的共享内存访问函数来读取内核模块的内存缓冲区。但是,xen / kvm管理程序都支持这些api,我不确定天气vmware是否有这种库。