【问题标题】:Run Linux exectuable on another POSIX kernel在另一个 POSIX 内核上运行 Linux 可执行文件
【发布时间】:2016-01-20 11:37:04
【问题描述】:

理论上是否可以在第二个(例如达尔文的 XNU)上执行为一个 POSIX 内核(例如 Linux)构建的
为什么不可能?

如果是因为库和/或共享对象,也许可以只留下内核及其与整个第二个操作系统的依赖关系,并从第一个开始使用其他所有内容?

所以你将只有来自第二个操作系统的内核和驱动程序,你可以 chroot 到某个地方,你就可以首先运行任何可执行文件?

或者我们可以制作某种动态包装器或静态翻译器吗?

UPD:好的,我找到了something similar,但只是粗略的建议,也许有人可以说得更清楚些?

【问题讨论】:

  • xBinary 可能是解决方案,但它已经过时并且不适用于现代 OSX
  • 有趣的部分是 darwins 内核内部实际上应该有一个系统调用包装器使这更容易,但我怀疑它是否仍然以应有的方式工作。 freebsd 在一定程度上也支持 linux 二进制文件freebsd.org/doc/handbook/linuxemu.html

标签: linux-kernel kernel posix darwin xnu


【解决方案1】:

只有如此多的细节必须正确才能让程序运行。库和共享对象是第一个问题,但即使您替换所有这些,系统调用接口也会因操作系统而异。

系统调用接口不是指函数原型,而是指用户空间任务如何调用内核中的系统调用。即使在 x86 上,也有不同的方法来实现转换到内核模式的陷阱,以及将系统调用参数详细信息传输到内核的不同方法。这方面的细节通常内置库/共享对象。

所以是的,理论上可以创建一个包装/翻译层,但这是很多工作,而且很难把所有细节都做好。这也是虚拟化近年来如此流行的原因之一。

【讨论】:

    【解决方案2】:

    我碰巧有一篇关于这个主题的博文:http://codingtragedy.blogspot.com/2015/04/why-binaries-from-one-os-dont-work-on.html

    总之1.二进制格式2.系统调用3.用户空间运行时,原则上都可以提供。实际示例包括运行 Linux 二进制文件的 BSD 和 Illumos。

    【讨论】:

    • 只有链接的答案在 Stack Overflow 上是不行的。请直接在答案中提供您博客文章中的一些基本信息。 (因此链接可用于获取更多信息)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多