在 xen 中,我们可以使用 libvchan 实现域间通信。
但是,在 domU 中,当开始通信时,它会显示以下错误:
libxenvchan_*_.init:没有这样的文件或目录。
为此,我尝试使用 xenfs 挂载 /proc/xen/。它给出了错误
未知文件系统“xenfs”
如何解决上面的这个错误以及如何实现域间通信?
在 xen 中,我们可以使用 libvchan 实现域间通信。
但是,在 domU 中,当开始通信时,它会显示以下错误:
libxenvchan_*_.init:没有这样的文件或目录。
为此,我尝试使用 xenfs 挂载 /proc/xen/。它给出了错误
未知文件系统“xenfs”
如何解决上面的这个错误以及如何实现域间通信?
看起来“libxenvchan_*_.init:没有这样的文件或目录错误”是一个常见问题。我没有找到进行网络搜索的解决方案。
对我来说,Linux 系统(CentOS 6.5)来宾 VM 上的解决方案是为 libvchan 服务器加载 xen 内核模块 xen_gntalloc 和 xen_evtchn。对于 libvchan 客户端,它应该是 xen_gntalloc 和 xen_gntdev。显然,这意味着您的客户虚拟机必须运行 xen linux 内核。请注意,我使用的是 xen 4.2.2,内核是 3.4.53-8.el6.centos.alt.x86_64。
我通过将打印语句添加到 libxenctrl 和 libxenvchan 库的源代码中找到了具体问题,直到找到它无法找到的文件,这些文件原来是 /dev/xen/gntalloc(服务器和客户端)、/dev/xen/ evtchn(服务器)、/dev/xen/gntdev(客户端)。
确保正确安装了 vchan 所需的库。您可以在 vchan-client 二进制文件上使用 ldd 命令来查看它是否可以成功加载所需的库。
在我的来宾 VM(Debian 8.4.0 64 位)中构建和安装 Xen 工具(make build-tools && make install-tools)并随后执行 ldconfig 足以让 vchan 示例程序运行。
我还必须加载上一个答案中提到的 Xen 内核模块。