Émulation de Linus Torvalds: créez votre propre système d'exploitation à partir de zéro (I)

Tout d'abord, dites que c'est mon premier article et que j'espère que vous l'aimerez tous.

Linus Torvals heureux

Dans cette série, nous allons émuler Linus Torvalds, nous allons créer notre système d'exploitation à partir de 0. Dans ce premier épisode nous allons voir le boot et nous mettrons un texte à l'écran depuis notre noyau.

Dans mon cas, le système d'exploitation s'appelle SuivantDivel. La première décision que nous devons prendre dès que nous considérons le système d'exploitation est de savoir quel sera le chargeur de démarrage?

Ici, il existe plusieurs variantes, et nous pourrions même en créer une nous-mêmes; cependant dans ce tutoriel je vais utiliser GRUB, parce que la plupart savent plus ou moins quelque chose sur lui. Nous créons un dossier qui sera la racine de notre système d'exploitation et là nous créons le dossier / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Là, nous créons le fichier grub.cfg comme suit:

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

Dans ce fichier, nous avons vu comment GRUB chargera notre noyau, dans ce cas, dans /next/START.ELF. Maintenant, nous devons créer notre noyau.

Pour cela, nous aurons besoin du GCC y GAS (l'assembleur du projet GNU, est généralement fourni avec le gcc). Nous allons donc créer le noyau.

Nous créons d'abord un fichier appelé kernel.asm. Ce fichier contiendra le point de départ de notre noyau et définira également le multiboot (une fonctionnalité de certains bootloaders comme GRUB). Le contenu de kernel.asm sera:

.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

Tout ce qui concerne le multiboot est simplement de suivre la spécification rien d'autre. Tout commencera au début, il appellera multiboot_entry, nous aurons défini l'en-tête multiboot dans les 4 premiers kilomètres et nous le mettrons (avec movl).

Plus tard, nous appelons NextKernel_Main qui est notre fonction C du noyau. Dans la boucle, nous nous arrêtons pour arrêter l'ordinateur. Cela compile avec:

as -o kernel.o -c kernel.asm

Maintenant, nous allons entrer dans la programmation en C. Vous allez penser que maintenant tout est un morceau de gâteau, nous mettons un printf en principal et c'est tout, nous l'avons fait.

Eh bien non, depuis printf y principal ce sont des fonctions qui sont définies par le système d'exploitation, mais nous les créons! Nous ne pouvons utiliser que les fonctions que nous définissons nous-mêmes.

Dans les chapitres suivants, je parlerai de la façon de mettre notre propre bibliothèque C (glibc, bionic, newlibc) mais de temps en temps. Nous avons dit que nous voulons mettre du texte à l'écran, eh bien nous verrons comment nous le faisons.

Il existe deux options, l'une consiste à appeler le BIOS et une autre consiste à gérer directement la mémoire d'écran. Nous allons faire ce dernier car il est plus clair à partir de C et cela nous permettra également de le faire lorsque nous entrerons en mode protégé.

Nous créons un fichier appelé NextKernel_Main.c avec le contenu suivant:

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;
}

Avec cela, nous manipulons directement la mémoire VGA et caractère par caractère, nous l'écrivons. Nous compilons en désactivant le stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Si vous êtes arrivé jusqu'ici, vous voudrez essayer votre tout nouveau système d'exploitation maintenant, mais nous n'avons pas encore terminé. Nous avons besoin d'un petit fichier qui indique au compilateur où dans le fichier quitter chaque section. Cela se fait avec un script de l'éditeur de liens. Nous créons 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 = .;
}

Avec cela, nous définissons la position de chaque section et le point d'entrée, start, que nous avons défini dans kernel.asm. Maintenant, nous pouvons unir toute cette concoction:

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

Maintenant, nous copions START.ELF dans / next dans notre dossier qui simule la racine de notre système d'exploitation. Nous allons dans le dossier racine de notre nouveau système d'exploitation avec la console et vérifions qu'il y a deux fichiers: un /boot/grub/grub.cfg et un autre /next/START.ELF.

Nous allons dans le répertoire supérieur et appelons un utilitaire de création ISO avec GRUB appelé grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Une fois que nous aurons fait cela, nous aurons un ISO. Cet ISO peut être ouvert sur des ordinateurs x86 (64 bits aussi) et des machines virtuelles. Pour le tester, je vais utiliser QEMU. Nous appelons QEMU depuis la ligne de commande:

qemu-system-i386 nextdivel.iso

Va commencer BIOS de la mer et plus tard nous aurons GRUB. Plus tard, si tout est correct, nous verrons notre phrase.
Vous penserez que c'est difficile, je réponds que oui.

Créer vraiment un système d'exploitation est difficile et que celui-ci ici ne fait rien d'utile. Dans les prochains chapitres, nous verrons comment gérer les couleurs à l'écran, réserver de la mémoire et si je peux, comment obtenir des données à partir du clavier.

Si quelqu'un ne veut pas tout copier ici, j'ai un référentiel à GitHub (plus élaboré) avec le système d'exploitation SuivantDivel. Si vous souhaitez compiler SuivantDivel il vous suffit d'avoir git et cmake:

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

Je vous encourage à collaborer sur NextDivel si vous avez le temps et le désir de créer un système d'exploitation. Peut-être même supérieur à Linux ... le temps le dira.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données: Miguel Ángel Gatón
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.

  1.   animé dit

    :O

    1.    marianogaudix dit

      Torvalds a apporté le système d'exploitation Minix (dérivé d'UNIX) à Andrew S. Tanenbaum et l'a amélioré.

      Tanenbaum s'est disputé avec Linus, ils se sont insultés. Tanenbaum dit que le Microkernel est l'avenir (HURD, Minix new cône Microkernel).

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

  2.   éliotime3000 dit

    C'est le meilleur article que j'ai vu jusqu'à présent sur ce blog. Je veux déjà savoir quoi faire d'autre.

  3.   Carlos Gude dit

    Être impressionné

  4.   Axl dit

    Vraiment impressionnant!!

  5.   rhoconlinux dit

    FUUUUUUUA !
    C'est le post le plus geek que j'ai jamais vu hehe. Bravo Adrián, un article de pute! hyper intéressant !!! 🙂

    1.    Joaquin dit

      Je suis d'accord. J'imagine cette situation:
      Power User GNU / Linux (avec un visage heureux):
      "Je sais déjà comment compiler ma Gentoo"

      Nerd (avec mépris): «pff, j'ai créé ma propre distribution ...»

      1.    désikoder dit

        Oui, je peux créer ma propre distribution Linux. En fait, je développe un initramfs et un noyau pour Linux embarqué. Ce n'est pas la même chose de créer un système d'exploitation qu'une distribution Linux. Le premier est beaucoup plus difficile, presque impossible, le second, comme vous l'avez dit, peut être n'importe quoi, même Ubuntu avec le logo xD changé. Alors je laisserais ça comme ça:

        Power User GNU / Linux (avec un visage heureux)
        - Je sais déjà comment compiler ma Gentoo

        Semi-Neld
        - Pff, j'ai suivi un linux à partir de zéro et j'ai fait ma propre distribution

        Nerd (avec une attitude méprisante)
        - pff, car j'ai programmé un noyau en assembleur et en C

        Saludos!

  6.   cronos dit

    C'est intéressant pour moi, en attendant les chapitres suivants.

  7.   abimaelmartell dit

    J'ai vu ce tutoriel il y a quelque temps, c'est pour C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dit

      Merci pour le lien, je vais y jeter un œil.

  8.   José Jacome dit

    Je souhaite un système d'exploitation 100% compatible avec les graphiques AMD: /

    1.    ivanlinux dit

      Windows

      1.    José Jacome dit

        hahaha dans Windows Catalyst ne prend pas en charge OpenGL, bien que sous Linux je ne puisse pas utiliser toute la puissance graphique, je continuerai d'attendre pour voir ce qui se passe!

        1.    beny_hm dit

          attendez juste que la valve élimine le marché

  9.   KZKG ^ Gaara dit

    Magique, parfait, excellente contribution, cela ressemble à une belle série de messages 🙂

  10.   O_Pixote_O dit

    Buah je voudrais savoir comment programmer pour vous aider, simplement comme une manière de pratiquer avec la connaissance que vous apprenez et aidez un. Pour l'instant, je vous laisse la devise d'attirer l'attention sur le projet une fois que vous l'avez terminé "Utilisez NextDivel, le porno a la même apparence (ou mieux).", Vous allez balayer xD.

  11.   ce nom est faux dit

    Mooooooolaaa !!!!

  12.   Nordri dit

    Très bon article, mais simplement curieux de savoir pourquoi vous n'avez pas suivi le projet Linux From Scratch?

    salutations

    1.    AdrianArroyoStreet dit

      Eh bien, Linux from Scratch va bien, et vous pouvez dire que c'est le vôtre, mais c'est vraiment très mécanique:
      -Télécharger les polices
      -Attrapez-les
      -Compiler
      -Installer
      -Suivant
      Ici, même si le résultat est pire au final, vous pouvez dire que vous avez revu tous les fichiers.

    2.    désikoder dit

      Comme il ressort de mon commentaire précédent, car il n'a pas le même niveau de complexité. De plus, linux à partir de zéro n'est pas vraiment, contrairement à son nom, créer un système à partir de zéro. Créer un système à partir de zéro signifie le programmer vous-même, écrire votre propre noyau, pas le noyau linux, si possible même votre propre chargeur de démarrage au lieu de grub, lilo, syslinux, etc. Bien qu'un LFS ne soit pas une mince affaire et soit assez complexe, il ne se rapproche même pas de la programmation de votre propre noyau ...

      De plus, je suis d'accord avec AdrianArroyo Calle que c'est trop mécanique, je l'ai lu parfois et vous finissez par abandonner sur la sixième page, ils vous disent également d'utiliser quelles versions des packages car sinon les instructions ne fonctionnent pas (cela montre le manque de flexibilité , À mon avis ). Je pense qu'il vaut mieux avoir quelque chose de votre propre idée, compiler les paquets que vous voulez, même en programmer certains, compiler un noyau Linux et en paix.

      Saludos!

  13.   gâteau dit

    uuuoooohh !! Je n'ai jamais capturé un message autant que celui-ci.
    Veuillez continuer 😀

  14.   utilisateur_linux dit

    Je ne sais pas ce qui ne va pas:

    erreur: aucun en-tête multiboot trouvé.
    erreur vous devez d'abord charger le noyau

    1.    AdrianArroyoStreet dit

      Si c'est une consolation, j'ai fait la même erreur. Essayez d'utiliser les sources qui sont dans GitHub, là l'erreur est déjà résolue. Quoi qu'il en soit, je pense que si vous changez la ligne grub.cfg de "multiboot /next/START.ELF" à "kernel /next/START.ELF" cela pourrait fonctionner. Je ne sais pas exactement.

      1.    Mcplatano dit

        Tout d'abord, magnifique entrée 🙂
        J'ai le même problème lors du chargement du noyau depuis grub. Même en utilisant des sources GitHub ou en changeant le multiboot pour le noyau ...

        erreur: aucun en-tête multiboot trouvé.
        erreur: pas de noyau chargé

        1.    AdrianArroyoStreet dit

          Utilisez-vous clang comme compilateur? Changez-le pour le gcc
          Vous êtes-vous souvenu d'utiliser le script de l'éditeur de liens? Il est nécessaire que l'éditeur de liens (ld dans notre cas) sache où dans le fichier il va mettre chaque chose. Dans ce cas, l'en-tête multiboot doit être au début.
          Utilisez-vous le système CMake? Si vous l'utilisez, je pense que cela n'échoue pas.
          Si cela ne fonctionne pas pour vous, je vais essayer de trouver une autre solution.

  15.   Khourt dit

    [+100]
    Simplement génial !!!

  16.   invisible15 dit

    C'est vraiment cool 🙂

  17.   tanrax dit

    Chapeau. Message impressionnant. Toutes nos félicitations.

  18.   man dit

    Waouh !
    Ce serait formidable si vous pouviez ouvrir des applications en HTML5 et Javascript sans avoir à utiliser de navigateur, est-ce possible?
    Je parle d'eux comme des applications natives.
    Il serait donc facile de programmer pour ce système d'exploitation 😀

    1.    AdrianArroyoStreet dit

      Dans ce cas, je ne vais pas le faire parce que cela demande beaucoup plus de travail, mais il y a un système d'exploitation appelé "est" qui fait ce que vous dites. En fait, la ligne de commande est JavaScript et les fenêtres sont dessinées à l'aide des fonctions JavaScript Canvas. Les ingénieurs de Nintendo l'ont fait et maintenant c'est open source.

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

      1.    man dit

        Valla, merci pour l'info 😀
        Je regarderai

  19.   Patodx dit

    Quiconque peut fabriquer son propre OS peut mourir paisiblement, compte tenu du niveau intellectuel qu'il doit atteindre avec lui; Cela vous fait vous passer du paradis ou de l'enfer.
    Morceau d'affichage.

    1.    Miguel dit

      jusqu'à présent, personne à notre connaissance n'a fait que quelque chose qui peut être considéré comme un système d'exploitation décent fait à partir de zéro, pas même Linux Torvalds comme vous le dites au début, car cela a commencé à partir de sources Unix et tout le reste est écrit en commune à plus d'une personne, la vie est très courte et repartir de zéro est impensable pour quiconque, même si le contraire est voulu, cela se démontre dans de nombreuses erreurs de copier-coller par Linux Torvalds

      1.    skarmiglione dit

        Les sources unix sont fermées, l'utilisation de minix ... ce qui est autre chose.

      2.    Philippe Robina dit

        et ceux qui ont fait QDOS quoi?
        étaient basés sur quelque chose?

  20.   Tesla dit

    D'après ce que je vois, qui n'a pas son propre système d'exploitation, c'est parce qu'il ne le veut pas, hahahaha.

    Maintenant sérieusement, très intéressant! Beaucoup dépasse mes connaissances limitées en programmation, mais je lirai les autres parties de cette série avec anticipation.

    Merci pour le post!

  21.   Manuel R . dit

    Vous m'avez laissé un visage O_O ... sans l'intention de sous-estimer les contributions de qui que ce soit, c'est le plus "pro" que j'ai vu ces derniers temps. Cordialement.

  22.   aitor_cz dit

    Très bon article, Adrián. Continuez s'il vous plaît…

  23.   mj dit

    Vous plaisantez le jour du poisson d'avril?, Ne soyez pas méchant "Émulation de Linus Torvalds: Créez votre propre système d'exploitation à partir de zéro." Je ne pense pas que ce soit difficile pour ceux qui poursuivent une carrière dans un institut de technologie ou une université; mais pour moi, je suis un archer novice (il y a ceux qui nous appellent "Noob" mais je me considère plus Newbie un peu paresseux) qui ressemble à ne pas marcher sur la terre ferme. Quoi qu'il en soit, CET ARTICLE CRÉE BEAUCOUP DE CURIOSITÉ ET SANS DOUTE ADMIRATION ET RESPECT DE SON RÉDACTEUR, FÉLICITATIONS; La première chose que je vais faire est d'essayer de comprendre au moins un peu de ce précieux matériel.
    MERCI Adrian Arroyo Calle, excellent travail et noble transmission de connaissances.

  24.   Pascal Blaire dit

    LEL Excellent post, continuez comme ça.

  25.   f3niX dit

    Quel superbe article, c'est ce qui m'a manqué desde linux. Quelle merveille.

  26.   Rubi dit

    Excellent message, merci beaucoup.
    Je n'ai pas compris ce que fait le fichier link.ld, quelqu'un peut-il me l'expliquer?

    1.    AdrianArroyoStreet dit

      Le fichier link.ld indique à l'éditeur de liens (dans ce cas ld) où chaque partie du code doit se trouver dans le fichier résultant. Nous définissons également le point d'entrée car comme nous n'avons pas de système d'exploitation, nous ne pouvons pas utiliser main comme programme normal, dans ce cas nous sélectionnons la fonction de démarrage.

  27.   Maxi dit

    Super tout votre message! En attendant le 7! Et si j'ai un doute, par exemple, si je voulais seulement exécuter un algorithme, sans OS, comment savoir ce que je peux utiliser et ce que je ne peux pas utiliser?

    1.    AdrianArroyoStreet dit

      Si vous l'utilisez comme ça, vous ne pourrez rien utiliser de stdlib, qui est pratiquement ce que tout le monde utilise (pas de malloc, free, printf, scanf, strcmp, etc.). Tout doit être implémenté directement à partir de la mémoire ou de l'ASM. Peut-être que dans un chapitre supérieur, je vous montrerai comment installer une bibliothèque C pour le système d'exploitation. Si vous utilisez C ++, vous ne pouvez pas utiliser d'exceptions et les opérateurs new et delete (et sûrement plus).

    2.    commutateur dit

      Je pense que esto cela peut vous donner une meilleure idée de la façon de procéder.

  28.   Stephen dit

    Bonjour, il y a environ 5 ans j'ai suivi une publication similaire et développé un micro-noyau qui démarre de la même manière, il a quelques aspects à améliorer, mais cela peut vous intéresser, il fonctionne en mode protégé, exécute le multitâche et effectue la virtualisation de la mémoire, dernièrement j'ai travaillé dessus pilote de disque et lecteur de cd pour le rendre installable et non seulement fonctionner sur live cd ...

  29.   Johan dit

    Cher, j'ai une erreur lors de l'exécution de la commande:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: erreur de syntaxe 5
    collect2: erreur: ld a renvoyé 1 statut de sortie

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

    À la ligne 5, je ne vois pas l'erreur, est-ce que quelqu'un est pareil?

    Je travaille avec un debian wheezy virtualisé dans virtualbox

    1.    Image de balise Julian Reyes Escrigas dit

      ajouter le ";" à la fin de * (. multiboot_header)

  30.   Éric Orellana Romero dit

    Excellente initiative, je suivrai certainement les chapitres de cet article, dans l'intention d'en apprendre beaucoup. Merci beaucoup d'avoir pris le temps de nous enseigner. Un seul détail à cet égard, il faut noter que Linus Torvalds n'est le créateur d'aucun système d'exploitation, il a créé le noyau du système GNU / Linux (celui qui a été utilisé dans d'autres OS), ce qui en vaut toujours la peine, mais c'est Il est important de donner à Richard Stallman le crédit nécessaire pour créer la plupart des OS.

    Merci beaucoup pour votre contribution et j'espère que vous tiendrez compte de mon observation.

  31.   Image de balise Julian Reyes Escrigas dit

    Je déconne le sujet depuis un moment, je me suis intéressé dès que j'ai lu le titre. mais le message continue de passer

    erreur: aucun en-tête multiboot trouvé.
    erreur vous devez d'abord charger le noyau

    J'ai téléchargé ce que je prends dans un dépôt sur github https://github.com/rkmax/GenyOS

    1.    martin villalba dit

      La même chose m'arrive, avez-vous trouvé la solution?

  32.   Carlos dit

    une question que j'ai commencé à présenter la syntaxe et la ligne d'entrée de menu me dit commandnot found qui pourrait me dire pourquoi
    c'est ce que je fais

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: commande introuvable

    1.    AdrianArroyoStreet dit

      Le contenu de ce contenu ne doit pas être entré dans la ligne de commande, mais dans le fichier que vous créez appelé grub.cfg

  33.   Nodétine dit

    Excellent article, merci!

  34.   David dit

    Spectaculaire…!! c'est comme le chaînon manquant.

  35.   r.garciag dit

    J'adore vos tutoriels sur l'émulation de LInus Torvalds, mais il y a une étape que je ne comprends pas, la suivante:
    Maintenant, nous copions START.ELF dans / next dans notre dossier qui simule la racine de notre système d'exploitation. Nous allons dans le dossier racine de notre nouveau système d'exploitation avec la console et vérifions qu'il y a deux fichiers: un /boot/grub/grub.cfg et un autre /next/START.ELF.

    Nous allons dans le répertoire supérieur et appelons un utilitaire pour créer des ISO avec GRUB appelé grub-mkrescue

    Quelqu'un pourrait-il me l'expliquer: p

    1.    AdrianArroyoStreet dit

      Simplement pour générer un ISO minimum que GRUB peut charger, nous copions le noyau dans (le / de l'ISO, n'importe quel dossier) /next/START.ELF et le fichier de configuration GRUB dans (le / de l'ISO, n'importe quel dossier) / boot /grub/grub.cfg. Une fois que cela est fait, nous n'avons pas encore installé GRUB sur l'ISO et il existe un utilitaire qui génère l'ISO à partir d'un dossier et installe GRUB appelé grub-mkrescue. Ensuite, nous finirions par obtenir un ISO amorçable sur lequel GRUB est installé, qui peut lire la configuration pour exécuter ultérieurement START.ELF correctement. Je ne sais pas si je me suis expliqué, mais ce que nous faisons est une sorte de faux système de fichiers avec lequel nous générons un ISO.

  36.   miguel jose guevara attention dit

    Hottie

  37.   Michel Moreno dit

    Eh bien, regardez vraiment un nouveau système, pas tellement, mais si vous améliorez Linux, par exemple en créant un exonucléus Linux avec un composant serveur qui agit comme un micronoyau si vous le souhaitez, c'est-à-dire une structure exo avec un comportement micronoyau qui serait super et linux.

    L'autre chose est que je ne suis pas un expert en programmation, juste quelques c ++ ringards et quelques java, il me suffirait de donner un module au programme du noyau linux, de le vider, de le modifier etc.

  38.   HiverSoldier53 dit

    Sans aucun doute je dois déjà le faire en vacances.

  39.   Fermin dit

    Ce bon et dans quel programme le conçoit-il et le code?
    s'il vous plaît donnez-moi cette réponse

  40.   esprit noir dit

    Lors de la compilation à partir de votre git, j'obtiens:

    [jmponce @ jar build] $ cmake ..
    - Création du répertoire NextRoot
    - Génération de script ISO
    make DESTDIR = installation suivante
    ./iso.sh
    - Doxygen trouvé: / usr / bin / doxygen (version trouvée "1.8.9")
    - Configuration terminée
    - Génération terminée
    - Les fichiers de construction ont été écrits dans: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Analyse des dépendances de la cible START.ELF
    [7%] Construction de l'objet ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Construction de l'objet CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Lier l'exécutable CXX START.ELF
    / usr / bin / ld: Incompatible /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a est ignoré lors de la recherche de -lgcc
    / usr / bin / ld: impossible de trouver -lgcc
    collect2: erreur: ld a renvoyé l'état de sortie 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: échec des instructions pour la cible 'src / START.ELF'
    make [2]: *** [src / START.ELF] Erreur 1
    CMakeFiles / Makefile2: 106: échec des instructions pour la cible 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Erreur 2
    Makefile: 117: Échec des instructions pour la cible «tous»
    make: *** [all] Erreur 2

    1.    AdrianArroyoStreet dit

      L'erreur semble être qu'il ne peut pas trouver llibgcc puisque vous avez la version 64 bits et actuellement le système de construction est obligé d'utiliser 32 bits. Vous devez installer un pack de compatibilité sur votre distribution ou, mieux, utiliser un système 32 bits.

      1.    Ronaldo Rodríguez dit

        J'ai 32 bits et j'obtiens la même erreur, voulez-vous dire le système d'exploitation ou l'architecture? le mien est 64 bits, mais j'utilise Ubuntu 32 bits, ne demandez pas, des problèmes financiers, avec ça je dis tout.

  41.   Jorge dit

    Excellent sujet, en attente d'une plus grande portée. À votre santé

  42.   Jean dit

    Super j'espère plus

  43.   Soid Perez dit

    Bonjour, je suis un jeune ambassadeur qui souhaite créer un système d'exploitation prenant en charge tous les programmes et plates-formes afin que les développeurs n'aient pas à avoir des machines ou applications ou programmes puissants sur un PC.
    C'est pourquoi je suis intéressé par cet article, mais lorsque je télécharge votre git ou que j'essaie de le créer, tout fonctionne jusqu'à ce que j'exécute la commande ./iso.sh ou grub-mkrescue -o nextdivel.iso nextroot vous obtenez cette erreur

    "Grub-mkrescue: avertissement: Votre xorriso ne prend pas en charge" –grub2-boot-info ". Certaines fonctionnalités ont été désactivées. Utilisez xorriso 1.2.9 ou version ultérieure.
    grub-mkrescue: avertissement: votre xorriso ne prend pas en charge "–grub2-boot-info". Votre image de noyau est trop grande. Le démarrage du disque a été désactivé. Utilisez xorriso 1.2.9 ou version ultérieure .. »
    Je n'ai vraiment aucune idée car je connais beaucoup les applications et les sites Web mais je ne sais rien de grub

    1.    AdrianArroyoStreet dit

      Vous devrez peut-être mettre à jour le programme xorriso sur votre distribution. Quelle distribution et quelle version utilisez-vous?

      1.    Soid perez dit

        J'utilise xubuntu 14.04lts et j'essaye d'exécuter xorriso mais le shell me dit qu'il ne peut pas le trouver et j'obtiens apt-get install xorriso bien que j'attendais sincèrement une réponse car j'ai eu une mauvaise expérience en installant des choses que je ne connais pas sous linux hehe. Je vais le mettre à jour maintenant et vous dire ce qui s'est passé

      2.    AdrianArroyoStreet dit

        Ensuite, installez xorriso depuis le centre logiciel ou simplement depuis le terminal, faites "sudo apt-get install xorriso"

      3.    Soid perez dit

        J'ai déjà fait tout ce que vous m'avez dit et avec git et le mien, j'obtiens ce xorriso 1.3.2: manipulateur du système de fichiers RockRidge, projet libburnia.

        Courant du lecteur: -outdev 'stdio: nextdivel.iso'
        Media current: fichier stdio, écrasable
        État du support: vide
        Résumé média: 0 session, 0 blocs de données, 0 données, 1901m gratuits
        Ajouté à l'image ISO: répertoire '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 fichiers ajoutés en 1 seconde
        xorriso: FAILURE: Impossible de déterminer les attributs du fichier source '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': aucun fichier ou répertoire de ce type
        xorriso: UPDATE: 546 fichiers ajoutés en 1 seconde
        xorriso: abandon: -abort_on 'FAILURE' a rencontré 'FAILURE'
        et velours côtelé Je ne comprends pas ma structure est /nextroot/boot/grub/grub.cfg et nextroot / next / START.ELF

      4.    Soid perez dit

        Merci, je suis prêt à avancer, un ami m'a aidé et m'a dit que ce que j'avais fait de mal était l'organisation du répertoire, alors je l'ai ajusté et c'est tout

      5.    erik dit

        Excusez-moi, pouvez-vous me dire quelle procédure vous avez effectuée car je reçois l'erreur rien à démarrer: aucun fichier ou répertoire

        aucun périphérique amorçable.

  44.   jose dit

    À votre santé! J'allais vous demander la faveur si vous pouviez m'envoyer un email avec ce que vous expliquez ici, je suis un peu confus et j'ai besoin de comparer ce que j'ai avec ce que vous expliquez, peut-être que ce qui n'est pas clair pour moi est de savoir si la création du grub. cfg se fait dans le terminal gcc ou où exactement? Merci beaucoup mon ami!

    1.    AdrianArroyoStreet dit

      Vous créez le fichier grub.cfg avec n'importe quel éditeur de texte et vous devez l'enregistrer dans PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano dit

    Bonjour Adrian, tout d'abord féliciter et merci pour votre contribution.

    Vous savez que je fais cela pour une pratique et j'ai commencé à le mettre en place suite à votre tutorat, mais après avoir commencé j'ai trouvé la première erreur

    $ comme -o kernel.o -c kernel.asm
    bash: as: commande introuvable ...
    Les commandes similaires sont:
    'sa'
    'ac'

    Je travaille sur fedora 20, et je ne trouve pas de solution à cet égard, j'apprécierais vos conseils pour savoir si je dois changer quelque chose dans gcc ou gas

    merci d'avance

    1.    AdrianArroyoStreet dit

      Vous devez installer GAS pour que je puisse voir le code d'erreur. Je n'ai pas Fedora sous la main mais en théorie, si vous installez yum gcc-c ++, vous installerez toute la suite GCC et elle est généralement fournie avec GNU As.

  46.   Gaston Ramirez dit

    Je suis avec vous, je sais quelque chose sur C ++, C # (bien que ce dernier ne soit pas très utile en la matière) le mauvais est que je manque encore d'expérience, je ne gère jamais le langage C, votre publication est géniale, je n'ai pas grand chose à dire, si j'ai le temps, je vois. Je vous remercie.

  47.   Thérèse de Jésus nah sanchez dit

    Merci beaucoup pour votre aide précieuse….

  48.   jky dit

    J'adore linux c'est le meilleur quartier il y a la vérité car mes fenêtres sont des ordures à un que je sais que le créateur de linux est le créateur de windows

  49.   Rode dit

    Bonjour, je reçois une erreur dans grub dit
    erreur: fichier /next/START.ELF introuvable
    erreur: vous devez d'abord charger le noyau

    Pourriez-vous m'aider et googler mais je ne trouve pas

  50.   Henri Avila dit

    S'il vous plaît, comment puis-je lui faire afficher le message HELLO WORLD? Je suis un débutant et je n'en sais toujours pas assez

  51.   CARLOS GUERRERO ALVAREZ dit

    Ce qui m'arrive:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: relocalisation R_X86_64_32 contre le symbole `stack 'ne peut pas être utilisé lors de la création d'un objet PIE; recompiler avec -fPIE
    / usr / bin / ld: échec du lien final: section non représentable en sortie
    collect2: erreur: ld a renvoyé 1 statut de sortie