5

linux 内核升级后,我的 VMWare 服务器无法启动,直到使用 vmware-config.pl 进行一些重新配置工作(包括构建一些内核模块)。

如果我用最新的 Windows Service Pack 更新我的 Windows VMWare 主机,我通常不需要做任何事情来运行 VMWare。

为什么 VMWare 在 Linux 和 Windows 之间的工作方式不同?此重新编译操作是否在 Linux 平台上比 Windows 带来任何好处?

4

4 答案 4

14

去阅读Linux 内核驱动程序接口

写这篇文章是为了解释为什么 Linux 没有二进制内核接口,也没有稳定的内核接口。请注意,本文描述的是_in kernel_接口,而不是内核到用户空间的接口。内核到用户空间接口是应用程序使用的接口,即系统调用接口。该接口随着时间的推移_非常_稳定,并且不会损坏。我有一些旧程序是在 0.9 之前的内核上构建的,在最新的 2.6 内核版本上仍然可以正常工作。该接口是用户和应用程序程序员可以信赖的稳定接口。

它反映了大部分 Linux 内核开发人员的观点:随时更改内核实现细节和 API 的自由使他们能够更快更好地开发。

如果没有保证内核接口在不同版本之间保持一致的承诺,像 VMWare 这样的二进制内核模块就无法在多个内核上可靠地工作。

例如,如果某些结构在新内核版本上发生更改(为了更好的性能或更多功能或任何其他原因),二进制 VMWare 模块可能会使用旧结构布局造成灾难性损坏。从源代码再次编译模块将捕获新的结构布局,因此有更好的工作机会——尽管仍然不是 100%,以防字段已被删除或重命名或赋予不同的目的。

如果一个函数更改了它的参数列表,或者被重命名或以其他方式不再可用,那么即使从相同的源代码重新编译也不会起作用。该模块必须适应新的内核。因为每个人(应该)都有来源并且(可以找到能够修改它以适应的人)。“将工作推到终端节点”在网络和自由软件中都是一个普遍的想法:因为[边缘]/[Linux内核之外的开发人员]的资源大于[主干]的有限资源/ [Linux 开发人员],让前者做更多工作的权衡是可以接受的。

On the other hand, Microsoft has made the decision that they must preserve binary driver compatibility as much as possible -- they have no choice, as they are playing in a proprietary world. In a way, this makes it much easier for outside developers who no longer face a moving target, and for end-users who never have to change anything. On the downside, this forces Microsoft to maintain backwards-compatibility, which is (at best) time-consuming for Microsoft's developers and (at worst) is inefficient, causes bugs, and prevents forward progress.

于 2009-05-06T03:38:04.587 回答
3

Linux 没有稳定的内核 ABI - 诸如数据结构的内部布局之类的东西会随着版本的变化而变化。需要重建 VMWare 才能在新内核中使用 ABI。

另一方面,Windows 有一个非常稳定的内核 ABI,不会因服务包而改变。

于 2009-05-06T03:09:36.010 回答
1

为了增加 bdonlan 的答案,ABI 兼容性好坏参半。一方面,它允许您分发适用于较新版本内核的二进制模块和驱动程序。另一方面,它迫使内核程序员添加大量胶水代码以保持向后兼容性。因为 Linux 是开源的,而且因为内核开发人员即使他们被允许,分发二进制模块的能力也被认为不那么重要。从好的方面来说,Linux 内核开发人员在更改数据结构以改进内核时不必担心 ABI 兼容性。从长远来看,这会导致更干净的内核代码。

于 2009-05-06T03:23:48.647 回答
1

这是 Linux 和 Windows 在不同的文化环境和期望中开发的结果:http: //www.joelonsoftware.com/articles/Bicultureism.html。简而言之:Windows 被设计为适合用户,而 Linux 演变为适合开源开发人员。

于 2011-09-30T14:43:40.607 回答