是否可以更改 UNIX/Linux 系统中的内核?

16 linux fedora kernel gnu linux-kernel

我想知道是否可以更改内核,例如,将 Fedora 的 Linux 内核替换为 FreeBSD 的内核。

现在,已经存在Debian GNU/kFreeBSD。我是否可以自定义 Linux 发行版以包含 BSD 内核?

Bra*_*ley 20

不,每个内核都以自己的方式实现自己的功能。有大量的 POSIX 兼容性,但是一旦您摆脱了这种兼容性,就需要使用已经到位的内核机制来编译可执行文件。许多项目包含的源代码只有在您明确说明您正在为 FreeBSD 或 Linux 编译时才会被编译。这就是 kFreeBSD 的本质。这些工具支持 FreeBSD 内核,但必须为其编译。

例如,如果您尝试epoll_create在 FreeBSD上使用,事情将不会按预期工作。

当然,您可以从 BSD 系统 LFS 样式交叉编译工具,但这可能需要永远。不像编译一个新内核那么简单。

  • 任何利用 Linux 主义的东西几乎都是一切。从 kFreeBSD 开始并从那里开始可能会更容易。 (2认同)

Tob*_*ght 16

FreeBSD 不使用 Linux 内核——顾名思义,它使用 BSD 内核。

可以用不同的 Linux 内核(您自己构建的内核或从发行版中提取的内核)替换 Linux 内核。请注意,您的发行版中的用户空间程序可能取决于要编译的特定内核功能,如果您在没有这些功能的内核上运行它们,则可能无法正常工作。例如,基于 systemd 的发行版将需要内核中的 cgroup。

对于您提到的示例,是的,可以为 Linux 内核或 BSD 内核构建 GNU 发行版。在许多情况下,为两者编译的#ifdef程序之间存在编译时差异(例如),即使内核通告相同的 ABI。至少,C 运行时库等低级库必须适应不同的内核 ABI。