Linux kernel 在另一个POSIX内核上运行Linux Executable

Linux kernel 在另一个POSIX内核上运行Linux Executable,linux-kernel,kernel,posix,darwin,xnu,Linux Kernel,Kernel,Posix,Darwin,Xnu,从理论上讲,在第二个(例如达尔文的XNU)上执行为一个POSIX内核(例如Linux)构建的代码是否可能 为什么不可能呢 如果这是因为库和/或共享对象,那么可能只保留整个第二个操作系统中的内核及其依赖项,而使用第一个操作系统中的所有其他内容 所以,您将只有来自第二个操作系统的内核和驱动程序,并且您可以chroot到某个地方,并且您将能够为第一个操作系统运行任何可执行文件 或者我们可以制作某种动态包装器或静态转换器 UPD:好的,我已经找到了,但是这里有一些粗略的建议,也许有人可以说得更清楚些?为

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

如果这是因为库和/或共享对象,那么可能只保留整个第二个操作系统中的内核及其依赖项,而使用第一个操作系统中的所有其他内容

所以,您将只有来自第二个操作系统的内核和驱动程序,并且您可以chroot到某个地方,并且您将能够为第一个操作系统运行任何可执行文件

或者我们可以制作某种动态包装器或静态转换器


UPD:好的,我已经找到了,但是这里有一些粗略的建议,也许有人可以说得更清楚些?

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

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


因此,是的,理论上可以创建一个包装/翻译层,但这需要大量的工作,而且很难获得所有的细节。这就是近年来虚拟化变得如此流行的原因之一。

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

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


因此,是的,理论上可以创建一个包装/翻译层,但这需要大量的工作,而且很难获得所有的细节。这就是虚拟化近年来如此流行的原因之一。

我碰巧有一篇关于这个主题的博客:


简言之1。二进制格式2。系统调用3。用户空间运行时,所有这些原则上都可以提供。现实世界的例子包括运行Linux二进制文件的BSD和Illumos。

我碰巧有一篇关于这个主题的博客:


简言之1。二进制格式2。系统调用3。用户空间运行时,所有这些原则上都可以提供。现实世界中的例子包括运行Linux二进制文件的BSD和Illumos。

xBinary可能是解决方案,但它已经过时,在现代OSX上不起作用有趣的是darwins内核内部实际上应该有一个系统调用包装器,使其更容易实现,但我怀疑它是否仍能按应有的方式工作。freebsd在一定程度上支持linux二进制文件,xBinary可能是一个解决方案,但它已经过时,在现代OSX上不起作用有趣的是,darwins内核内部实际上应该有一个系统调用包装器,使其更容易实现,但我怀疑它是否仍能按应有的方式工作。另外,freebsd对linux二进制文件有一定的扩展支持,只有在堆栈溢出时才有答案。请在回答中直接提供你博客上的一些基本信息。(所以链接可用于获取更多信息)。堆栈溢出时,仅链接的答案不正确。请在回答中直接提供你博客上的一些基本信息。(因此链接可用于获取更多信息)。