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.
Antworten:
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?
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ß :))
quelle
Ü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
quelle
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:
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.
quelle
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!
quelle