Emulând Linus Torvalds: Creați-vă propriul sistem de operare de la zero (I)

În primul rând, comentează că acesta este primul meu articol și că sper să vă placă tuturor.

Linus Torvals fericit

În această serie vom emula Linus Torvalds, vom crea sistemul nostru de operare de la 0. În acest prim episod vom vedea boot-ul și vom pune un text pe ecran din nucleul nostru.

În cazul meu se numește sistemul de operare NextDivel. Prima decizie pe care trebuie să o luăm imediat ce luăm în considerare sistemul de operare este ce va fi bootloader-ul?

Aici există mai multe variante și am putea chiar să creăm una singură; cu toate acestea, în acest tutorial voi folosi GRUB, pentru că majoritatea știu mai mult sau mai puțin ceva despre el. Creăm un folder care va fi rădăcina sistemului nostru de operare și acolo creăm folderul / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Acolo creăm fișierul grub.cfg după cum urmează:

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

În acest fișier am văzut cum GRUB ne va încărca nucleul, în acest caz, în /next/START.ELF. Acum trebuie să ne creăm nucleul.

Pentru aceasta vom avea nevoie de CGC y GAS (asamblatorul proiectului GNU, vine de obicei cu gcc). Deci, vom crea nucleul.

Mai întâi realizăm un fișier numit kernel.asm. Acest fișier va conține punctul de plecare al nucleului nostru și va defini, de asemenea, multiboot (o caracteristică a unor bootloadere, cum ar fi GRUB). Conținutul kernel.asm va fi:

.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 ce ține de multiboot este pur și simplu să nu mai urmezi specificațiile nimic. Totul va începe la început, va apela multiboot_entry, vom avea definit antetul multiboot în primele 4k și îl vom pune (cu movl).

Mai târziu numim NextKernel_Main care este funcția noastră de nucleu C. În buclă ne oprim pentru a opri computerul. Aceasta se compilează cu:

as -o kernel.o -c kernel.asm

Acum vom intra în programare în C. Vei crede că acum totul este o bucată de tort, punem un printf en principal și atât, am făcut-o.

Nu, de atunci printf y principal sunt funcții care sunt definite de sistemul de operare, dar le creăm! Putem folosi doar funcțiile pe care le definim noi înșine.

În capitolele ulterioare voi vorbi despre cum să punem propria noastră bibliotecă C (glibc, bionic, newlibc), dar din când în când. Am discutat că vrem să punem text pe ecran, bine vom vedea cum o facem.

Există două opțiuni, una este să apelați BIOS-ul iar un altul este să gestionați memoria de ecran direct. Vom face acest lucru din urmă, deoarece este mai clar de la C și ne va permite, de asemenea, să o facem atunci când intrăm în modul protejat.

Creăm un fișier numit NextKernel_Main.c cu următorul conținut:

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

Cu aceasta manipulăm direct memoria VGA și caracter cu caracter, îl scriem. Compilăm dezactivând stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Dacă ați ajuns până acum, veți dori să încercați sistemul dvs. de operare nou-nouț acum, dar nu am terminat încă. Avem nevoie de un mic fișier care să îi spună compilatorului unde se află fișierul pentru a părăsi fiecare secțiune. Acest lucru se face cu un script linker. Creăm 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 = .;
}

Cu aceasta definim poziția fiecărei secțiuni și punctul de intrare, start, pe care le-am definit în kernel.asm. Acum putem uni toate aceste preparate:

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

Acum copiem START.ELF în / următorul în folderul nostru care simulează rădăcina sistemului nostru de operare. Mergem în folderul rădăcină al noului nostru sistem de operare cu consola și verificăm dacă există două fișiere: unul /boot/grub/grub.cfg și altul /next/START.ELF.

Mergem în directorul superior și apelăm un utilitar de creare ISO cu GRUB numit grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Odată ce am făcut acest lucru, vom avea un ISO. Această ISO poate fi deschisă pe computere x86 (Și 64 de biți) și mașini virtuale. Pentru a-l testa, voi folosi QEMU. Noi sunam QEMU din linia de comandă:

qemu-system-i386 nextdivel.iso

Va incepe SeaBIOS și mai târziu vom avea GRUB. Mai târziu, dacă totul este corect, ne vom vedea fraza.
Veți crede că acest lucru este dificil, răspund, da, este.

Crearea cu adevărat a unui sistem de operare este dificilă și că acesta nu face nimic util. În capitolele viitoare vom vedea cum să gestionăm culorile pe ecran, să rezervăm memorie și dacă pot, cum să obținem date de la tastatură.

Dacă cineva nu vrea să copieze totul aici, am un depozit la GitHub (mai elaborat) cu sistemul de operare NextDivel. Dacă doriți să compilați NextDivel trebuie doar să ai 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

Vă încurajez să colaborați la NextDivel dacă aveți timp și dorința de a crea un sistem de operare. Poate chiar superior Linux ... timpul ne va spune.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   plin de viață el a spus

    :O

    1.    marianogaudix el a spus

      Torvalds a dus sistemul de operare Minix (derivat din UNIX) către Andrew S. Tanenbaum și l-a îmbunătățit.

      Tanenbaum s-a luptat cu Linus, s-au insultat reciproc. Tanenbaum spune că Microkernel este viitorul (HURD, Minix nou con Microkernel).

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

  2.   eliotime3000 el a spus

    Aceasta a fost cea mai bună postare pe care am văzut-o până acum pe acest blog. Vreau deja să știu ce să mai fac.

  3.   Carlos Gude el a spus

    A fi impresionat

  4.   topor el a spus

    Chiar impresionant !!

  5.   rhoconlinux el a spus

    FUUUUUUUUA!
    Este cel mai geek post pe care l-am văzut vreodată hehe. Felicitări Adrián, un articol de curvă! hiper interesant !!! 🙂

    1.    Joaquin el a spus

      Sunt de acord. Imi imaginez aceasta situatie:
      Utilizator avansat GNU / Linux (cu o față fericită):
      „Știu deja cum să-mi compilez Gentoo”

      Tocmai (disprețuitor): «pff, mi-am creat propria distribuție ...»

      1.    desikoder el a spus

        Da, îmi pot crea propria distribuție Linux. De fapt, în el dezvolt un initramfs și un kernel pentru Linux încorporat. Nu este același lucru să creezi un sistem de operare decât un Linux distro. Primul este mult mai dificil, aproape imposibil, al doilea, după cum ați spus, poate fi orice, chiar și Ubuntu cu sigla xD schimbată. Deci aș lăsa așa:

        Utilizator avansat GNU / Linux (cu o față fericită)
        - Știu deja cum să-mi compilez Gentoo

        Semi-tocilar
        - Pff, am urmărit un Linux de la zero și mi-am făcut propria distribuție

        Tocmai (cu atitudine disprețuitoare)
        - pff, pentru că am programat un nucleu în asamblator și în C

        Salutări!

  6.   Cronos el a spus

    Acest lucru este interesant pentru mine, în așteptarea următoarelor capitole.

  7.   abimaelmartell el a spus

    Am văzut acest tutorial în urmă cu ceva timp, este pentru C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet el a spus

      Mulțumesc pentru link, o să mă uit la el.

  8.   Jose Jácome el a spus

    Aș dori un sistem de operare 100% compatibil cu grafica AMD: /

    1.    ivanlinux el a spus

      ferestre din

      1.    Jose Jácome el a spus

        hahaha în Windows Catalyst nu are suport OpenGL, deși în Linux nu pot folosi toată puterea grafică voi continua să aștept să văd ce se întâmplă!

        1.    beny_hm el a spus

          așteptați doar ca supapa să elimine piața

  9.   KZKG ^ Gaara el a spus

    Contribuție magică, perfectă, excelentă, pare o serie mare de postări 🙂

  10.   O_Pixote_O el a spus

    Buah Aș vrea să știu cum să programez pentru a vă putea ajuta, pur și simplu ca o modalitate de a exersa cu cunoștințele pe care le învățați și pe care o ajutați. Deocamdată vă las motto-ul de a atrage atenția asupra proiectului odată ce îl terminați „Utilizați NextDivel, porno arată la fel (sau mai bine).”, Veți mătura xD.

  11.   acest nume este fals el a spus

    Mooooooolaaa !!!!

  12.   nordi el a spus

    Articol foarte bun, dar doar curios de ce nu ai urmat proiectul Linux From Scratch?

    În ceea ce priveşte

    1.    AdrianArroyoStreet el a spus

      Ei bine, Linux de la Scratch este în regulă și poți spune că este al tău, dar este foarte mecanic:
      -Descărcați fonturile
      -Patch-le
      -Compila
      -Instalare
      -Ca urmare a
      Aici, deși rezultatul este mai rău în cele din urmă, puteți spune că ați examinat toate fișierele.

    2.    desikoder el a spus

      După cum reiese din comentariul meu anterior, deoarece nu are același nivel de complexitate. Mai mult, Linux de la zero nu este, contrar numelui său, crearea unui sistem de la zero. Crearea unui sistem de la zero înseamnă programarea dvs., scrierea propriului kernel, nu kernel-ului Linux, dacă este posibil chiar și propriul dvs. bootloader în loc de grub, lilo, syslinux etc. Deși un LFS nu este un lucru mic și este destul de complex, nici măcar nu se apropie de programarea propriului kernel ...

      În plus, sunt de acord cu AdrianArroyo Calle că este prea mecanic, l-am citit cândva și ajungi să renunți la a șasea pagină, îți mai spun și tu să folosești ce versiuni ale pachetelor pentru că altfel instrucțiunile nu vor funcționa (că arată lipsa de flexibilitate, După părerea mea). Cred că este mai bine să ai ceva din ideea ta, să compilezi pachetele pe care le dorești, chiar să programezi unele, să compilezi un nucleu Linux și în pace.

      Salutări!

  13.   fursec el a spus

    uuuoooohh !! Nu am capturat niciodată o postare la fel de mult ca aceasta.
    Vă rugăm să continuați 😀

  14.   utilizator_linux el a spus

    Nu știu ce se întâmplă:

    eroare: nu s-a găsit antet multiboot
    eroare trebuie mai întâi să încărcați nucleul

    1.    AdrianArroyoStreet el a spus

      Dacă este vreo mângâiere, am făcut aceeași greșeală. Încercați să utilizați sursele din GitHub, acolo eroarea este deja rezolvată. Oricum cred că dacă schimbați linia grub.cfg din „multiboot /next/START.ELF” în „kernel /next/START.ELF” s-ar putea să funcționeze. Nu știu exact.

      1.    mcbanana el a spus

        În primul rând, intrare magnifică 🙂
        Am aceeași problemă la încărcarea nucleului din grub. Chiar și folosind surse GitHub sau schimbând multiboot pentru kernel ...

        eroare: nu s-a găsit antet multiboot
        eroare: nu s-a încărcat nucleul

        1.    AdrianArroyoStreet el a spus

          Folosești clang ca compilator? Schimbați-l pentru gcc
          Ți-ai amintit să folosești scriptul linker? Este necesar, astfel încât linker-ul (ld în cazul nostru) să știe unde în fișier va pune fiecare lucru. În acest caz antetul multiboot trebuie să fie la început.
          Folosiți sistemul CMake? Dacă îl folosești, cred că nu eșuează.
          Dacă nu funcționează pentru dvs., voi încerca să găsesc o altă soluție.

  15.   khort el a spus

    [+100]
    Perfect !!!

  16.   invisible15 el a spus

    E tare mișto 🙂

  17.   tanrax el a spus

    Îmi scot pălăria. Post impresionant. Felicitări.

  18.   om el a spus

    Wow!
    Ar fi minunat dacă ați putea deschide aplicații realizate în HTML5 și Javascript fără a fi nevoie să utilizați un browser, este posibil?
    Vorbesc despre faptul că sunt ca niște aplicații native.
    Deci, ar fi ușor de programat pentru acest sistem de operare 😀

    1.    AdrianArroyoStreet el a spus

      În acest caz, nu o voi face pentru că este nevoie de mult mai multă muncă în spate, dar există un sistem de operare numit „este” care face ceea ce spui. De fapt, linia de comandă este JavaScript, iar ferestrele sunt desenate folosind funcțiile JavaScript Canvas. Inginerii Nintendo au făcut-o și acum este open source.

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

      1.    om el a spus

        Valla, mulțumesc pentru informații 😀
        Voi arunca o privire

  19.   patodx el a spus

    Oricine își poate crea propriul SO poate muri liniștit, de la nivelul intelectual pe care trebuie să-l atingă; Te face să renunți la cer sau iad.
    Bucată de postare.

    1.    Miguel el a spus

      Până în prezent, nimeni nu știe să fi făcut doar ceva care se poate spune că este un sistem de operare decent creat de la zero, nici măcar Linux Torvalds așa cum spui la început, deoarece acest lucru a pornit din surse Unix și orice altceva este creat în comun pentru mai mult decât o persoană, viața este foarte scurtă și de la zero este de neconceput pentru oricine, chiar dacă se dorește contrariul, este demonstrabil în multe greșeli făcute în copierea și lipirea de Linux Torvalds

      1.    skarmiglione el a spus

        Sursele unix sunt închise, utilizarea minix ... care este altceva.

      2.    Philip Robaina el a spus

        și cei care au făcut QDOS ce?
        s-au bazat pe ceva?

  20.   Tesla el a spus

    Din câte văd, cine nu are propriul sistem de operare este pentru că nu vrea, hahahaha.

    Acum serios, foarte interesant! Mult depășesc cunoștințele mele limitate de programare, dar voi citi celelalte părți ale acestei serii cu anticipare.

    Mulțumesc pentru postare!

  21.   Manuel R. el a spus

    M-ai lăsat cu o față O_O ... fără intenția de a subestima contribuțiile nimănui, este cel mai „pro” pe care l-am văzut în ultima vreme. Salutari.

  22.   aitor_cz el a spus

    Foarte bun articol, Adrián. Te rog continua…

  23.   mj el a spus

    Glumești în Ziua Prostilor din Aprilie?, Nu fi rău „Emulând pe Linus Torvalds: Creează-ți propriul sistem de operare de la zero”. Nu cred că este dificil pentru cei care urmează o carieră în vreun institut de tehnologie sau universitate; dar pentru mine sunt un arcaș novice (sunt cei care spun „Noob”, dar mă consider mai newbie oarecum leneș) care pare să nu pășească pe uscat. Oricum ACEST ARTICOL CREEAZĂ MULȚI CURIOSITATE ȘI FĂRĂ ADMIRARE ȘI RESPECT DE ÎNDUBITATE PENTRU EDITORUL SĂU, FELICITĂRI; Primul lucru pe care îl voi face este să încerc să înțeleg măcar puțin din acest material valoros.
    MULȚUMIM Adrian Arroyo Calle, muncă excelentă și livrare nobilă de cunoștințe.

  24.   Blaire pascal el a spus

    LEL Postare excelentă, ține-o așa.

  25.   f3niX el a spus

    Ce postare grozavă, acesta este ceea ce mi-a ratat desde linux. Minunat.

  26.   Rubin el a spus

    Post mare, mulțumesc foarte mult.
    Nu am înțeles ce face fișierul link.ld, îmi poate explica cineva?

    1.    AdrianArroyoStreet el a spus

      Fișierul link.ld îi indică linkerului (în acest caz ld) unde fiecare parte a codului ar trebui să fie în fișierul rezultat. De asemenea, definim punctul de intrare deoarece, deoarece nu avem un sistem de operare, nu putem folosi main ca program normal, în acest caz selectăm funcția de pornire.

  27.   Maxi el a spus

    Super toate postările tale! În așteptarea celor 7! Dacă am o îndoială, de exemplu, dacă aș vrea doar să rulez un algoritm, fără sistem de operare, de unde să știu ce pot folosi și ce nu C?

    1.    AdrianArroyoStreet el a spus

      Dacă îl folosiți așa, nu veți putea folosi nimic de la stdlib, care este practic ceea ce folosește toată lumea (fără malloc, gratuit, printf, scanf, strcmp etc.). Totul trebuie implementat direct din memorie sau ASM. Poate într-un capitol superior vă voi arăta cum să instalați o bibliotecă C pentru sistemul de operare. Dacă utilizați C ++ nu puteți utiliza excepții și operatorii noi și ștergere (și cu siguranță mai multe).

    2.    comutator el a spus

      Cred acest vă poate oferi o idee mai bună despre cum să o faceți.

  28.   Esteban el a spus

    Bună ziua, acum aproximativ 5 ani am urmărit o publicație similară și am dezvoltat un microkernel care începe la fel, are unele aspecte de îmbunătățit, dar poate te interesează, rulează în modul protejat, execută multitasking și realizează virtualizarea memoriei, în ultima vreme am lucrat pe acesta driverul de disc și unitatea CD pentru ao face instalabil și nu doar să ruleze pe CD live ... Salutări.

  29.   Johan el a spus

    Draga, am o eroare la executarea comenzii:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 eroare de sintaxă
    collect2: eroare: ld a returnat 1 stare de ieșire

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

    La rândul 5 nu văd eroarea, cineva la fel?

    Lucrez cu un șuierat debian virtualizat în virtualbox

    1.    Imagine de substituent Julian Reyes Escrigas el a spus

      adaugă ";" la sfârșitul lui * (. multiboot_header)

  30.   Eric Orellana Romero el a spus

    Excelentă inițiativă, cu siguranță voi urma capitolele acestui post, intenționând să învăț multe din ea. Vă mulțumesc foarte mult pentru că ați avut timp să ne învățați. Un singur detaliu în acest sens, trebuie remarcat faptul că Linus Torvalds nu este creatorul niciunui sistem de operare, el a creat Kernel-ul sistemului GNU / Linux (cel care a fost folosit în alte sisteme de operare), care merită încă, dar este important să-l acreditați pe Richard Stallman pentru crearea majorității sistemului de operare.

    Vă mulțumesc foarte mult pentru contribuție și sper să luați în considerare observația mea.

  31.   Imagine de substituent Julian Reyes Escrigas el a spus

    De ceva vreme am dat peste cap subiectul, m-am interesat imediat ce am citit titlul. dar mesajul continuă să primească

    eroare: nu s-a găsit antet multiboot
    eroare trebuie mai întâi să încărcați nucleul

    Am încărcat ceea ce duc într-o repo pe github https://github.com/rkmax/GenyOS

    1.    martin villalba el a spus

      Același lucru mi se întâmplă și mie. Ai găsit soluția?

  32.   Carlos el a spus

    o întrebare am început să introduc sintaxa și linia de intrare meniu îmi spune că nu am găsit cine să-mi spună de ce
    asta fac

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: comanda nu a fost găsită

    1.    AdrianArroyoStreet el a spus

      Conținutul acestui conținut nu trebuie introdus în linia de comandă, ci în fișierul pe care îl creați numit grub.cfg

  33.   Nodetin el a spus

    Excelent articol, mulțumesc!

  34.   David el a spus

    Spectaculos…!! este la fel ca veriga lipsă.

  35.   r.garciag el a spus

    Îmi plac tutorialele Emulating LInus Torvalds, dar există un pas pe care nu îl înțeleg, următorul:
    Acum copiem START.ELF în / următorul în folderul nostru care simulează rădăcina sistemului nostru de operare. Mergem în folderul rădăcină al noului nostru sistem de operare cu consola și verificăm dacă există două fișiere: unul /boot/grub/grub.cfg și altul /next/START.ELF.

    Mergem în directorul superior și apelăm un utilitar de creare ISO cu GRUB numit grub-mkrescue

    Ar putea cineva să mi-l explice: p

    1.    AdrianArroyoStreet el a spus

      Pur și simplu pentru a genera un ISO minim pe care GRUB îl poate încărca, copiem nucleul în (/ din ISO, orice folder) /next/START.ELF și fișierul de configurare GRUB în (din / din ISO, orice folder) / boot / grub / grub.cfg. Odată ce ați terminat, nu am instalat încă GRUB pe ISO și există un utilitar care generează ISO dintr-un folder și instalează GRUB numit grub-mkrescue. Apoi am ajunge în sfârșit cu un ISO bootabil care are instalat GRUB, care poate citi configurația pentru a executa mai târziu START.ELF corect. Nu știu dacă m-am explicat, dar ceea ce facem este un fel de sistem de fișiere fals cu care generăm un ISO.

  36.   miguel jose guevara atentie el a spus

    Minunat

  37.   Michael Moreno el a spus

    Ei bine, uitați-vă într-adevăr la un sistem nou, nu atât de mult, dar dacă îmbunătățiți Linux, de exemplu, creați un exonucleus Linux cu o componentă de server care acționează ca un microkernel dacă se dorește, adică o structură exo cu comportament micronucleic care ar fi super și linux .

    Celălalt lucru este că nu sunt expert în programare, doar câteva c ++ brânză și ceva java, mi-ar fi suficient să dau programului kernel linux un modul, să-l evadez, să îl modific etc.

  38.   IarnaSoldat53 el a spus

    Fără îndoială trebuie să fac deja în vacanță.

  39.   fermin el a spus

    Acesta este bun și în ce program îl proiectați și îl codificați
    vă rog să-mi dați acest răspuns

  40.   Mintea întunecată el a spus

    Când compilez din git, primesc:

    [jmponce @ jar build] $ cmake ..
    - Crearea directorului NextRoot
    - Generarea de script ISO
    face DESTDIR = următoarea instalare
    ./iso.sh
    - S-a găsit Doxygen: / usr / bin / doxygen (s-a găsit versiunea „1.8.9”)
    - Configurare terminată
    - Generarea a terminat
    - Fișierele de compilare au fost scrise în: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Dependențe de scanare ale țintei START.ELF
    [7%] Construirea obiectului ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Construirea obiectului CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Conectarea executabilului CXX START.ELF
    / usr / bin / ld: Incompatibil /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a este omis în timp ce se caută -lgcc
    / usr / bin / ld: nu poate găsi -lgcc
    collect2: eroare: ld a returnat starea de ieșire 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Instrucțiuni eșuate pentru ținta „src / START.ELF”
    faceți [2]: *** [src / START.ELF] Eroare 1
    CMakeFiles / Makefile2: 106: Instrucțiuni eșuate pentru ținta „src / CMakeFiles / START.ELF.dir / all”
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Eroarea 2
    Makefile: 117: Eșec în instrucțiunile pentru „toate” vizate
    face: *** [toate] Eroarea 2

    1.    AdrianArroyoStreet el a spus

      Eroarea pare că nu poate găsi llibgcc, deoarece aveți versiunea pe 64 de biți și în prezent sistemul de compilare este forțat să utilizeze 32 de biți. Ar trebui să instalați un pachet de compatibilitate pe distro sau mai bine, să utilizați un sistem pe 32 de biți.

      1.    Ronaldo Rodríguez el a spus

        Am 32 de biți și primesc aceeași eroare, vrei să spui sistemul de operare sau arhitectura? al meu este pe 64 de biți, dar folosesc Ubuntu pe 32 de biți, nu întrebați, probleme financiare, cu asta spun totul.

  41.   Jorge el a spus

    Subiect excelent, în așteptarea unei sfere mai mari. Noroc

  42.   Jhon el a spus

    Excelent sper pentru mai multe

  43.   Soid perez el a spus

    Bună ziua, sunt un tânăr ambasador care dorește să creeze un sistem de operare care să susțină toate programele și platformele, astfel încât dezvoltatorii să nu trebuiască să aibă mașini puternice sau aplicații sau programe pe un computer.
    De aceea sunt interesat de această postare, dar când descarc git-ul sau încerc să-l creez, totul funcționează până când execut comanda ./iso.sh sau grub-mkrescue -o nextdivel.iso nextroot primiți această eroare

    „Grub-mkrescue: avertisment: xorriso dvs. nu acceptă„ –grub2-boot-info ”. Unele funcții au fost dezactivate. Utilizați xorriso 1.2.9 sau o versiune ulterioară ..
    grub-mkrescue: avertisment: xorriso dvs. nu acceptă „–grub2-boot-info”. Imaginea dvs. de nucleu este prea mare. Boot-ul pe disc a fost dezactivat. Folosiți xorriso 1.2.9 sau o versiune ulterioară .. »
    Nu am nicio idee deoarece știu multe despre aplicații și pagini web, dar nu știu nimic despre grub

    1.    AdrianArroyoStreet el a spus

      Este posibil să trebuiască să actualizați programul xorriso pe distribuția dvs. Ce distribuție și versiune folosiți?

      1.    Soid perez el a spus

        Folosesc xubuntu 14.04lts și încerc să rulez xorriso, dar shell-ul îmi spune că nu-l găsește și primesc apt-get install xorriso, deși sincer mă ​​așteptam la un răspuns, deoarece am avut o experiență proastă instalând lucruri pe care nu le știu în Linux hehe . Îl voi actualiza chiar acum și vă voi spune ce s-a întâmplat

      2.    AdrianArroyoStreet el a spus

        Apoi instalați xorriso din centrul software-ului sau pur și simplu de la terminal faceți „sudo apt-get install xorriso”

      3.    Soid perez el a spus

        Am făcut deja tot ce mi-ai spus și atât cu git cât și cu al meu am obținut acest xorriso 1.3.2: manipulator sistem de fișiere RockRidge, proiect libburnia.

        Unitate curentă: -outdev 'stdio: nextdivel.iso'
        Curent media: fișier stdio, suprascriptibil
        Starea media: este necompletat
        Rezumat media: 0 sesiuni, 0 blocuri de date, 0 date, 1901m gratuit
        Adăugat la imaginea ISO: directorul '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 de fișiere adăugate în 1 secundă
        xorriso: EȘEC: Nu se pot determina atributele fișierului sursă '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': nu există un astfel de fișier sau director
        xorriso: UPDATE: 546 de fișiere adăugate în 1 secundă
        xorriso: aborting: -abort_on 'FAILURE' întâlnit 'FAILURE'
        și catifea nu înțeleg structura mea este /nextroot/boot/grub/grub.cfg și nextroot / next / START.ELF

      4.    Soid perez el a spus

        Mulțumesc, sunt gata să merg mai departe, un prieten m-a ajutat și mi-a spus că ceea ce am greșit este organizarea directorului, așa că am stabilit-o și gata

      5.    Erik el a spus

        Scuzați-mă, puteți să-mi spuneți ce procedură ați efectuat, deoarece nu primesc nimic de pornire: nu există un astfel de fișier sau director

        niciun dispozitiv bootabil.

  44.   jose el a spus

    Noroc! Aveam să-ți cer favoarea dacă îmi poți trimite un e-mail cu ceea ce explici aici, m-am cam confuz și trebuie să compar ceea ce am cu ceea ce explici tu, poate ceea ce nu este clar pentru mine este dacă crearea grub. cfg se face în terminalul gcc sau unde anume? multumesc foarte mult prietene!

    1.    AdrianArroyoStreet el a spus

      Creați fișierul grub.cfg cu orice editor de text și trebuie să-l salvați în PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano el a spus

    Salut Adrian, în primul rând te felicit și îți mulțumesc pentru contribuție.

    Știi că fac asta pentru o practică și am început să-l pun la punct în urma îndrumării tale, totuși după ce am început am găsit prima eroare

    $ ca -o kernel.o -c kernel.asm
    bash: as: comanda nu a fost găsită ...
    Comenzi similare sunt:
    'sa'
    „ac”

    Lucrez la fedora 20 și nu găsesc o soluție în acest sens, aș aprecia îndrumările dvs. dacă ar trebui să schimb ceva în gcc sau gaz

    Multumesc anticipat

    1.    AdrianArroyoStreet el a spus

      Trebuie să instalați GAS pentru a putea vedea codul de eroare. Nu am Fedora la îndemână, dar, teoretic, dacă instalați gcc-c ++, veți instala întreaga suită GCC și GNU.

  46.   Gaston Ramirez el a spus

    Sunt cu tine, știu ceva despre C ++, C # (deși acest ultim nu este foarte util în această chestiune), răul este că încă îmi lipsește experiența, nu mă ocup niciodată de limbajul C, publicarea ta este grozavă, Nu am prea multe de spus dacă am timp, văd. Mulțumesc.

  47.   Teresita lui Iisus Nah Sanchez el a spus

    Vă mulțumesc foarte mult pentru mare ajutor….

  48.   jky el a spus

    Îmi place Linux, este cel mai bun cartier existent, adevărul pentru ferestrele mele este un gunoi pentru a că știu că creatorul linux este creatorul ferestrelor

  49.   rode el a spus

    Bună ziua, primesc o eroare în grub spune
    eroare: fișier /next/START.ELF Nu a fost găsit
    eroare: trebuie mai întâi să încărcați nucleul

    Ai putea să mă ajuți și să mergi la Google, dar nu găsesc

  50.   Henric Avila el a spus

    Vă rog, cum pot să fac să apară mesajul HELLO WORLD, sunt începător și încă nu știu suficient

  51.   CARLOS GUERRERO ALVAREZ el a spus

    Mi se întâmplă următoarele:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: relocarea R_X86_64_32 împotriva simbolului „stack” nu poate fi utilizată atunci când se face un obiect PIE; recompilați cu -fPIE
    / usr / bin / ld: linkul final a eșuat: secțiune nereprezentabilă la ieșire
    collect2: eroare: ld a returnat 1 stare de ieșire