Ich wollte wissen, ob es möglich ist, den Kernel zu ändern, indem beispielsweise der Linux-Kernel von Fedora durch den von FreeBSD ersetzt wird.
Nun gab es bereits Debian GNU / kFreeBSD . Kann ich eine Linux-Distribution so anpassen, dass sie einen BSD-Kernel enthält?
Antworten:
Nein, jeder Kernel implementiert seine eigenen Funktionen auf seine Weise. Es gibt eine große Anzahl von POSIX-Kompatibilitäten, aber sobald Sie sich davon verabschiedet haben, müssen die ausführbaren Dateien mit den bereits vorhandenen Kernelmechanismen kompiliert werden. Viele Projekte enthalten Quellcode, der nur kompiliert wird, wenn Sie ausdrücklich angeben, dass Sie für FreeBSD oder Linux kompilieren. Genau das ist kFreeBSD. Die Tools unterstützen den FreeBSD-Kernel, müssen aber dafür kompiliert werden.
Wenn Sie beispielsweise versuchen,
epoll_create
FreeBSD zu verwenden, funktionieren die Dinge nicht wie erwartet.Natürlich können Sie die Tools aus einem BSD-System im LFS-Stil übergreifend kompilieren, aber das wird wahrscheinlich ewig dauern. Nicht so einfach wie das Kompilieren eines neuen Kernels.
quelle
FreeBSD verwendet keinen Linux-Kernel - wie der Name schon sagt, verwendet es einen BSD-Kernel.
Es ist möglich, einen Linux-Kernel durch einen anderen Linux-Kernel zu ersetzen (entweder einen selbst erstellten oder einen aus einer Distribution extrahierten). Beachten Sie, dass die User-Space-Programme in Ihrer Distribution möglicherweise von bestimmten Kernel-Features abhängen, die kompiliert werden sollen, und möglicherweise nicht ordnungsgemäß funktionieren, wenn Sie sie auf einem Kernel ausführen, der ohne diese Features erstellt wurde. Beispielsweise erfordert eine systemd-basierte Distribution cgroups im Kernel.
Für das von Ihnen erwähnte Beispiel kann eine GNU-Distribution für einen Linux-Kernel oder einen BSD-Kernel erstellt werden. In vielen Fällen gibt es Kompilierungszeitunterschiede (z. B.
#ifdef
) zwischen Programmen, die für beide kompiliert wurden, auch wenn die Kernel dieselbe ABI ankündigen. Die Low-Level-Bibliotheken wie die C-Runtime-Bibliothek müssen mindestens die unterschiedlichen Kernel-ABIs aufnehmen.quelle
Der Kernel ist der unabhängige Teil und wird während der Betriebssystemaktualisierungen routinemäßig ersetzt. Einige proprietäre Treiber (NVIDIA usw.) verfügen über Installationsskripts, mit denen der Treiber in die Kernelquelle gepatcht, dieser Kernel erstellt und der aktuelle Kernel durch diesen ersetzt wird. Wenn Sie also Ihre eigene Kernel-Version entwickeln, die alle erforderlichen Funktionen ausführen kann, sollte es kein großes Problem sein, sie einzubauen und den Rest des Betriebssystems zu belassen. Am häufigsten wird ein solcher "neuer Kernel" jedoch aus der jüngsten offiziellen Version abgeleitet.
Der Solaris-Kernel wurde in gewissem Maße so portiert, dass OpenSolaris Gnome-Umgebung ausführt.
Das Setzen des völlig anderen Kernels ist jedoch ein erheblicher Aufwand, da Schnittstellen überbrückt werden müssen. Dies erfordert wahrscheinlich viel C-Programmierung und bezieht sich nicht nur auf das Build-Skript.
quelle