Wie beginne ich mit der Änderung des Linux-Quellcodes, um ein benutzerdefiniertes Betriebssystem zu erstellen?

Wie beginne ich mit der Änderung des Linux-Quellcodes, um ein benutzerdefiniertes Betriebssystem zu erstellen?

Ich habe gehört, dass wir Linux (z. B. Ubuntu) nach Belieben anpassen können, indem wir den Quellcode ändern und ein ganz neues Betriebssystem erstellen können. Ich habe den Quellcode des Linux-Kernels von der Website www.kernel.org heruntergeladen. Aber wenn ich ihn mir ansehe, verstehe ich nichts, es gibt so viele Verzeichnisse, Dateien in Dateien (als ob es ein einziges großes Programm wäre). Ich möchte dies als Hochschulprojekt machen und auch zu Linux beitragen, indem ich die notwendigen Änderungen daran vornehme. Aber nachdem ich diese Frage auf einigen Websites gestellt hatte, sagten sie, dass der Linux-Quellcode sehr umfangreich sei. Sie können es mit Minix versuchen. Jetzt bin ich sehr verwirrt.

Geben Sie mir bitte detaillierte Vorschläge dazu, wie ich diese Reise (Ändern des Quellcodes zum Anpassen von Linux) beginnen soll. Geben Sie mir die erforderlichen Schritte an und stellen Sie mir einige Bücher für Anfänger zur Verfügung.

Antwort1

Willkommen bei unix.stackexchange.com!

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

Zum Umfang des Projekts: Ein Betriebssystem zu schreiben ist keine einfache Aufgabe! Sogar ein bewusst minimalistisches 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. Ein durchschnittliches Universitätsstudium umfasst höchstens ein paar tausend Zeilen C. Ich glaube, mein Abschlussprojekt umfasste etwa 30.000–35.000 Zeilen C++. Der Linux-Kernel besteht aus etwa 13.000.000 Zeilen C-Code.

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

Sie sollten auf jeden Fall sehr gute C-Kenntnisse besitzen. Der Kernel wird von Tausenden von Leuten gepflegt und Sie müssen die persönlichen C-Ausdrücke jedes einzelnen von ihnen verstehen (zugegeben, im Rahmen der ziemlich strengen Kernel-Codierungsstandards, aber trotzdem – jeder hat seinen eigenen Problemlösungsstil).

Nachdem Sie Ihr C-Kenntnis erworben haben, sollten Sie sich mit Betriebssystemen auskennen. Das wird Ihnen helfen, den Code zu verstehen. Nicht alles an Linux ist essentiell. Der Kernel selbst ist ziemlich klein! Was für ein aufgeblähter Kernel das ist:

  • Tausende Hardwaretreiber für verschiedene Geräte.
  • Abstraktionsschichten für verschiedene Geräteklassen, um das Schreiben von APIs und Treibern zu vereinfachen. Wir haben beispielsweise das VFS für Dateisysteme, die Ereignisschicht für Eingabegeräte usw.
  • Schockierende Mengen an bedingt kompiliertem Code und Dateien für die verschiedenen Architekturen, auf denen Linux läuft (nicht jede Linux-Maschine ist ein Intel-PC, und einige sindunglaublichanders als Sie vielleicht erwarten). Der Kernel muss mit diesen Unterschieden umgehen, und das bedeutet mehr Code.

Ein Problem, das Ihnen sofort auffällt, ist, dass sich diese Komponenten nicht so einfach trennen, austauschen und wieder zusammenstecken lassen. Es gibt zahlreiche Wechselwirkungen. Kurz gesagt, das Ändern von Teilen des Kernels ist schwierig.

Der Grund, warum Ihnen Minix vorgeschlagen wurde, ist einfach: Es ist ein vollwertiges Betriebssystem, das jedoch nicht mit den Anforderungen eines so komplexen Systems wie Linux belastet ist. Der Code ist klein, bietet aber dennoch die volle Funktionalität. Schließlich wurden die ersten Versionen von Linux von Minix inspiriert.

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

Wenn Ihr Projekt darin besteht, ein Betriebssystem zu entwickeln, könnten Sie mit dem Studium von Minix beginnen. Vielleicht möchten Sie auch das Begleitbuch zu Minix kaufen und lesen:Moderne Betriebssysteme von Andrew Tanenbaum'.

Sie sollten auch Ihre Ziele festlegen und Ihre Bedingungen definierengenau. Wenn Ihre eigene Definition eines Betriebssystems die von Microsoft ist (ein Betriebssystem mit einer grafischen Benutzeroberfläche und einer vollständigen Softwaresuite), steht Ihnen möglicherweise ein sehr langwieriges Projekt bevor! Hunderttausende von Menschen haben seit den 1960er Jahren daran gearbeitet, uns dorthin zu bringen, wo wir heute sind.

Denken Sie zum Schluss noch an den Schlachtruf der Informatiker:Das Rad nie neu erfinden!' (wir machen natürlich gerne Ausnahmen, wenn es ums Lernen geht. Und zum Spaß :) )

Antwort2

ÜberprüfenLinux von Grund aufProjekt. Wie der Name schon sagt, enthält es alle Details, die Sie zum Erstellen Ihrer eigenen Linux-Distribution benötigen

Antwort3

Ich denke, das erste, was Sie definieren müssen, ist, „welche Änderungen Sie am Betriebssystem vornehmen möchten“. Solange Sie das nicht entschieden haben, werden Sie nicht wirklich weiterkommen. Es gibt keinen „einen Weg“ des Lernens.

Außerdem denke ich, dass Sie besser definieren sollten, was Sie mit OS meinen. Ein großer Teil (ein Großteil) des Ubuntu-Quellcodes liegt außerhalb von Linux. Linux ist nurder Kernel, (manchmal auch bezeichnet alsBetriebssystem, vor allem in akademischen Kreisen, daher die Verwirrung), und daher hat es die"einfach"Aufgabe von:

  • Ressourcen verwalten.
  • Kommunikation mit der Hardware.

Jede andere Änderung würde auf einer anderen Ebene stattfinden, sei es bei den zentralen Userland-Dienstprogrammen (oft alsDienstprogramme), die GUI, die grundlegenden Apps einer Distribution usw.

Wenn Sie jedoch immer noch lernen möchten, wie man den Kernel hackt, sollten Sie vielleicht mit beginnendiese Frage, die Frage mit den höchsten Stimmen auf dieser Site ;)

Antwort4

Dies ist vielleicht ein wenig nebensächlich, aber wenn Sie den Linux-Kernel kennenlernen und mit der Entwicklung beginnen möchten, sollten Sie sich unbedingt Folgendes ansehen:Kernel-Neulinge. Es ist eine Site, die Ihnen Einblicke in die Kernel-Mechanik gibt (wie Alexios es auf hervorragende Weise getan hat), Sie aber auch eine kleine Aufgabe auswählen lässt, die Sie erledigen möchten (ein sogenannter Kernel-Hausmeister). Es ist eine großartige Möglichkeit zum Lernen und ich kann es nur empfehlen!

verwandte Informationen