我想知道是否可以更改内核,例如将 Fedora 的 Linux 内核替换为 FreeBSD 的内核。
现在,已经存在了Debian GNU/kFreeBSD。我可以定制一个 Linux 发行版来包含 BSD 内核吗?
答案1
不,每个内核都以自己的方式实现自己的功能。有大量的 POSIX 兼容性,但一旦摆脱了这种兼容性,可执行文件就需要使用已经就位的内核机制进行编译。许多项目包含的源代码只有在您明确表示要针对 FreeBSD 或 Linux 进行编译时才会被编译。 kFreeBSD 本质上就是这样。这些工具支持 FreeBSD 内核,但必须针对该内核进行编译。
例如,如果您尝试epoll_create
在 FreeBSD 上使用,事情将无法按预期工作。
当然,您可以从 BSD 系统 LFS 风格交叉编译这些工具,但这可能需要很长时间。不仅仅是编译一个新内核那么简单。
答案2
FreeBSD 不使用 Linux 内核 - 顾名思义,它使用 BSD 内核。
可以用不同的 Linux 内核(您自己构建的内核或从发行版提取的内核)替换 Linux 内核。请注意,您的发行版中的用户空间程序可能依赖于要编译的特定内核功能,如果您在没有这些功能的内核上运行它们,则可能无法正常工作。例如,基于 systemd 的发行版将需要内核中的 cgroup。
对于您提到的示例,是的,可以为 Linux 内核或 BSD 内核构建 GNU 发行版。在许多情况下,为两者编译的程序之间存在编译时差异(例如#ifdef
),即使内核宣传相同的 ABI。至少,低级库(例如 C 运行时库)必须适应不同的内核 ABI。
答案3
内核是独立的部分,在操作系统更新过程中会定期更换。一些专有驱动程序(NVIDIA 等)具有安装脚本,可以将驱动程序修补到内核源代码中,构建该内核并用它替换当前内核。因此,如果您开发自己的内核版本,可以执行所有必需的功能,那么将其植入并保留操作系统的其余部分应该不是一个大问题。然而,大多数情况下,这样的“新内核”源自最近的官方版本。
Solaris 内核在某种程度上已经通过这种方式移植,产生了 OpenSolaris 运行的 Gnome 环境。
不过,安装完全不同的内核需要付出巨大的努力,因为必须桥接接口。这可能需要大量的 C 编程,而不仅仅是构建脚本。