Wie fange ich an, den Linux-Quellcode zu ändern, um ein benutzerdefiniertes Betriebssystem zu erstellen? [geschlossen]

14

Ich habe gehört, dass wir Linux (sagen wir Ubuntu) anpassen können, indem wir seinen Quellcode ändern und ein völlig neues Betriebssystem erstellen. Ich habe den Quellcode des Linux-Kernels von der Website www.kernel.org heruntergeladen. Aber wenn ich es sehe, kann ich nichts verstehen, es gibt so viele Verzeichnisse, Dateien in Dateien (da ich denke, dass es ein einziges großes Programm geben würde). Ich möchte dies als College-Projekt tun und auch einen Beitrag zu Linux leisten, indem ich die notwendigen Änderungen daran vornehme. Nachdem sie diese Frage auf einigen Seiten gestellt hatten, sagten sie, dass der Linux-Quellcode sehr umfangreich ist. Sie können versuchen, Minix. Jetzt bin ich sehr verwirrt.

Bitte geben Sie mir Vorschläge mit Einzelheiten darüber, wie ich diese Reise beginnen soll (Änderung des Quellcodes, um Linux anzupassen), mit den erforderlichen Schritten, zusammen mit einigen Büchern für Anfänger.

Dubex
quelle
Was ist dein Ziel? Wie möchten Sie dazu beitragen?
Spidey
Um mein eigenes Betriebssystem zu erstellen, indem ich seinen (Linux-) Quellcode
ändere
Der Kernel mit dem Namen Linux ist nicht Gnu / Linux (Ubuntu, Debian, RedHat, Suse usw. distrowatch.com ). Die meisten Leute verwenden jedoch verwirrenderweise den Begriff Linux, um GNU / Linux + X11 + zu bedeuten. Linux ist jedoch nur einer der Kernel, die mit GNU und anderen Betriebssystemen verwendet werden können. Wenn Sie Ubuntu oder ähnliches ändern möchten, ist dies nicht dasselbe wie das Ändern des Kernels mit dem Namen Linux.
Strg-Alt-Delor

Antworten:

29

Willkommen bei unix.stackexchange.com!

Es gibt keine einfache Antwort auf Ihre Frage, und weitaus bessere Leute als ich haben ganze Bücher zum Thema Linux-Kernel und Betriebssysteme im Allgemeinen geschrieben.

Über den Umfang des Projekts: Das Schreiben eines Betriebssystems ist keine einfache Aufgabe! Selbst ein bewusst minimales Betriebssystem wie Minix ist eine ziemlich komplexe Sache! Um Ihnen eine Vorstellung von Linux zu geben, denken Sie an die C-Programme, die Sie bisher geschrieben haben. Die durchschnittliche Studienleistung beträgt in der Regel höchstens einige tausend C-Zeilen. Ich glaube, mein letztes Projektjahr umfasste ungefähr 30–35.000 Zeilen C ++. Der Linux-Kernel besteht aus ungefähr 13 Millionen Zeilen C-Code.

Warum ist alles in separaten Dateien? Aus logistischen und praktischen Gründen werden umfangreiche Projekte in separaten Dateien gespeichert. Laden Sie einfach eine 13.000.000-Zeilen-Datei in einen Editor! Bevor Sie ein großes Projekt wie Linux in Angriff nehmen, sollten Sie Ihre C-Kenntnisse auf jeden Fall so weit verbessern, dass sich die Frage „Warum mehrere Dateien?“ Von selbst beantwortet. Sie sollten auch in der Lage sein, C-Code zu lesen und nicht nur zu schreiben. (schwieriger als es zunächst scheint)

Sie sollten auf jeden Fall sehr gut mit C umgehen können. Der Kernel wird von Tausenden von Leuten gewartet, und Sie werden aufgefordert, die persönlichen C-Idiome jedes einzelnen von ihnen zu verstehen (selbstverständlich im Rahmen der ziemlich strengen Kernel-Codierungsstandards, aber immer noch - jeder hat ihren eigenen Problemlösungsstil).

Stellen Sie sicher, dass Sie die Betriebssysteme verstehen, nachdem Sie Ihr C fu erhalten haben. Dies wird Ihnen helfen, den Code zu verstehen. Nicht alles von Linux ist wesentlich. Der eigentliche Kernel ist ziemlich klein! Was ist das für eine Blähung?

  • Tausende Hardwaretreiber für verschiedene Geräte.
  • Abstraktionsschichten für verschiedene Geräteklassen, um APIs und das Schreiben von Treibern zu vereinfachen. ZB haben wir das VFS für Dateisysteme, die Event-Ebene für Eingabegeräte und so weiter.
  • Erschreckende Mengen an bedingt kompiliertem Code und Dateien, die den verschiedenen Architekturen gerecht werden, auf denen Linux ausgeführt wird (nicht jeder Linux-Computer ist ein Intel-PC, und einige unterscheiden sich unglaublich von den Erwartungen). Der Kernel muss sich mit diesen Unterschieden auseinandersetzen, und das bedeutet mehr Code.

Ein Problem, das Sie sofort feststellen werden, ist, dass sich diese Komponenten nicht so einfach trennen, austauschen und wieder zusammenstecken lassen. Es gibt zahlreiche Zusammenhänge. Kurz gesagt, es ist schwierig, Teile des Kernels zu ändern.

Der Grund, warum die Leute Minix für Sie vorgeschlagen haben, ist einfach: Es ist ein vollständiges Betriebssystem, aber es wird nicht durch die Anforderungen eines Systems belastet, das so komplex ist wie Linux. Der Code ist klein, bietet aber dennoch die volle Funktionalität. Immerhin waren die ersten Versionen von Linux von Minix inspiriert.

Sicher, Minix hat heutzutage weniger Hardware-Support. Na und? Das ist ein Segen! Moderne Computer lassen sich sehr gut virtualisieren. Nutzen Sie dies zu Ihrem Vorteil: Eine VM zum Ausführen von Minix ist so leicht, dass die Entwicklung zum Kinderspiel wird.

Wenn Ihr Projekt ein Betriebssystem erstellen soll, können Sie es schlechter machen, als mit dem Studium von Minix zu beginnen. Vielleicht möchten Sie auch das Buch kaufen und lesen, das Minix zusammen mit " Andrew Tanenbaums modernen Betriebssystemen " geschrieben hat.

Sie sollten auch Ihre Ziele festlegen und Ihre Begriffe genau definieren . Wenn Sie Microsoft als Betriebssystem definieren (ein Betriebssystem mit einer grafischen Benutzeroberfläche und einer vollständigen Softwaresuite), haben Sie möglicherweise ein sehr langes Projekt vor sich! Hunderttausende Menschen haben seit den 1960er Jahren daran gearbeitet, uns dorthin zu bringen, wo wir jetzt sind.

Erinnern Sie sich schließlich an den Schlachtruf des Informatikers: ' Niemals das Rad neu erfinden! '(Ausnahmen machen wir natürlich gerne beim Lernen. Und zum Spaß :))

Alexios
quelle
1
würde [link] (www.linuxfromscratch.org) meinen Traum erfüllen ... danke für das Interesse an meiner Frage
Dubex
LFS ist fantastisch, um zu lernen, wie der Benutzerbereich eines POSIX-Systems funktioniert. Soweit ich weiß, ist es Linux-spezifisch, es geht also nicht darum, den Kernel in eine ungewöhnliche Richtung zu ändern (wie Sie es bei der Erstellung Ihres eigenen Kernels tun würden). Dies ist jedoch nicht der Fall, da der Benutzerbereich inkompatibel ist und portiert oder neu implementiert werden muss, sobald sich Ihr Kernel von POSIX entfernt.
Alexios
Entschuldigung für das Missverständnis ... Aber ich wollte nicht, dass ich meinen eigenen Kernel mache (da ich nicht sehr talentiert bin :)). Ich möchte Änderungen am Quellcode vornehmen, die sich von anderen unterscheiden können und so aussehen, als ob dies meine eigene Kreativität ist. Zum Beispiel: Ich möchte eine Art Animation mit Ton (den ich gemacht habe) auf dem Bildschirm, wenn Linux (sagen wir Ubuntu) mit einer installierten Spracherkennungssoftware bootet. Nochmals vielen Dank.
Dubex
1
In diesem Fall erstellen Sie Ihre eigene Linux-Distribution und nicht ein anderes Betriebssystem. LFS ist dafür das richtige Werkzeug. Viel Glück!
Alexios
1
@ Alexios, sehr gute und beschreibende Antwort, danke.
0xAF
7

Überprüfen Sie das Linux From Scratch- Projekt. Wie der Name schon sagt, enthält es alle Details, die zum Erstellen Ihrer eigenen Linux-Distribution erforderlich sind

matcheek
quelle
4

Ich denke, das erste, was Sie definieren müssen, ist "Was sind die Änderungen, die Sie an das Betriebssystem bringen möchten". Bis Sie dies entscheiden, werden Sie nicht wirklich weiterkommen. Es gibt keinen "einen Weg" des Lernens.

Darüber hinaus denke ich, dass Sie besser definieren sollten, was Sie unter Betriebssystem verstehen. Ein großer Teil (ein Großteil) des Ubuntu-Quellcodes befindet sich außerhalb von Linux. Linux ist nur der Kernel ( in akademischen Kreisen wird es manchmal als Betriebssystem bezeichnet , daher die Verwirrung) und hat daher die "einfache" Aufgabe:

  • Ressourcen verwalten.
  • Kommunikation mit der Hardware.

Jede andere Änderung würde auf einer anderen Ebene erfolgen, unabhängig davon, ob es sich um die wichtigsten Userland-Dienstprogramme (häufig als Utils bezeichnet ), die GUI, die grundlegenden Apps einer Distribution usw. handelt.

Wenn Sie jedoch immer noch lernen möchten, wie man den Kernel hackt, sollten Sie mit dieser Frage beginnen , der Frage , die auf dieser Site am häufigsten gestellt wird.

rahmu
quelle
Es tut mir leid, dass ich nicht so genau nachgefragt habe ... aber in Wirklichkeit habe ich keine Ahnung von all dem im Detail. Eigentlich möchte ich eine Art Animation (mit Sound) auf dem Bildschirm, wenn Linux (sagen wir Ubuntu) bootet. Bitte geben Sie mir eine Vorstellung davon, wie ich all diese Felder erkunden und wie ich mich in einem bestimmten Bereich weiterentwickeln kann (sagen wir GUI mit der Kommunikation mit der Hardware) ) ...
Dubex
@dubex beginne mit plymouth und schaue in Linux-Bibliotheken nach, um Sound abzuspielen . SDL_mixer könnte einfach sein.
Sourcejedi
2

Dies mag ein bisschen nebensächlich sein, aber wenn Sie etwas über den Linux-Kernel lernen und damit beginnen möchten, ihn zu entwickeln, sollten Sie sich wirklich mit Kernel-Neulingen befassen . Es ist eine Seite, die Ihnen Einblick in die Kernelmechanik gibt (wie Alexios es in hervorragender Weise getan hat), aber Sie können auch eine kleine Aufgabe auswählen (ein sogenannter Kernel-Hausmeister). Es ist eine großartige Möglichkeit zu lernen und ich kann es nur empfehlen!

Tommy
quelle