Ist es möglich, den Kernel in einem UNIX / Linux-System zu ändern?

16

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?

Schalter
quelle
3
MacOSX ist ein vollständig POSIX-kompatibler BSD-basierter Kernel. Und im Gegensatz zu Linux, das behauptet, kein Unix-System zu sein, ist OSX ein Unix-System (es ist von The Open Group zertifiziert, dem die Marke Unix gehört). Sie können Linux-Apps nicht auf Mac ausführen und Sie können Mac-Apps nicht auf Linux ausführen, obwohl beide auf Intel-CPUs ausgeführt werden (technisch gesehen AMD64)
slebetman

Antworten:

21

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_createFreeBSD 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.

Bratchley
quelle
1
Ich würde gerne Ihre Meinung zum MOOL-Kernel hören , es gibt bereits ein Betriebssystem, das es anpasst, BOSS linux.
Sri Harsha Chilakapati
Es wird interessant sein zu sehen, was dabei herauskommt, aber ich habe nicht genug hineingeschaut, um etwas Kluges darüber zu sagen.
Bratchley
1
Wenn ich also ein GNU-Userland-basiertes BSD-System erstellen möchte, muss ich die gesamte GNU-Software für den BSD-Kernel neu kompilieren. Hab ich recht?
Schalten Sie
1
Alles, was Linux-Ismen benutzt, das wäre so ziemlich alles. Könnte einfacher sein, mit kFreeBSD zu beginnen und von dort aus zu gehen.
Bratchley
16

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.

Toby Speight
quelle
Erhöhen Sie zum Beispiel die Änderung der C-Laufzeitbibliothek.
Joshua
2

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.

h22
quelle