Linus Torvalds emulieren: Erstellen Sie Ihr eigenes Betriebssystem von Grund auf neu (I)

Kommentieren Sie zunächst, dass dies mein erster Artikel ist und dass ich hoffe, dass es Ihnen allen gefällt.

Linus Torvals glücklich

In dieser Serie werden wir emulieren Linus TorvaldsIn dieser ersten Folge sehen wir den Start und werden einen Text aus unserem Kernel auf den Bildschirm bringen.

In meinem Fall wird das Betriebssystem aufgerufen NächsterDive. Die erste Entscheidung, die wir treffen müssen, sobald wir das Betriebssystem in Betracht ziehen, ist, wie der Bootloader aussehen wird.

Hier gibt es mehrere Varianten, und wir könnten sogar selbst eine erstellen; In diesem Tutorial werde ich jedoch verwenden GRUB, weil die meisten mehr oder weniger etwas über ihn wissen. Wir erstellen einen Ordner, der das Stammverzeichnis unseres Betriebssystems darstellt, und erstellen dort den Ordner / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Dort erstellen wir die Datei grub.cfg wie folgt:

menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}

In dieser Datei haben wir gesehen, wie GRUB lädt unseren Kernel in diesem Fall in /next/START.ELF. Jetzt müssen wir unseren Kernel erstellen.

Dafür brauchen wir die GCC y GAS (der Assembler des Projekts GNU, kommt normalerweise mit dem gcc). Also werden wir den Kernel erstellen.

Zuerst erstellen wir eine Datei namens kernel.asm. Diese Datei enthält den Startpunkt unseres Kernels und definiert auch den Multiboot (eine Funktion einiger Bootloader wie z GRUB). Der Inhalt von kernel.asm lautet:

.text
.globl start
start:
jmp multiboot_entry
.align 4
multiboot_header:
.long 0x1BADB002
.long 0x00000003
.long -(0x1BADB002+0x00000003)
multiboot_entry:
movl $(stack + 0x4000), %esp
call NextKernel_Main
loop: hlt
jmp loop
.section ".bss"
.comm stack,0x4000

Alles, was mit Multiboot zu tun hat, ist einfach, der Spezifikation zu folgen, sonst nichts. Alles wird beim Start beginnen, es wird multiboot_entry aufrufen, wir werden den Multiboot-Header in den ersten 4k definiert haben und wir werden ihn setzen (mit movl).

Später rufen wir NextKernel_Main auf, unsere Kernel-C-Funktion. In der Schleife halten wir an, um den Computer anzuhalten. Dies kompiliert mit:

as -o kernel.o -c kernel.asm

Jetzt werden wir in C in die Programmierung einsteigen. Sie werden denken, dass jetzt alles ein Kinderspiel ist printf en Haupt- und das wars, wir haben es geschafft.

Nun nein, seitdem printf y Haupt- Es sind Funktionen, die vom Betriebssystem definiert werden, aber wir erstellen sie! Wir können nur die Funktionen verwenden, die wir selbst definieren.

In späteren Kapiteln werde ich von Zeit zu Zeit darüber sprechen, wie wir unsere eigene C-Bibliothek (glibc, bionic, newlibc) einrichten können. Wir haben besprochen, dass wir Text auf den Bildschirm bringen wollen. Nun, wir werden sehen, wie wir das machen.

Es gibt zwei Möglichkeiten, eine ist das Aufrufen der BIOS und eine andere besteht darin, den Bildschirmspeicher direkt zu verwalten. Letzteres werden wir tun, weil es aus C klarer ist und es uns auch ermöglicht, dies zu tun, wenn wir in den geschützten Modus wechseln.

Wir erstellen eine Datei namens NextKernel_Main.c mit folgendem Inhalt:

int NextKernel_Main()
{
char *str = "NextDivel says Hello World", *ch;
unsigned short *vidmem = (unsigned short*) 0xb8000;
unsigned i;
for (ch = str, i = 0; *ch; ch++, i++)
vidmem[i] = (unsigned char) *ch | 0x0700;
return 0;
}

Damit manipulieren wir direkt die Erinnerung VGA und Zeichen für Zeichen schreiben wir es. Wir kompilieren durch Deaktivieren der stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Wenn Sie es bis hierher geschafft haben, möchten Sie jetzt Ihr brandneues Betriebssystem ausprobieren, aber wir sind noch nicht fertig. Wir benötigen eine kleine Datei, die dem Compiler mitteilt, wo in der Datei jeder Abschnitt verlassen werden soll. Dies erfolgt mit einem Linker-Skript. Wir erstellen link.ld:

ENTRY(start)
SECTIONS
{
. = 0x00100000;
.multiboot_header :
{
*(.multiboot_header)
}
.text :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}

Damit definieren wir die Position jedes Abschnitts und den Einstiegspunkt start, den wir in kernel.asm definiert haben. Jetzt können wir all diese Zusammenstellungen vereinen:

gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

Jetzt kopieren wir START.ELF nach / next in unseren Ordner, der das Stammverzeichnis unseres Betriebssystems simuliert. Wir gehen mit der Konsole in den Stammordner unseres neuen Betriebssystems und überprüfen, ob zwei Dateien vorhanden sind: eine /boot/grub/grub.cfg und eine andere /next/START.ELF.

Wir gehen in das obere Verzeichnis und rufen ein Dienstprogramm zur ISO-Erstellung mit GRUB auf grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Sobald wir dies getan haben, werden wir eine haben ISO. Diese ISO kann auf Computern geöffnet werden x86 (64 Bit auch) und virtuelle Maschinen. Um es zu testen, werde ich verwenden QEMU. Wir nennen QEMU von der Kommandozeile:

qemu-system-i386 nextdivel.iso

Wird beginnen Meeres-BIOS und später werden wir haben GRUB. Wenn später alles in Ordnung ist, werden wir unseren Satz sehen.
Sie werden denken, dass dies schwierig ist, antworte ich, ja, das ist es.

Es ist schwierig, wirklich ein Betriebssystem zu erstellen, und dieses hier macht nichts Nützliches. In zukünftigen Kapiteln werden wir sehen, wie man mit Farben auf dem Bildschirm umgeht, Speicher reserviert und wenn ich kann, wie man Daten von der Tastatur erhält.

Wenn jemand hier nicht alles kopieren möchte, habe ich ein Repository unter GitHub (ausführlicher) mit dem Betriebssystem NächsterDive. Wenn Sie kompilieren möchten NächsterDive du musst nur git und cmake haben:

git clone https://github.com/AdrianArroyoCalle/next-divel
cd next-divel
mkdir build && cd build
cmake ..
make
make DESTDIR=next install
chmod +x iso.sh
./iso.sh
qemu-system-i386 nextdivel.iso

Ich empfehle Ihnen, bei NextDivel zusammenzuarbeiten, wenn Sie Zeit und Wunsch haben, ein Betriebssystem zu erstellen. Vielleicht sogar besser als Linux ... die Zeit wird es zeigen.


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.

  1.   lebhaft sagte

    :O

    1.    Marianogaudix sagte

      Torvalds brachte das von UNIX abgeleitete Minix-Betriebssystem zu Andrew S. Tanenbaum und verbesserte es.

      Tanenbaum hat sich mit Linus gestritten, sie haben sich gegenseitig beleidigt. Tanenbaum sagt, dass der Mikrokernel die Zukunft ist (HURD, Minix neuer Kegel-Mikrokernel).

      http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html

  2.   eliotime3000 sagte

    Dies war der beste Beitrag, den ich bisher in diesem Blog gesehen habe. Ich möchte schon wissen, was ich sonst noch tun soll.

  3.   Carlo Gude sagte

    Beeindruckt sein

  4.   axl sagte

    Sehr beeindruckend!!

  5.   Rhoconlinux sagte

    FUUUUUA!
    Es ist der geekeste Beitrag, den ich je gesehen habe, hehe. Herzlichen Glückwunsch Adrián, ein Artikel der Hure! hyper interessant !!! 🙂

    1.    Joaquin sagte

      Ich stimme zu. Ich stelle mir diese Situation vor:
      GNU / Linux Power User (mit einem glücklichen Gesicht):
      "Ich weiß bereits, wie man mein Gentoo kompiliert"

      Nerd (verächtlich): «pff, ich habe meine eigene Distribution erstellt ...»

      1.    Desikoder sagte

        Ja, ich kann meine eigene Linux-Distribution erstellen. Tatsächlich entwickle ich darin ein Initramfs und einen Kernel für Embedded Linux. Es ist nicht dasselbe, ein Betriebssystem zu erstellen als eine Linux-Distribution. Das erste ist viel schwieriger, fast unmöglich, das zweite kann, wie Sie gesagt haben, alles sein, sogar Ubuntu mit geändertem xD-Logo. Also würde ich es so lassen:

        GNU / Linux Power User (mit einem glücklichen Gesicht)
        - Ich weiß bereits, wie ich mein Gentoo kompiliere

        Semi-Nerdy
        - Pff, ich bin einem Linux von Grund auf gefolgt und habe meine eigene Distribution erstellt

        Nerd (mit verächtlicher Haltung)
        - pff, weil ich einen Kernel in Assembler und in C programmiert habe

        Saludos!

  6.   Cronos sagte

    Das ist für mich bis zu den nächsten Kapiteln interessant.

  7.   abimaelmartell sagte

    Ich habe dieses Tutorial vor langer Zeit gesehen, es ist für C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet sagte

      Danke für den Link, ich werde es mir ansehen.

  8.   Jose Jácome sagte

    Ich möchte ein Betriebssystem, das zu 100% mit AMD-Grafiken kompatibel ist: /

    1.    Ivanlinux sagte

      Windows

      1.    Jose Jácome sagte

        hahaha in Windows Catalyst hat keine OpenGL-Unterstützung, obwohl ich unter Linux nicht die gesamte Grafikleistung nutzen kann, werde ich warten, um zu sehen, was passiert!

        1.    beny_hm sagte

          Warten Sie einfach, bis das Ventil den Markt ausgelöscht hat

  9.   KZKG ^ Gaara sagte

    Magischer, perfekter, exzellenter Beitrag, es sieht aus wie eine großartige Reihe von Beiträgen 🙂

  10.   O_Pixote_O sagte

    Buah, ich würde gerne wissen, wie man programmiert, um Ihnen helfen zu können, einfach um mit dem Wissen zu üben, das Sie lernen, und man hilft. Im Moment überlasse ich Ihnen das Motto, die Aufmerksamkeit auf das Projekt zu lenken, sobald Sie es abgeschlossen haben. "Verwenden Sie NextDivel, Pornos sehen gleich (oder besser) aus.", Sie werden xD fegen.

  11.   diesernameistfalsch sagte

    Mooooooolaaa !!!!

  12.   nordi sagte

    Sehr guter Artikel, aber nur neugierig, warum Sie das Linux From Scratch-Projekt nicht verfolgt haben?

    Grüße

    1.    AdrianArroyoStreet sagte

      Nun, Linux von Grund auf neu ist in Ordnung, und Sie können sagen, dass es Ihnen gehört, aber es ist wirklich sehr mechanisch:
      - Schriftarten herunterladen
      -Patch sie
      -Kompilieren
      -Installieren
      -Folgende
      Obwohl das Ergebnis am Ende schlechter ist, können Sie hier sagen, dass Sie alle Dateien überprüft haben.

    2.    Desikoder sagte

      Wie aus meinem vorherigen Kommentar hervorgeht, hat es nicht die gleiche Komplexität. Darüber hinaus ist Linux von Grund auf nicht im Gegensatz zu seinem Namen ein System von Grund auf neu. Wenn Sie ein System von Grund auf neu erstellen, programmieren Sie es selbst, schreiben Sie Ihren eigenen Kernel, nicht den Linux-Kernel, wenn möglich sogar Ihren eigenen Bootloader Maden, Lilo, Syslinux usw. Obwohl ein LFS keine Kleinigkeit ist und ziemlich komplex, kommt es nicht einmal der Programmierung Ihres eigenen Kernels nahe ...

      Außerdem stimme ich AdrianArroyo Calle zu, dass es zu mechanisch ist. Ich habe es irgendwann gelesen und Sie geben auf der sechsten Seite auf. Sie werden auch aufgefordert, welche Versionen der Pakete zu verwenden, da die Anweisungen sonst nicht funktionieren (was den Mangel an Flexibilität zeigt , Meiner Meinung nach ). Ich denke, es ist besser, etwas von Ihrer eigenen Idee zu haben, die gewünschten Pakete zu kompilieren, sogar einige zu programmieren, einen Linux-Kernel zu kompilieren und in Ruhe.

      Saludos!

  13.   Plätzchen sagte

    uuuoooohh !! Ich habe noch nie so viel einen Beitrag erfasst wie dieser.
    Bitte fahren Sie fort 😀

  14.   linux_user sagte

    Ich weiss nicht, was falsch ist:

    Fehler: Kein Multiboot-Header gefunden.
    Fehler Sie müssen zuerst den Kernel laden

    1.    AdrianArroyoStreet sagte

      Wenn es ein Trost ist, habe ich den gleichen Fehler gemacht. Versuchen Sie, die Quellen in GitHub zu verwenden, da der Fehler bereits behoben ist. Wie auch immer, ich denke, wenn Sie die Zeile grub.cfg von "multiboot /next/START.ELF" in "kernel /next/START.ELF" ändern, könnte es funktionieren. Das weiß ich nicht genau.

      1.    mcbanane sagte

        Zuallererst prächtiger Eingang 🙂
        Ich habe das gleiche Problem beim Laden des Kernels von grub. Sogar GitHub-Quellen verwenden oder Multiboot für Kernel ändern ...

        Fehler: Kein Multiboot-Header gefunden.
        Fehler: kein geladener Kernel

        1.    AdrianArroyoStreet sagte

          Verwenden Sie clang als Compiler? Ändern Sie es für die gcc
          Haben Sie daran gedacht, das Linker-Skript zu verwenden? Es ist notwendig, damit der Linker (in unserem Fall ld) weiß, wo in der Datei er jedes Ding ablegen wird. In diesem Fall muss sich der Multiboot-Header am Anfang befinden.
          Verwenden Sie das CMake-System? Wenn Sie es verwenden, denke ich, dass es nicht fehlschlägt.
          Wenn es bei Ihnen nicht funktioniert, werde ich versuchen, eine andere Lösung zu finden.

  15.   Khourt sagte

    [+100]
    Einfach toll !!!

  16.   Invisible15 sagte

    Es ist wirklich cool 🙂

  17.   tanrax sagte

    Ich nehme meinen Hut ab. Beeindruckender Beitrag. Herzliche Glückwünsche.

  18.   Mann sagte

    Beeindruckend!
    Es wäre großartig, wenn Sie Anwendungen in HTML5 und Javascript öffnen könnten, ohne einen Browser verwenden zu müssen. Ist das möglich?
    Ich spreche davon, dass sie wie native Anwendungen sind.
    Es wäre also einfach, für dieses Betriebssystem zu programmieren 😀

    1.    AdrianArroyoStreet sagte

      In diesem Fall werde ich es nicht tun, weil es viel mehr Arbeit erfordert, aber es gibt ein Betriebssystem namens "is", das das tut, was Sie sagen. Tatsächlich ist die Befehlszeile JavaScript und Fenster werden mit JavaScript Canvas-Funktionen gezeichnet. Nintendo-Ingenieure haben es geschafft und jetzt ist es Open Source.

      http://code.google.com/p/es-operating-system/

      1.    Mann sagte

        Valla, danke für die Info 😀
        Ich werde einen Blick darauf werfen

  19.   Patodx sagte

    Wer sein eigenes Betriebssystem erstellen kann, kann friedlich sterben, da das intellektuelle Niveau, das er damit erreichen muss; Es bringt dich dazu, auf Himmel oder Hölle zu verzichten.
    Stück Posting.

    1.    Miguel sagte

      Bisher hat niemand bekannt, dass er nur etwas gemacht hat, von dem man sagen kann, dass es ein anständiges Betriebssystem ist, das von Grund auf neu erstellt wurde, nicht einmal Linux Torvalds, wie Sie zu Beginn sagten, da dies aus Unix-Quellen stammt und alles andere in verfasst ist Mehr als einer Person gemeinsam, ist das Leben sehr kurz und es ist für jeden undenkbar, von vorne zu beginnen, auch wenn das Gegenteil gewünscht wird. Dies zeigt sich in vielen Fehlern, die Linux Torvalds beim Kopieren und Einfügen gemacht hat

      1.    Skarmiglione sagte

        Die Unix-Quellen sind geschlossen, die Verwendung von Minix ... was etwas anderes ist.

      2.    Philipp Robaina sagte

        und diejenigen, die QDOS gemacht haben, was?
        basierten auf etwas?

  20.   Tesla sagte

    Soweit ich weiß, hat wer kein eigenes Betriebssystem, weil er nicht will, hahahaha.

    Jetzt im Ernst, sehr interessant! Vieles geht über meine begrenzten Programmierkenntnisse hinaus, aber ich werde die anderen Teile dieser Serie mit Vorfreude lesen.

    Danke für den Beitrag!

  21.   Manuel R. sagte

    Du hast mich mit einem O_O-Gesicht verlassen ... ohne die Absicht, die Beiträge von irgendjemandem zu unterschätzen, ist es der "Profi", den ich in letzter Zeit gesehen habe. Grüße.

  22.   aitor_cz sagte

    Sehr guter Artikel, Adrián. Bitte fahre fort…

  23.   mj sagte

    Machst du Witze am Aprilscherz? Sei nicht gemein "Linus Torvalds emulieren: Erstelle dein eigenes Betriebssystem von Grund auf neu." Ich denke nicht, dass es für diejenigen schwierig ist, die eine Karriere an einem Institut für Technologie oder Universität anstreben. aber für mich bin ich ein Anfänger Bogenschütze (es gibt diejenigen, die "Noob" sagen, aber ich betrachte mich eher als Neuling etwas faul), das klingt, als würde man nicht an Land gehen. Wie auch immer, dieser Artikel schafft viel Neugier und ohne doppelte Bewunderung und Respekt für seinen Herausgeber, Glückwunsch; Das erste, was ich tun werde, ist zu versuchen, zumindest ein wenig von diesem wertvollen Material zu verstehen.
    DANKE Adrian Arroyo Calle, hervorragende Arbeit und edle Wissensvermittlung.

  24.   Blaire pascal sagte

    LEL Ausgezeichnete Post, weiter so.

  25.   f3niX sagte

    Was für ein toller Beitrag, das ist es, was ich vermisst habe desde linux. Wunderbar.

  26.   Ruby sagte

    Toller Beitrag, vielen Dank.
    Ich habe nicht verstanden, was die link.ld-Datei tut. Kann mir jemand das erklären?

    1.    AdrianArroyoStreet sagte

      Die Datei link.ld teilt dem Linker (in diesem Fall ld) mit, an welcher Position innerhalb der resultierenden Datei sich jeder Teil des Codes befinden soll. Wir definieren auch den Einstiegspunkt, da wir main nicht als normales Programm verwenden können, da wir kein Betriebssystem haben. In diesem Fall wählen wir die Startfunktion.

  27.   Maxi sagte

    Großartig für deinen ganzen Beitrag! Warten auf die 7! Was ist, wenn ich Zweifel habe, zum Beispiel, wenn ich nur einen Algorithmus ohne Betriebssystem ausführen wollte, woher weiß ich, was ich verwenden kann und was nicht C?

    1.    AdrianArroyoStreet sagte

      Wenn Sie es so verwenden, können Sie nichts von stdlib verwenden, was praktisch jeder verwendet (kein malloc, free, printf, scanf, strcmp usw.). Alles muss direkt aus dem Speicher oder ASM implementiert werden. Vielleicht werde ich in einem höheren Kapitel zeigen, wie man eine C-Bibliothek für das Betriebssystem installiert. Wenn Sie C ++ verwenden, können Sie keine Ausnahmen und die Operatoren new und delete (und sicherlich mehr) verwenden.

    2.    Schalter sagte

      Ich denke das dies Es kann Ihnen eine bessere Vorstellung davon geben, wie es geht.

  28.   Esteban sagte

    Hallo, vor ungefähr 5 Jahren bin ich einer ähnlichen Veröffentlichung gefolgt und habe einen Mikrokernel entwickelt, der auf die gleiche Weise startet. Er hat einige Aspekte zu verbessern, aber es könnte Sie interessieren, er läuft im geschützten Modus, führt Multitasking aus und führt Speichervirtualisierung durch. In letzter Zeit habe ich daran gearbeitet Festplattentreiber und CD-Laufwerk, damit es installierbar ist und nicht nur auf einer Live-CD ausgeführt wird ... Grüße.

  29.   Johan sagte

    Sehr geehrte Damen und Herren, ich habe einen Fehler bei der Ausführung des Befehls:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 Syntaxfehler
    collect2: error: ld hat 1 Exit-Status zurückgegeben

    link.ld
    . = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    In Zeile 5 sehe ich den Fehler nicht, macht jemand das gleiche?

    Ich arbeite mit einem virtualisierten Debian-Keuchen in der Virtualbox

    1.    Platzhalterbild von Julian Reyes Escrigas sagte

      Ergänzen Sie die ";" am Ende von * (. multiboot_header)

  30.   Eric Orellana Romero sagte

    Ausgezeichnete Initiative, ich werde auf jeden Fall den Kapiteln dieses Beitrags folgen und beabsichtigen, viel daraus zu lernen. Vielen Dank, dass Sie sich die Zeit genommen haben, uns zu unterrichten. Ein einziges Detail in dieser Hinsicht ist, dass Linus Torvalds nicht der Schöpfer eines Betriebssystems ist, sondern den Kernel des GNU / Linux-Systems (das in anderen Betriebssystemen verwendet wurde), der immer noch würdig ist, aber es ist Es ist wichtig, Richard Stallman für die Erstellung des größten Teils des Betriebssystems zu würdigen.

    Vielen Dank für den Beitrag und ich hoffe, Sie berücksichtigen meine Beobachtung.

  31.   Platzhalterbild von Julian Reyes Escrigas sagte

    Ich habe eine Weile mit dem Thema herumgespielt und mich dafür interessiert, sobald ich die Überschrift gelesen habe. aber die Nachricht wird immer besser

    Fehler: Kein Multiboot-Header gefunden.
    Fehler Sie müssen zuerst den Kernel laden

    Ich habe hochgeladen, was ich zu einem Repo auf Github nehme https://github.com/rkmax/GenyOS

    1.    Martin Villalba sagte

      Das gleiche passiert mir. Hast du die Lösung gefunden?

  32.   Carlos sagte

    Eine Frage, mit der ich angefangen habe, die Syntax einzuführen, und die Menüeintragszeile sagt mir, dass kein Befehl gefunden wurde, wer mir sagen könnte, warum
    das ist was ich mache

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: Befehl nicht gefunden

    1.    AdrianArroyoStreet sagte

      Der Inhalt dieses Inhalts darf nicht in die Befehlszeile eingegeben werden, sondern in die von Ihnen erstellte Datei mit dem Namen grub.cfg

  33.   Nodetin sagte

    Ausgezeichneter Artikel, danke!

  34.   Christian sagte

    Spektakulär… !! Es ist wie das fehlende Glied.

  35.   r.garciag sagte

    Ich liebe deine Tutorials zu Emulating LInus Torvalds, aber es gibt einen Schritt, den ich nicht verstehe: den folgenden:
    Jetzt kopieren wir START.ELF nach / next in unseren Ordner, der das Stammverzeichnis unseres Betriebssystems simuliert. Wir gehen mit der Konsole in den Stammordner unseres neuen Betriebssystems und überprüfen, ob zwei Dateien vorhanden sind: eine /boot/grub/grub.cfg und eine andere /next/START.ELF.

    Wir gehen in das obere Verzeichnis und rufen mit GRUB ein ISO-Erstellungsprogramm namens grub-mkrescue auf

    Könnte es mir jemand erklären: p

    1.    AdrianArroyoStreet sagte

      Um eine minimale ISO zu generieren, die GRUB laden kann, kopieren wir den Kernel in (das / der ISO, einen beliebigen Ordner) /next/START.ELF und die GRUB-Konfigurationsdatei in (das / der ISO, einen beliebigen Ordner) / boot / grub / grub.cfg. Sobald dies erledigt ist, haben wir GRUB noch nicht auf der ISO installiert und es gibt ein Dienstprogramm, das die ISO aus einem Ordner generiert und GRUB namens grub-mkrescue installiert. Dann würden wir endlich eine bootfähige ISO haben, auf der GRUB installiert ist, die die Konfiguration lesen kann, um START.ELF später korrekt auszuführen. Ich weiß nicht, ob ich mich selbst erklärt habe, aber wir machen eine Art falsches Dateisystem, mit dem wir eine ISO generieren.

  36.   Miguel Jose Guevara Atencio sagte

    Klasse

  37.   Michael Moreno sagte

    Schauen Sie sich ein neues System wirklich nicht so sehr an, aber wenn Sie Linux verbessern, indem Sie beispielsweise einen Linux-Exonukleus mit einer Serverkomponente erstellen, die auf Wunsch als Mikrokernel fungiert, das heißt, eine Exostruktur mit Mikronukleus-Verhalten, die Super- und Linux wäre .

    Die andere Sache ist, dass ich kein Programmierexperte bin, nur ein paar kitschige C ++ und etwas Java. Es würde für mich ausreichen, dem Linux-Kernel-Programm ein Modul zu geben, es zu entkernen, es zu modifizieren usw.

  38.   WinterSoldat53 sagte

    Ohne Zweifel muss ich schon Urlaub machen.

  39.   Fermin sagte

    Dieses gute und in welchem ​​Programm entwerfen und codieren Sie es?
    Bitte gib mir diese Antwort

  40.   Dunkle Gedanken sagte

    Beim Kompilieren von deinem Git bekomme ich:

    [jmponce @ jar build] $ cmake ..
    - NextRoot-Verzeichnis erstellen
    - Generieren eines ISO-Skripts
    mache DESTDIR = nächste Installation
    ./iso.sh
    - Doxygen gefunden: / usr / bin / doxygen (gefundene Version "1.8.9")
    - Konfiguration abgeschlossen
    - Generieren erledigt
    - Build-Dateien wurden geschrieben in: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Scanabhängigkeiten des Ziels START.ELF
    [7%] Erstellen des ASM-ATT-Objekts src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Erstellen des CXX-Objekts src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Verknüpfen der ausführbaren CXX-Datei START.ELF
    / usr / bin / ld: Inkompatibel /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a wird bei der Suche nach -lgcc übersprungen
    / usr / bin / ld: -lgcc kann nicht gefunden werden
    collect2: Fehler: ld hat den Exit-Status 1 zurückgegeben
    src / CMakeFiles / START.ELF.dir / build.make: 402: Fehlgeschlagene Anweisungen für das Ziel 'src / START.ELF'
    make [2]: *** [src / START.ELF] Fehler 1
    CMakeFiles / Makefile2: 106: Fehlgeschlagene Anweisungen für das Ziel 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Fehler 2
    Makefile: 117: Fehler bei Anweisungen für Ziel 'alle'
    make: *** [all] Fehler 2

    1.    AdrianArroyoStreet sagte

      Der Fehler scheint zu sein, dass llibgcc nicht gefunden werden kann, da Sie die 64-Bit-Version haben und das Build-System derzeit gezwungen ist, 32-Bit zu verwenden. Sie sollten ein Kompatibilitätspaket in Ihrer Distribution installieren oder besser ein 32-Bit-System verwenden.

      1.    Ronaldo Rodríguez sagte

        Ich habe 32 Bit und der gleiche Fehler tritt auf. Meinen Sie das Betriebssystem oder die Architektur? meins ist 64 Bit, aber ich benutze 32 Bit Ubuntu, frag nicht, finanzielle Probleme, damit sage ich alles.

  41.   Jorge sagte

    Ausgezeichnetes Thema, das auf mehr Spielraum wartet. Prost

  42.   Jhon sagte

    Großartig, ich hoffe auf mehr

  43.   Soid Perez sagte

    Hallo, ich bin ein junger Botschafter, der ein Betriebssystem erstellen möchte, das alle Programme und Plattformen unterstützt, damit Entwickler keine leistungsstarken Maschinen, Anwendungen oder Programme auf einem PC haben müssen.
    Aus diesem Grund interessiert mich dieser Beitrag, aber wenn ich Ihr Git herunterlade oder versuche, es zu erstellen, funktioniert alles, bis ich den Befehl ./iso.sh oder grub-mkrescue -o nextdivel.iso nextroot ausführe. Sie erhalten diesen Fehler

    "Grub-mkrescue: Warnung: Ihr xorriso unterstützt" –grub2-boot-info "nicht. Einige Funktionen wurden deaktiviert. Verwenden Sie xorriso 1.2.9 oder höher.
    grub-mkrescue: Warnung: Ihr xorriso unterstützt "–grub2-boot-info" nicht. Ihr Kernel-Image ist zu groß. Der Festplattenstart wurde deaktiviert. Verwenden Sie xorriso 1.2.9 oder höher. »
    Ich habe wirklich keine Ahnung, da ich viel über Anwendungen und Websites weiß, aber ich weiß nichts über Grub

    1.    AdrianArroyoStreet sagte

      Möglicherweise müssen Sie das xorriso-Programm in Ihrer Distribution aktualisieren. Welche Distribution und Version benutzt du?

      1.    Soid perez sagte

        Ich benutze xubuntu 14.04lts und versuche, xorriso auszuführen, aber die Shell sagt mir, dass es nicht gefunden werden kann und ich bekomme apt-get install xorriso, obwohl ich aufrichtig eine Antwort erwartet habe, weil ich schlechte Erfahrungen mit der Installation von Dingen gemacht habe, die ich unter Linux nicht kenne, hehe. Ich werde es sofort aktualisieren und Ihnen sagen, was passiert ist

      2.    AdrianArroyoStreet sagte

        Dann installieren Sie xorriso vom Software-Center oder einfach vom Terminal aus. "Sudo apt-get install xorriso"

      3.    Soid perez sagte

        Ich habe bereits alles getan, was du mir erzählt hast, und sowohl mit git als auch mit mir bekomme ich diesen xorriso 1.3.2: RockRidge-Dateisystemmanipulator, libburnia-Projekt.

        Antriebsstrom: -outdev 'stdio: nextdivel.iso'
        Medienstrom: Standarddatei, überschreibbar
        Medienstatus: ist leer
        Medienübersicht: 0 Sitzungen, 0 Datenblöcke, 0 Daten, 1901 m frei
        Zum ISO-Image hinzugefügt: Verzeichnis '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 Dateien in 1 Sekunde hinzugefügt
        xorriso: FAILURE: Attribute der Quelldatei '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot' können nicht ermittelt werden: Keine solche Datei oder kein solches Verzeichnis
        xorriso: UPDATE: 546 Dateien in 1 Sekunde hinzugefügt
        xorriso: aborting: -abort_on 'FAILURE' ist auf 'FAILURE' gestoßen.
        Und Cord Ich verstehe nicht, dass meine Struktur /nextroot/boot/grub/grub.cfg und nextroot / next / START.ELF ist

      4.    Soid perez sagte

        Danke, ich bin bereit weiterzumachen, ein Freund hat mir geholfen und mir gesagt, was ich falsch gemacht habe, war die Organisation des Verzeichnisses, also habe ich es geregelt und das wars

      5.    erik sagte

        Entschuldigung, können Sie mir sagen, welche Prozedur Sie ausgeführt haben, da ich den Fehler nichts zum Booten bekomme: keine solche Datei oder kein solches Verzeichnis

        kein bootfähiges Gerät.

  44.   Jose sagte

    Prost! Ich wollte dich um den Gefallen bitten, wenn du mir eine E-Mail mit dem schicken könntest, was du hier erklärst. Ich bin etwas verwirrt und ich muss vergleichen, was ich habe mit dem, was du erklärst. Vielleicht ist mir nicht klar, ob die Erstellung des Grubs. cfg wird im terminal gcc gemacht oder wo genau? Vielen Dank mein Freund!

    1.    AdrianArroyoStreet sagte

      Sie erstellen die Datei grub.cfg mit einem beliebigen Texteditor und müssen sie in PROJECT_FOLDER / boot / grub / grub.cfg speichern

  45.   jhuazano sagte

    Hallo Adrian, zunächst einmal gratuliere ich dir und danke dir für deinen Beitrag.

    Du weißt, ich mache das für eine Übung und ich habe angefangen, es nach deiner Nachhilfe zusammenzustellen, aber nach dem Start habe ich den ersten Fehler gefunden

    $ als -o Kernel.o -c Kernel.asm
    bash: as: Befehl nicht gefunden ...
    Ähnliche Befehle sind:
    'sa'
    'ac'

    Ich arbeite an Fedora 20 und kann diesbezüglich keine Lösung finden. Ich würde mich über Ihre Anleitung freuen, ob ich etwas in gcc oder gas ändern sollte

    Vielen Dank im Voraus

    1.    AdrianArroyoStreet sagte

      Sie müssen GAS installieren, damit ich den Fehlercode sehen kann. Ich habe Fedora nicht zur Hand, aber theoretisch installieren Sie, wenn Sie gcc-c ++ installieren, die gesamte GCC-Suite und GNU wie üblich.

  46.   Gaston Ramirez sagte

    Ich bin bei Ihnen, ich weiß etwas über C ++, C # (obwohl letzteres in dieser Angelegenheit nicht sehr nützlich ist). Das Schlimme ist, dass mir immer noch die Erfahrung fehlt. Ich kann nie mit C-Sprache umgehen. Ihre Veröffentlichung ist großartig. Ich habe nicht viel zu sagen. Wenn ich Zeit habe, sehe ich. Vielen Dank.

  47.   Teresita von Jesus Nah Sanchez sagte

    Vielen Dank für die große Hilfe….

  48.   JKY sagte

    Ich liebe Linux, es ist der beste Bezirk, den es gibt. Die Wahrheit für meine Fenster ist Müll für einen, von dem ich weiß, dass der Schöpfer von Linux der Schöpfer von Fenstern ist

  49.   Ritt sagte

    Hallo ich bekomme einen Fehler in grub sagt
    Fehler: Datei /next/START.ELF Nicht gefunden
    Fehler: Sie müssen zuerst den Kernel laden

    Könntest du mir helfen und googeln, aber ich kann nicht finden

  50.   Heinrich Avila sagte

    Bitte, wie kann ich dafür sorgen, dass die Nachricht HALLO WORLD angezeigt wird? Ich bin ein Anfänger und weiß immer noch nicht genug

  51.   Carlos Guerrero Alvarez sagte

    Folgendes passiert mir:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: Die Verschiebung R_X86_64_32 gegen das Symbol "Stapel" kann nicht verwendet werden, wenn ein PIE-Objekt erstellt wird. neu kompilieren mit -fPIE
    / usr / bin / ld: letzter Link fehlgeschlagen: nicht darstellbarer Abschnitt bei der Ausgabe
    collect2: error: ld hat 1 Exit-Status zurückgegeben