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


16

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

现在,已经存在Debian GNU / kFreeBSD了。我可以定制包含BSD内核的Linux发行版吗?


3
MacOSX是完全符合POSIX的BSD内核。与Linux声称不是Unix系统不同,OSX是Unix系统(它由拥有Unix商标的The Open Group认证)。您不能在Mac上运行Linux应用程序,也不能在Linux上运行Mac应用程序,即使它们都在Intel CPU(从技术上来说是AMD64)上运行
slebetman 2016年

Answers:


21

不,每个内核都以自己的方式实现自己的功能。POSIX具有很大的兼容性,但是一旦您发现了这些问题,就需要使用适当的内核机制来编译可执行文件。许多项目包含的源代码只有在您明确表示要针对FreeBSD或Linux进行编译时才进行编译。本质上就是kFreeBSD。这些工具支持FreeBSD内核,但必须对其进行编译。

例如,如果您尝试epoll_create在FreeBSD 上使用,将无法按预期运行。

当然,您可以从LSD风格的BSD系统交叉编译这些工具,但这可能要花很长时间。不像编译新内核那样简单。


1
我想听听您对MOOL内核看法,已经有一个适用于它的OS,即BOSS linux。
Sri Harsha Chilakapati

看到它的结果会很有趣,但是我还没有研究到足够多的东西来谈论它。
布拉奇利'16

1
因此,您的意思是,如果我想创建一个基于GNU用户区的BSD系统,则必须为BSD内核重新编译所有GNU软件。我对么?
切换

1
任何利用Linux-ism的东西都差不多。从kFreeBSD开始并从那里开始可能会更容易。
布拉奇利'16

16

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

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

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


提一下C运行时库的更改。
约书亚

2

内核是独立的部分,在操作系统更新期间会定期更换。一些专有的驱动程序(NVIDIA等)具有将驱动程序修补到内核源代码,构建该内核并用其替换当前内核的安装脚本。因此,如果您开发自己的内核版本以执行所有必需的功能,则将其植入并保留其余的操作系统应该不是什么大问题。但是,这种“新内核”通常来自最新的正式版本。

Solaris内核已在某种程度上以这种方式移植,从而导致OpenSolaris在Gnome环境中运行。

尽管如此,放置完全不同的内核仍是一项巨大的工作,因为必须桥接接口。这可能需要大量的C编程,而不仅仅是构建脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.