Emulant Linus Torvalds: Crea el teu propi sistema operatiu des de 0 (I)

Abans de res comentar que aquest és el meu primer article i que desitjo que us agradi a tots.

Linus Torvals feliç

En aquesta sèrie anem a emular Linus Torvalds, Crearem el nostre sistema operatiu des de 0. En aquest primer episodi veurem l'arrencada i posarem un text en pantalla des del nostre nucli.

En el meu cas el sistema operatiu es diu NextDivel. La primera decisió que hem de fer res més plantejar-nos el sistema operatiu és quin serà el bootloader?

Aquí hi ha múltiples variants, i fins i tot podríem crear-ne un nosaltres; però, en aquest tutorial vaig a utilitzar GRUB, Perquè la majoria coneix més o menys alguna cosa d'ell. Creem una carpeta que serà el root del nostre sistema operatiu i allà vam crear la carpeta / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Allà vam crear el fitxer grub.cfg de la següent manera:

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

En aquest fitxer hem vist com GRUB carregarà el nostre nucli, en aquest cas, en /next/START.ELF. Ara hem de crear el nostre nucli.

Per a això necessitarem el GCC y GAS (L'assemblador de el projecte GNU, Sol venir amb el gcc). Així doncs anem a crear el nucli.

Primer fem un arxiu anomenat kernel.asm. Aquest fitxer contindrà el punt d'inici del nostre nucli ia més definirà el multiboot (una característica d'alguns bootloaders com GRUB). El contingut d'kernel.asm serà:

.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

Tot el relacionant amb multiboot és simplement seguir l'especificació res més. Tot començarà a start, cridarà a multiboot_entry, haurem definit el multiboot header en els primers 4k i el posarem (amb movl).

Més tard fem una crida a NextKernel_Main que és la nostra funció en C de l'nucli. En el loop fem una halt per aturar l'ordinador. Això es compila amb:

as -o kernel.o -c kernel.asm

Ara entrarem a programar en C. Pensaràs que ara tot és bufar i fer ampolles, posem una imprimirf en principal i ja està, ho hem fet.

Doncs no, ja que imprimirf y principal són funcions que defineix el sistema operatiu, però nosaltres ho estem creant! Només podrem fer servir les funcions que nosaltres mateixos definim.

En capítols posteriors parlaré de com posar la nostra pròpia lliuraria de l'C (glibc, bionic, newlibc) però temps a el temps. Hem parlat que volem posar text en pantalla, bé veurem com ho fem.

Hi ha dues opcions, una és trucar a la BIOS i una altra és gestionar la memòria de la pantalla directament. Anem a fer això últim ja que és més clar des de C ia més ens permetrà fer-ho quan entrem en mode protegit.

Creem un fitxer anomenat NextKernel_Main.c amb el següent contingut:

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

Amb això manipulem directament la memòria VGA i caràcter a caràcter ho anem escrivint. Compilem desactivant la stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Si has arribat fins aquí voldràs provar ja el teu nou i flamant sistema operatiu, però encara no hem acabat. Necessitem un petit fitxer que digui a l'compilador en quina posició de l'arxiu deixar cada secció. Això es fa amb un linker script. Creem 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 = .;
}

Amb això definim la posició de cada secció i el punt d'entrada, start, que hem definit en kernel.asm. Ara ja podem unir tot aquest potinga:

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

Ara copiem START.ELF al / next dins la nostra carpeta que simula el root del nostre sistema operatiu. Ens dirigim a la carpeta root del nostre sistema operatiu nou amb la consola i verifiquem que hi ha dos arxius: un grub.cfg i un altre /next/START.ELF.

Anem a directori superior i cridem a una utilitat de creació ISOs amb GRUB anomenada grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Un cop haguem fet això tindrem una ISO. Aquesta ISO pot obrir-se en ordinadors x86 (64 bits també) i màquines virtuals. Per provar-ho, vaig a utilitzar QEMU. Fem una crida a QEMU des de la línia de comandes:

qemu-system-i386 nextdivel.iso

arrencarà SeaBIOS i més tard tindrem GRUB. Després si tot va correcte veurem la nostra frase.
Pensaràs que això és difícil, et responc, sí que ho és.

Realment crear un sistema operatiu és difícil i això que aquest d'aquí no fa res útil. En propers capítols veurem com gestionar colors a la pantalla, reservar memòria i si puc, com obtenir dades de el teclat.

Si algú no vol copiar tot el que hi ha aquí, tinc un repositori en GitHub (Més elaborat) amb el sistema operatiu NextDivel. Si vols compilar NextDivel només has de tenir git i 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

Us animo a col·laborar en NextDivel si tens temps i ganes de crear un sistema operatiu. Potser fins i tot superior a Linux ... el temps ho dirà.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   ILAV va dir

    :O

    1.    marianogaudix va dir

      Torvalds prenc el sistema operatiu Minix (derivat d'UNIX) a Andrew S. Tanenbaum i el milloro.

      Tanenbaum s'ha barallat amb Linus, es van insultar. Tanenbaum diu que el microkernel és el futur (Hurd, Minix nou con microkernel).

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

  2.   eliotime3000 va dir

    Aquest ha estat el millor post que he vist fins ara en aquest bloc. Ja vull saber què més fer.

  3.   Carlos.Gude va dir

    Impressiona't.

  4.   axl va dir

    Realment impressionant !!

  5.   rhoconlinux va dir

    FUUUUUUUA!
    és el post més geek que vaig veure en la meva vida jeje. Felicitacions Adrián, un article de puta mare! hípers interessant !!! 🙂

    1.    Joaquin va dir

      Coincideixo. M'imagino aquesta situació:
      Usuari avançat de GNU / Linux (amb cara de felicitat):
      «Ja sé compilar el meu Gentoo»

      Nerd (amb actitud despectiva): «pff, jo he creat la meva pròpia distro ...»

      1.    desikoder va dir

        Si, jo es crear la meva pròpia distro linux. De fet en això estic desenvolupant un initramfs i un nucli per a un linux encastat. No és el mateix crear un sistema operatiu que una distro linux. El primer és molt més difícil, gairebé impossible, el segon tal com ho has dit pot ser qualsevol cosa, fins i tot ubuntu amb el logo canviat xD. Així que jo ho deixaria així:

        Usuari avançat de GNU / Linux (amb cara de felicitat)
        - ja sé compilar el meu Gentoo

        Semi-Nerd
        - Pff, jo he seguit un linux from scratch i he fet la meva pròpia distro

        Nerd (amb actitud menyspreadora)
        - pff, doncs jo he programat un nucli en assemblador i en C

        Salutacions!

  6.   cronos va dir

    Això em resulta interessant, a l'espera dels següents capítols.

  7.   abimaelmartell va dir

    fa temps vaig veure aquest tutorial, és per a C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoCarrer va dir

      Gràcies per l'enllaç, el trobaré una ullada.

  8.   José Jácome va dir

    Voldria un Sistema Operatiu 100% compatible amb els gràfics AMD: /

    1.    IvanLinux va dir

      Windows

      1.    José Jácome va dir

        jajaja en Windows Catalyst no soporta a OpenGL, encara que en Linux no puc usar-li tota la potència gràfica seguiré esperant per veure que passa!

        1.    beny_hm va dir

          només espera que valve arrasi amb el mercat

  9.   KZKG ^ Gaara va dir

    Màgic, perfecte, excel·lent aportació, s'albira com una gran sèrie de posts 🙂

  10.   O_Pixot_O va dir

    Buah em gustaria saber programar per poder ajudar-te, simplement com a forma de practicar amb els coneixements que vas aprenent ja ajuda un. De moment et deixo el lema per captar l'atenció cap al projecte un cop el acabis «Fes servir NextDivel, el porno es veu igual (o millor).», Arrasaràs xD.

  11.   thisnameisfalse va dir

    Mooooooolaaa !!!!

  12.   Nordri va dir

    Molt bon article, però només per curiositat per què no has seguit el projecte de Linux From Scratch ??

    Salutacions

    1.    AdrianArroyoCarrer va dir

      Bé, Linux from Scratch està molt bé, i pots dir que és teu, però realment és molt mecànic:
      -Descarregar fonts
      -Petxar-les
      -Compilar
      Instal·lar
      -següent
      Aquí encara que a la fi el resultat sigui pitjor pots dir que has revisat tots els arxius.

    2.    desikoder va dir

      Com es dedueix de la meva anterior comentari, perquè no té el mateix nivell de complexitat. A més, linux from scratch no és realment, en contra del seu nom, crear un sistema des de 0. Crear un sistema de cap és programar-la teva, escriure el teu propi nucli, no el nucli linux, si és possible fins i tot el teu propi bootloader en comptes de grub, lilo, syslinux, etc. Encara que un LFS no és poca cosa i és força complex, ni se li apropa a programar el teu propi nucli ...

      A més, concordo amb AdrianArroyoCalle en que és massa mecànic, jo alguna vegada m'ho he llegit i acabes desistint en la sisena pàgina, a més et diuen que facis servir nosecuales versions dels paquets perquè si no les instruccions no funcionen (això demostra la falta de flexibilitat , en la meva opinió). Jo crec que és millor tenir una mica d'idea pròpia, compilar els paquets que tu vulguis, fins i tot programar algun, compilar un nucli linux i en pau.

      Salutacions!

  13.   galeta va dir

    uuuoooohh !! mai m'havia capturat tant un post com ho va fer aquest.
    Si us plau, continua 😀

  14.   linux_user va dir

    No se que aquesta malament:

    error: no multiboot header found.
    error you need to load the nucli first

    1.    AdrianArroyoCarrer va dir

      Si de cas et serveix de consol jo vaig tenir el mateix error. Prova amb les fonts que estan en GitHub, aquí l'error ja se soluciona. De totes maneres crec que si canvies la línia de grub.cfg de «multiboot /next/START.ELF" a "nucli /next/START.ELF» podria funcionar. No ho sé exactament.

      1.    mcplatà va dir

        Primer de tot, magnífica entrada 🙂
        Estic tenint el mateix problema de carregar el nucli des grub. Fins i tot fent servir les fonts de l'GitHub o canviant multiboot per nucli ...

        error: no multiboot header found.
        error: no loaded nucli

        1.    AdrianArroyoCarrer va dir

          Estàs usant Clang com a compilador? Canvia'l pel gcc
          T'has acordat de fer servir el linker script? És necessari perquè el linker (ld en el nostre cas) sàpiga en quin lloc de l'arxiu posarà cada cosa. En aquest cas el multiboot header deu estar a del principi.
          Estàs usant el sistema de CMake? Si el fas servir crec que no falla.
          Si tampoc et funciona intentaré trobar una altra solució.

  15.   khourt va dir

    [+ 100]
    Simplement genial !!!

  16.   invisible15 va dir

    Mola molt 🙂

  17.   Tanrax va dir

    Em trec el barret. Impressionant post. Moltes felicitats.

  18.   home va dir

    Woha!
    Estaria genial que es poguessin obrir aplicacions trobes a HTML5 i Javascript sense haver de fer servir un navegador, és això possible?
    Parlo de que siguin com aplicacions natives.
    Així seria fàcil programar per a aquest sistema operatiu 😀

    1.    AdrianArroyoCarrer va dir

      En aquest cas no ho vaig a fer perquè porta per darrere molta més feina però hi ha un sistema operatiu anomenat «és» que fa el que tu dius. De fet la línia d'ordres és JavaScript i les finestres es dibuixen usant les funcions Canvas de JavaScript. Ho van fer enginyers de Nintendo i ara és de codi obert.

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

      1.    home va dir

        Tanca, gràcies per la info 😀
        li donaré un cop d'ull

  19.   patodx va dir

    Qui pugui fer el seu propi SO pot morir tranquil·lament, ja que el nivell intel·lectual que ha d'aconseguir amb això; ho fa prescindir de el cel o l'infern.
    Tros de posteo.

    1.    Miguel va dir

      fins ara ningú que sàpiga s'ha fet només una cosa que es pugui dir que és un sistema operatiu decent fet des de zero, ni tan sols Linux Torvalds com dieu a del principi, ja que aquest va partir de les fonts d'Unix i tota la resta és autoria en comuna de més d'una persona, la vida és molt curta i partir realment des de zero és impensable per a ningú encara que es vulgui dir el contrari és demostrable en molts errors comesos en copiar i enganxar per Linux Torvalds

      1.    skarmiglione va dir

        Les fonts d'unix són tancades, l'ús minix ... que és una altra cosa.

      2.    Felip Robaina va dir

        i els que van fer QDOS que?
        es van basar en alguna cosa?

  20.   Tesla va dir

    Pel que veig, qui no té el seu propi sistema operatiu és perquè no vol, jajajajaja.

    Ara de debò, molt interessant! Escapa molt al meu escàs coneixement de programació, però llegiré amb ànsia les altres parts d'aquesta sèrie.

    Gràcies pel post!

  21.   Manuel R va dir

    Em vas deixar amb cara de O_O ... sense la intenció de menysprear les aportacions de ningú, és d'allò més «pro» que he vist últimament. Salutacions.

  22.   aitor_cz va dir

    Molt bon article, Adrián. Si us plau, continua ...

  23.   mj va dir

    És broma pel dia dels innocents ?, no siguis dolent «Emulant Linus Torvalds: Crea el teu propi sistema operatiu des de 0». No crec que sigui dificil per al que cursa una carrera en algun institut de tecnologia o universitat; però per a mi que sóc un novell archer (n'hi ha que ens diuen «Noob» però em considero més Newbie una mica fluix) això sona com a no trepitjar terra. De totes maneres AQUEST ARTICLE CREA MOLTA CURIOSITAT I SENSE DUBTE admiració i respecte PER LA SEVA REDACTOR, FELICITACIONS; el primer que faré és intentar comprendre a l'mínim una mica aquest valuós material.
    GRÀCIES Adrian Arroyo Carrer excel·lent treball i noble lliurament de coneixements.

  24.   Blaire Pascal va dir

    LEL Excel·lent post, segueix així.

  25.   F3niX va dir

    Que Grandiós post, això és el que estranyava de desde linux. Quina meravella.

  26.   Ruby va dir

    Genial el post, moltes gràcies.
    No vaig entendre que fa el fitxer link.ld, m'ho pot explicar algú ??

    1.    AdrianArroyoCarrer va dir

      El fitxer link.ld diu a l'linker (en aquest cas ld) en què posició dins de el fitxer resultant ha d'estar cada part de el codi. També definim el punt d'entrada ja que al no tenir sistema operatiu no tenim suport per main com un programa normal, en aquest cas seleccionem la funció start.

  27.   Maxi va dir

    Bonissim tots els teus post! Esperant per el 7! El que si em queda un dubte, per exemple, si només volgués córrer un algoritme, sense SO, com es que puc usar i que no de C?

    1.    AdrianArroyoCarrer va dir

      Si ho fas servir així tal qual no podries fer servir res de la stdlib, que pràcticament és el que tothom fa servir (res de malloc, free, printf, scanf, strcmp, etc.). Tot s'ha d'implementar directament de memòria o ASM. Pot ser que en un capítol superior ensenyi com instal·lar una llibreria de C per al sistema operatiu. Si fas servir C ++ tampoc pots utilitzar excepcions i els operadors new i delete (i segurament més coses).

    2.    Swicher va dir

      crec que AIXÒ et pot donar una millor idea de com fer-ho.

  28.   Esteban va dir

    Hola, fa uns 5 anys vaig seguir una publicació similar i vaig desenvolupar un microkernel que inicia de la mateixa manera, té alguns aspectes a millorar, però pot ser que pugui interessar, corre a manera protegida, executa mutlitarea i realitza virtualització de memòria, últimament vaig treballar al controlador de disc i unitat de cd per poder fer-ho instal·lable i no només corri en live cd ... Salutacions.

  29.   Johan va dir

    Benvolguts, tinc un error en a l'hora d'executar la comanda:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 syntax error
    collect2: error: ld ha retornat 1 estat de sortida

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

    En la línia 5 no veig l'error, algú li passa el mateix?

    Estic treballant amb un debian wheezy virtualitzat en virtualbox

    1.    Julian Reis Escrigas va dir

      afegeix el «;» a la fi de * (. multiboot_header)

  30.   Eric Orellana Romero va dir

    Excel·lent iniciativa, seguiré sense dubte els capítols d'aquest post, prentendo aprendre molt amb això. Moltes gràcies per donar-te el temps d'ensenyar-nos. Un sol detall a l'respecte, cal destacar que Linus Torvalds no és el creador de cap sistema operatiu, ell crec el nucli de sistema GNU / Linux (el qual ha estat utilitzat en altres SO), el que no deixa de ser meritori, però és important donar-li els crèdits necessaris a Richard Stallman per la creació de la major part de l'SO.

    Moltes gràcies per l'aportació i espero que consideres la meva observació.

  31.   Julian Reis Escrigas va dir

    Va portar estona trastejant amb el tema, m'interesso tan aviat com vaig llegir la capçalera. però segueix sortint el missatge

    error: no multiboot header found.
    error you need to load the nucli first

    he pujat el que porto a un repo a github https://github.com/rkmax/GenyOS

    1.    Martin Villalba va dir

      A mi em passa el mateix Vas trobar la solució?

  32.   Carlos va dir

    una pregunta vaig començar a introduir la sintaxi i la línia de menuentry em diu commandnot found aguien podria dir-me per què
    això és el que faig

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: command not found

    1.    AdrianArroyoCarrer va dir

      El contingut d'aquest contingut no és per instroducirlo en la línia d'ordres, sinó en el fitxer que creguis anomenat grub.cfg

  33.   Nodetí va dir

    Excel·lent article, Gràcies!

  34.   David va dir

    Espectacular ... !! simplement és com la baula perduda.

  35.   r.garciag va dir

    M'encanta teus tutorials de Emulant a Linus Torvalds, però hi ha un pas que no entenc, el següent:
    Ara copiem START.ELF al / next dins la nostra carpeta que simula el root del nostre sistema operatiu. Ens dirigim a la carpeta root del nostre sistema operatiu nou amb la consola i verifiquem que hi ha dos arxius: un grub.cfg i un altre /next/START.ELF.

    Anem a directori superior i cridem a una utilitat de creació ISOs amb GRUB anomenada grub-mkrescue

    Podria algú explicar-m'ho: p

    1.    AdrianArroyoCarrer va dir

      Simplement per generar una ISO mínima que GRUB pugui carregar copiem el nucli a (el / de la ISO, qualsevol carpeta) /next/START.ELF i el fitxer de configuració de GRUB a (el / de la ISO, qualsevol carpeta) / boot /grub/grub.cfg. Un cop fet això no hem instal·lat GRUB encara en la ISO i és que hi ha una utilitat que genera la ISO des d'una carpeta i instal GRUB anomenada grub-mkrescue. Llavors finalment acabaríem amb una ISO booteable que té instal·lat GRUB, que pot llegir la configuració per a posteriorment executar START.ELF correctament. No se si m'he explicat, però el que fem és una mena de sistema de fitxers fals amb el que generem una ISO.

  36.   miguel jose guevara atencions va dir

    boníssim

  37.   Michael Moreno va dir

    doncs mira realment un nou sistema no tant però si millorar el linux per exemple crear un Exonúcleo linux amb un component servidor que faci de micronucli si així es desitgés és a dir una estructura exo amb comportament micronucli això seria súper i linux.

    l'altre és que no sóc expert en programació només uns cursi-cents de c ++ i una mica de java tindria prou amb donar-li a l'nucli linux programar mòdul destripándolo modificar etc

  38.   Soldat d’hivern53 va dir

    Sens dubte ja he de fer en vacances.

  39.   Fermín va dir

    sta bo i en què programa el dissenya i el codifica
    per favor em brindar aquest resposta

  40.   DarkMind va dir

    A l'compilar des del teu git em surt:

    [Jmponce @ pot build] $ cmake ..
    - Creating NextRoot directory
    - Generating ISO script
    make DESTDIR = next install
    ./iso.sh
    - Found Doxygen: / usr / bin / doxygen (found versió «1.8.9»)
    - Configuring done
    - Generating done
    - Build files have been written to: / home / jmponce / next-divel / build
    [Jmponce @ pot build] $ make
    Scanning dependencies of target START.ELF
    [7%] Building ASM-ATT object src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Building CXX object src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [El 21%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [El 28%] Building CXX object src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [El 64%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [El 71%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [El 78%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Building CXX object src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Linking CXX executable START.ELF
    / Usr / bin / ld: se salta l'/usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a incompatible mentre es busca -lgcc
    / Usr / bin / ld: no es pot trobar -lgcc
    collect2: error: ld va retornar l'estat de sortida de 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: error en les instruccions per a l'objectiu 'src / START.ELF'
    make [2]: *** [src / START.ELF] Error 1
    CMakeFiles / Makefile2: 106: error en les instruccions per a l'objectiu 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Error 2
    Makefile: 117: error en les instruccions per a l'objectiu 'all'
    make: *** [all] Error 2

    1.    AdrianArroyoCarrer va dir

      L'error sembla ser que no troba llibgcc ja que tens la versió de 64 bits i actualment el sistema de compilació està forçat a fer servir 32 bits. Hauries de intalar un paquet de compatibilitat en el teu distro o millor, s'usa un sistema de 32 bits.

      1.    Ronaldo Rodriguez va dir

        Jo tinc de 32 bits i surt aquest mateix error, ¿et refereixes a sistema operatiu o l'arquitectura? la meva és 64 Bits, però estic fent servir Ubuntu de 32 bit, no preguntin, problemes econòmics, amb això ho dic tot.

  41.   Jorge va dir

    Excel·lent tema, a l'espera de majors abastos. salutacions

  42.   Jhon va dir

    Genial espere per mes

  43.   Soid Pérez va dir

    Hola sóc un jove ambisio que deso crear un sistema operatiu que acmita tots els programes i plataformes perquè els desenvolupadors no hagin de tenir makines potents ni ifinidades d'aplicacions o programes en una pc.
    per això estic interessat en aquest post però quan descàrrec teu git o intent crear-lo jo tot va vien fins que va executar la comanda ./iso.sh o grub-mkrescue -o nextdivel.iso nextroot em surts aquest error

    «Grub-mkrescue: avís: La seva xorriso no suporta« -grub2-boot-info ». Algunes característiques s'han desactivat. Utilitza xorriso 1.2.9 o posterior ..
    grub-mkrescue: avís: La seva xorriso no suporta «-grub2-boot-info». La seva imatge de el nucli és massa gran. L'arrencada com a disc s'ha desactivat. Utilitza xorriso 1.2.9 o posterior .. »
    o de veritat no m'he d ni idea ja que es molt d'aplicacions i de webs però no ce res de grub

    1.    AdrianArroyoCarrer va dir

      Potser hagis actualitzar el programa xorriso al teu distro. Què distro i versió fas servir?

      1.    Soid Perez va dir

        ús xubuntu 14.04lts i proveu d'executar xorriso però la shell em diu que no el troba i em surt apt-get install xorriso encara que sincerament esperava alguna resposta perquè e tingut mala experiència instal·lant coses que no conosco a linux jeje. el actualitzare ara mateix i et dic que pas

      2.    AdrianArroyoCarrer va dir

        Llavors instal xorriso des del centre de programari o simplement des de la terminal fes «sudo apt-get install xorriso»

      3.    Soid Perez va dir

        ja vaig fer tot el que em dijistes i tant amb el git i amb el meu em surt això xorriso 1.3.2: ROCKRIDGE filesystem Manipulator, libburnia project.

        Drive current: -outdev 'stdio: nextdivel.iso'
        Mitjana current: stdio file, overwriteable
        Mitjana per a l'estat: is blank
        Mitjana summary: 0 sessions, 0 data blocks, 0 data, 1901m free
        Added to ISO image: directory '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 files added in 1 seconds
        xorriso: FAILURE: Can not determini attributes of source file '/ mitjana / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': No such file or directory
        xorriso: UPDATE: 546 files added in 1 seconds
        xorriso: Aborting: -abort_on 'FAILURE' encountered 'FAILURE'
        i de pana no entenc mie estructura és /nextroot/boot/grub/grub.cfg i nextroot / next / START.ELF

      4.    Soid Perez va dir

        Gràcies ja estic a punt per avançar un amic em va ajudar i em va dir el que vaig fer malament era l'organització de directori així que el s'acomodi i llest

      5.    Erik va dir

        disculpa em podis indicar que procediment vas realitzar ja que m'apareix l'error nothing to boot: no such file or directory

        no bootable device.

  44.   jose va dir

    Salutacions! t'anava a demanar el favor si em podies enviar un correu amb el que expliques aquí, m'he embolicat una mica i necessito comparar el que porto amb el que expliques, potser el que no em queda clar és si la creació de el fitxer grub. cfg es fa en el gcc de la terminal o on exactament? moltes gràcies amic!

    1.    AdrianArroyoCarrer va dir

      El fitxer grub.cfg ho creguis amb un editor de text qualsevol i l'has de guardar a CARPETA_DEL_PROYECTO / boot / grub / grub.cfg

  45.   Jhuazano va dir

    Hola Adrian primer que res felicitar-te i agrair la teva aportació.

    Saps estic realitzant això per una pràctica i em vaig disposar a armar-seguint el teu tut però després de començar em trobi el primer error

    $ As -o kernel.o -c kernel.asm
    bash: es: no es va trobar l'ordre ...
    Les ordres similars són ::
    'Sa'
    'Ac'

    estic treballant sobre fedora 20, i no trobo solucio als el respecte agrairia la teva orientació sobre si he de canviar alguna cosa de gcc o gas

    per endavant gràcies

    1.    AdrianArroyoCarrer va dir

      Has d'instal·lar GAS pel que puc veure el codi d'error. No tinc Fedora a mà però en teoria si fas yum install gcc-c ++ instal·laràs tota la suite de GCC i en ella sol venir GNU As.

  46.   Gastón Ramírez va dir

    Jo estic amb tu, es una mica de C ++, C # (tot i que aquest útlim no serveix de molt en aquest tema) el dolent és que encara em falta experiència, mai manegi llenguatge C, aquesta genial la teva publicació, em no tinc molt per dir, si tinc temps veig. Gràcies.

  47.   Teresina de l'jesus nah sanchez va dir

    moltes gràcies de gran ajuda ....

  48.   jky va dir

    m'encanta linux és el millor districte que hi ha la veritat per a mi windows és escombraries a un que jo sé que el creador de Linux és el creador de windows

  49.   Va conduir va dir

    Hola Em surt un error en grub diu
    error: file /next/START.ELF Not found
    error: you need to load the nucli first

    Em podrien Ajudar i Googlejat però no trobo

  50.   Enric Avila va dir

    Si us plau com puc fer perquè mostri el missatge de HOLA MÓN sóc principiant i desconec encara força

  51.   CARLOS GUERRERO ALVAREZ va dir

    A mi em passa el següent:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / Usr / bin / ld: kernel.o: relocation R_X86_64_32 against symbol `stack 'can not be used when making a PEU object; recompileu with -fPIE
    / Usr / bin / ld: final link failed: nonrepresentable section on output
    collect2: error: ld ha retornat 1 estat de sortida