Kommentieren Sie zunächst, dass dies mein erster Artikel ist und dass ich hoffe, dass es Ihnen allen gefällt.
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.
:O
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
Dies war der beste Beitrag, den ich bisher in diesem Blog gesehen habe. Ich möchte schon wissen, was ich sonst noch tun soll.
Beeindruckt sein
Sehr beeindruckend!!
FUUUUUA!
Es ist der geekeste Beitrag, den ich je gesehen habe, hehe. Herzlichen Glückwunsch Adrián, ein Artikel der Hure! hyper interessant !!! 🙂
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 ...»
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!
Das ist für mich bis zu den nächsten Kapiteln interessant.
Ich habe dieses Tutorial vor langer Zeit gesehen, es ist für C ++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Danke für den Link, ich werde es mir ansehen.
Ich möchte ein Betriebssystem, das zu 100% mit AMD-Grafiken kompatibel ist: /
Windows
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!
Warten Sie einfach, bis das Ventil den Markt ausgelöscht hat
Magischer, perfekter, exzellenter Beitrag, es sieht aus wie eine großartige Reihe von Beiträgen 🙂
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.
Mooooooolaaa !!!!
Sehr guter Artikel, aber nur neugierig, warum Sie das Linux From Scratch-Projekt nicht verfolgt haben?
Grüße
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.
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!
uuuoooohh !! Ich habe noch nie so viel einen Beitrag erfasst wie dieser.
Bitte fahren Sie fort 😀
Ich weiss nicht, was falsch ist:
Fehler: Kein Multiboot-Header gefunden.
Fehler Sie müssen zuerst den Kernel laden
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.
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
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.
[+100]
Einfach toll !!!
Es ist wirklich cool 🙂
Ich nehme meinen Hut ab. Beeindruckender Beitrag. Herzliche Glückwünsche.
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 😀
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/
Valla, danke für die Info 😀
Ich werde einen Blick darauf werfen
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.
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
Die Unix-Quellen sind geschlossen, die Verwendung von Minix ... was etwas anderes ist.
und diejenigen, die QDOS gemacht haben, was?
basierten auf etwas?
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!
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.
Sehr guter Artikel, Adrián. Bitte fahre fort…
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.
LEL Ausgezeichnete Post, weiter so.
Was für ein toller Beitrag, das ist es, was ich vermisst habe desde linux. Wunderbar.
Toller Beitrag, vielen Dank.
Ich habe nicht verstanden, was die link.ld-Datei tut. Kann mir jemand das erklären?
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.
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?
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.
Ich denke das dies Es kann Ihnen eine bessere Vorstellung davon geben, wie es geht.
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.
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
Ergänzen Sie die ";" am Ende von * (. multiboot_header)
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.
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
Das gleiche passiert mir. Hast du die Lösung gefunden?
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
Der Inhalt dieses Inhalts darf nicht in die Befehlszeile eingegeben werden, sondern in die von Ihnen erstellte Datei mit dem Namen grub.cfg
Ausgezeichneter Artikel, danke!
Spektakulär… !! Es ist wie das fehlende Glied.
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
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.
Klasse
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.
Ohne Zweifel muss ich schon Urlaub machen.
Dieses gute und in welchem Programm entwerfen und codieren Sie es?
Bitte gib mir diese Antwort
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
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.
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.
Ausgezeichnetes Thema, das auf mehr Spielraum wartet. Prost
Großartig, ich hoffe auf mehr
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
Möglicherweise müssen Sie das xorriso-Programm in Ihrer Distribution aktualisieren. Welche Distribution und Version benutzt du?
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
Dann installieren Sie xorriso vom Software-Center oder einfach vom Terminal aus. "Sudo apt-get install xorriso"
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
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
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.
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!
Sie erstellen die Datei grub.cfg mit einem beliebigen Texteditor und müssen sie in PROJECT_FOLDER / boot / grub / grub.cfg speichern
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
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.
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.
Vielen Dank für die große Hilfe….
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
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
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
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