1. Eine Linux-Distribution (z. B. Debian)

1. Eine Linux-Distribution (z. B. Debian)

Ich habe den Linux-Kernel kompiliert, indem ich ihn von kernel.org heruntergeladen, auf meinen Desktop gelegt und das Terminal geöffnet habe. Ich bin in den Ordner linux-3.2.13 gewechselt und habe eingegeben mr proper.
Dann verwende ich make menuconfigzum Konfigurieren meiner .config-Datei. Nachdem ich damit fertig bin und sie gespeichert habe, gebe ich ein makeund das Terminal beginnt mit dem Kompilieren der Dateien. Nach 3 Stunden Kompilieren fragte ich mich, ob ich etwas falsch gemacht hatte.

Meine Fragen sind:

  1. Habe ich etwas falsch gemacht?
  2. Wenn nicht, was soll ich als nächstes tun?
  3. Was wird die Ausgabe sein (z. B. .bin, .elf)?
  4. Mein ultimatives Ziel ist es, ein Betriebssystem zu erstellen, das ich auf eine CD brennen, auf einem anderen Computer installieren und ausführen kann (nichtein Ubuntu-Betriebssystem mit einem anderen Kernel).

Antwort1

Habe ich etwas falsch gemacht?

Sieht nicht so aus. Das Kompilieren eines aktuellen Kernels ist sehr ressourcenintensiv. Wenn Ihre CPU nicht auf dem neuesten Stand ist und Sie nicht viel RAM haben, kann es dauernsehrlang.
Stellen Sie sicher, dass Sie nur die Module/Funktionen auswählen, die Sie wirklich benötigen, und wenn Sie eine Multi-Core-/Thread-Maschine mit etwas RAM haben, verwenden Sie die -jXOption, makedamit der Build parallel ausgeführt werden kann. zB

make -j4

wird für den Großteil des Builds vier Kerne verwenden.

Was wird das Ergebnis sein?

Es handelt sich um ein komprimiertes Kernel-Image. Es ist weder eine ELF-Datei noch eine ausführbare Datei im herkömmlichen Sinne. Das Format ist für den Bootloader Ihrer Plattform geeignet.

Was soll ich als nächstes tun?

Hängt davon ab, was Sie vorhaben ... (SieheHierfür ein einfaches HOWTO zur Installation der Module und des Kernel-Images, vorausgesetzt, Sie verwenden Grub. Es gibt viele andere, die mit einer schnellen Suche verfügbar sind, und Sie sollten besser in der Dokumentation Ihrer aktuellen Distribution nachsehen, wenn Sie tatsächlich vorhaben, eine Mainstream-Distribution mit Ihrem neuen Kernel auszuführen - es gibt Funktionsanforderungen und möglicherweise initrd-Besonderheiten, die berücksichtigt werden müssen.)

[Mein Ziel ist es, mein eigenes Betriebssystem zu bauen]

Ich fürchte, davon sind Sie weit entfernt. Ein Betriebssystem zu erstellen ist eine sehr, sehr komplexe Aufgabe – und den Kernel zu erstellen ist einer der ganz einfachen Teile.

Ich würde vorschlagen, Sie gehen zuLinux von Grund aufund lesen Sie das aktuelle stabile "Buch". Schauen Sie auch aufAbonnieren, und durchsuchen Sie die Kategorie „Quellcodebasiert“ der Distributionen. Einige davon könnten für Sie von Interesse sein.

Antwort2

Ich habe lange Kommentare gepostet und dachte, es wäre vielleicht das Beste, die Dinge als Antwort zu posten, weil die Box größer ist und ich so viel herumschwafeln kann, wie ich will. :) Ich hoffe, Sie verzeihen mir mein wirres Geschwafel.

Außerdem möchte ich Sie jetzt schon warnen: Ich bin ein richtiger Mistkerl und werde Ihnen ein wenig die Flügel stutzen.

Als Erstes müssen Sie entscheiden: Wie gut sind Ihre Programmierkenntnisse? Ohne gute Programmierkenntnisse und ein gutes Verständnis von Hardware können Sie kein eigenes Betriebssystem schreiben.

Als Zweites müssen Sie Folgendes entscheiden:

  1. Erstellen Sie eine Linux-Distribution? (z. B. Debian, Ubuntu, Red Hat)
  2. Erstellen Sie ein Linux-basiertes Betriebssystem mit einer anderen Laufzeit? (z. B. Android, Maemo)
  3. Schreiben Sie ein Betriebssystem von Grund auf neu? (z. B. VMS, CP/M, RT-11, Amoeba, Plan/9)

Bevor Sie diese Fragen beantworten, sollten Sie noch einmal überprüfen, ob Sie die Bedingungen verstanden haben, damit Sie wissen, was Sie verdienen.

1. Eine Linux-Distribution (z. B. Debian)

Wenn Sie nur eine weitere Linux-Distribution erstellen möchten, ist das Kompilieren des Kernels Ihre geringste Sorge. Der Kernel kompiliert sich praktisch von selbst, wenn genügend Zeit und ein ausreichend großer Computer vorhanden sind.

Hier ist einArtikel, der einige Aspekte der Erstellung einer Linux-Distribution bespricht.

Warum das schwieriger ist, als Sie vielleicht denken: Je mehr Funktionen Sie Ihrer Distribution hinzufügen möchten, desto schwieriger wird es, Ihre Distribution richtig zu erstellen. Sie müssen sich entscheiden, ob Sie das Rad neu erfinden (Ihren eigenen Paketmanager erstellen) oder ein vorhandenes Rad verwenden (RPM? APT? Ports?). In beiden Fällen werden Sie monatelang mühselige Arbeit damit verbringen, gegenseitig inkompatible Pakete abzugleichen, zu kompilieren, zu überprüfen, ob die Dinge auf verschiedenen Computern mit unterschiedlichen CPUs (nicht nur Intel oder AMD) funktionieren, usw.

Je nach Umfang müssen Sie möglicherweise die Arbeit von Tausenden von Menschen selbst wiederholen. Würden Sie dabei viel lernen? Auf jeden Fall! Aber Sie würden auch viel lernen, wenn Sie eine vorhandene Linux-Distribution ausführen und gelegentlich einige Pakete selbst kompilieren, um zu sehen, wie die Dinge funktionieren. Warum sollten Sie libc und Hunderte anderer Bibliotheken erstellen, wenn Sie nur sehen möchten, wie ein X-Server erstellt wird?

Stellen Sie sich das so vor: Wenn Sie lernen möchten, wie man einen PC zusammenbaut, würden Sie mit einem Eimer voller Transistoren und einem Lötkolben beginnen oder sich PC-Komponenten und etwas Dokumentation besorgen?

2. Ein Linux-basiertes Betriebssystem (z. B. Android)

Es gibt eine ganze Reihe Linux-basierter Betriebssysteme, deren Laufzeiten sich erheblich bis drastisch von denen von POSIX unterscheiden. Maemo, Meego, Android und andere (meist eingebettete) Betriebssysteme fallen mir da ein.

Der Vorteil dabei ist, dass Sie keinen eigenen Kernel schreiben müssen. Der Nachteil dabei ist, dass Sie nicht nur Ihre eigene Distribution entwerfen müssen, sondern auch die meisten Pakete selbst erstellen müssen. Sie dachten, das Kompilieren gccwäre libceine Qual? Versuchen Sie, Ihren eigenen ANSI-C-kompatiblen C-Compiler zu schreiben.Undein kompletter Software-Stack von Grund auf. Viele Jahre des Schreibens lästiger kleiner Funktionen (wahrscheinlich in Assembler), die nur ganz, ganz wenig Befriedigung bieten. Sie müssen auch die meisten internen Vorgänge des Linux-Kernels lernen und wie er mit dem Userspace kommuniziert, denn diese Schnittstelle ist das, worauf Sie aufbauen werden. Am Ende sollten Sie die meisten Syscall-Nummern auswendig kennen. :)

Würden Sie viel lernen? Auf jeden Fall! Mehr, als Sie je für möglich gehalten hätten. Wird es frustrierend und nervig sein? Oh ja. Es gibt einen Grund, warum Android nicht von einem einzelnen Typen mit einem Laptop in seiner Freizeit entwickelt wurde. Es gccwurde nicht einmal auf diese Weise entwickelt.

3. Ein Betriebssystem von Grund auf

Hier beginnen Sie mit einem Assembler- und C-Compiler und schreiben Ihren eigenen Kernel – sofern Ihr Betriebssystem überhaupt einen Kernel hat. Das ist nicht immer der Fall. Laden Sie alle Datenblätter herunter, die Sie für Ihre Hardware finden können, und schon kann es losgehen. Sobald Sie einen Basiskernel zum Laufen gebracht haben, können Sie sich eine Laufzeitumgebung ansehen. Sie können Ihre eigene Laufzeitumgebung schreiben oder sicherstellen, dass Ihr Kernel teilweise oder vollständig POSIX-kompatibel ist, und dann steht Ihnen eine vollständige GNU-Laufzeitumgebung zur Verfügung. Sie müssen „nur“ die erste Ebene von Bibliotheken erstellen und sie gccauf Ihrem neuen Betriebssystem zum Laufen bringen.

Ist das lohnend? Erstaunlicherweise. Wird es schwer sein? Wenn Ihnen die Namen Donald Knuth und Andrew Tanenbaum nichts sagen, sollten Sie es sich vielleicht noch einmal überlegen. Sie werden viel theoretische Informatik studieren müssen. Es ist unglaublich viel Theorie nötig, um ein Betriebssystem wirklich von Grund auf neu zu entwickeln. Leider sind moderne Systeme auch unglaublich langweilig.

Früher musste man einfach ein ROM mit einem JMP-Befehl an der richtigen Stelle brennen, es sockeln, einschalten und fertig. Moderne Systeme erfordern viel Arbeit, nur um einen CPU-Kern zum Laufen zu bringen, den Speicher einzurichten, ein Eingabegerät aufzulisten und ein Ausgabegerät zu starten. Zu jeder dieser Aufgaben gibt es ganze Bücher (ich habe ein Buch über dieOriginalVGA, das sind über 1.000 Seiten – da ich mit 8-Bit-Maschinen aufgewachsen bin, hatte ich angenommen, die Programmierung des VGA von 1987 wäre einfach, und ich war ernsthaft verärgert, aber ich habe dabei eine Menge gelernt!)

Sollten Sie das also tun?

Das sollten Sie unbedingtversuchen. Machen Sie sich keine falschen Vorstellungen vom „Erfolg“, es sei denn, Ihre Ziele sind von Anfang an festgelegt. Die Wartung eines Betriebssystems/einer Distribution ist eineoffenes EndeAufgabe, die normalerweise von großen Gruppen erledigt wird. Aber selbst wenn Sie es versuchen, werden Sie Ihre Fähigkeiten verbessern und neue erlernen.

Übrigens spreche ich bei den meisten dieser Dinge aus (oft schmerzhafter) Erfahrung. Ich habe eingebettete Low-Level-Runtimes für einige CPUs (mit)geschrieben (Studium/Arbeit/Spaß) und schreibe derzeit ein Spielzeug-Betriebssystem für eine Spielzeug-CPU (das ist alles nur zum Spaß).

Antwort3

Befolgen Sie die im folgenden Tutorial angegebenen Schritte, um einen Kernel in Ubuntu zu kompilieren:

So kompilieren Sie einen Kernel: Die Ubuntu-Methode"

verwandte Informationen