Oponašanje Linusa Torvaldsa: Stvorite vlastiti operativni sustav od nule (I)

Prije svega, komentirajte da je ovo moj prvi članak i da želim da vam se svidi.

Linus Torvals sretan

U ovoj seriji oponašat ćemo se Linus Torvalds, stvorit ćemo svoj operativni sustav od 0. U ovoj prvoj epizodi vidjet ćemo boot i stavit ćemo tekst na zaslon iz naše jezgre.

U mom se slučaju zove operativni sustav NextDivel. Prva odluka koju moramo donijeti čim razmotrimo operativni sustav je kakav će biti bootloader?

Ovdje postoji više varijanti, a čak bismo je mogli i sami stvoriti; međutim u ovom uputstvu ću se poslužiti GRUB, jer većina zna više ili manje nešto o njemu. Stvorimo mapu koja će biti korijen našeg operativnog sustava i tamo kreiramo mapu / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Tamo kreiramo datoteku grub.cfg kako slijedi:

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

U ovoj smo datoteci vidjeli kako GRUB će učitati naš kernel, u ovom slučaju, u /next/START.ELF. Sada moramo stvoriti svoj kernel.

Za ovo će nam trebati GCC y GAS (montažer projekta GNU, obično dolazi s gcc-om). Dakle, mi ćemo stvoriti jezgru.

Prvo napravimo datoteku zvanu kernel.asm. Ova će datoteka sadržavati početnu točku našeg jezgra i također će definirati multiboot (značajka nekih bootloadera poput GRUB). Sadržaj kernel.asm bit će:

.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

Sve što je vezano za multiboot jednostavno je slijediti specifikacije i ništa drugo. Sve će početi u startu, zvat će multiboot_entry, definirat ćemo zaglavlje multiboot-a u prvih 4k i stavit ćemo ga (s movl).

Kasnije zovemo NextKernel_Main koja je naša funkcija jezgre C. U petlji zaustavljamo računalo. Ovo se sastavlja sa:

as -o kernel.o -c kernel.asm

Sad ćemo ući u programiranje na C. Pomislit ćete da je sada sve samo kolač, stavili smo printf en glavni i to je to, uspjeli smo.

Pa ne, budući da printf y glavni to su funkcije koje definira operativni sustav, ali mi ih stvaramo! Možemo se koristiti samo funkcijama koje sami definiramo.

U kasnijim poglavljima govorit ću o tome kako staviti vlastitu C biblioteku (glibc, bionic, newlibc), ali s vremena na vrijeme. Razgovarali smo da želimo staviti tekst na ekran, pa ćemo vidjeti kako ćemo to učiniti.

Dvije su mogućnosti, jedna je nazvati BIOS a drugo je izravno upravljanje memorijom zaslona. Učinit ćemo ovo drugo jer je jasnije iz C-a, a također će nam omogućiti da uđemo u zaštićeni način.

Stvaramo datoteku pod nazivom NextKernel_Main.c sa sljedećim sadržajem:

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

Ovim izravno manipuliramo pamćenjem VGA i lik po lik pišemo. Kompajliramo onemogućavanjem stdliba:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Ako ste stigli toliko daleko, morat ćete isprobati svoj potpuno novi operativni sustav sada, ali još nismo završili. Treba nam mala datoteka koja kompajleru govori gdje u datoteci treba napustiti svaki odjeljak. To se radi pomoću povezivačke skripte. Izrađujemo 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 = .;
}

Ovim definiramo položaj svakog odjeljka i ulaznu točku, start, koju smo definirali u kernel.asm. Sada možemo ujediniti svu ovu izmišljotinu:

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

Sada kopiramo START.ELF u / next unutar naše mape koja simulira korijen našeg operativnog sustava. S konzolom idemo u korijensku mapu našeg novog operativnog sustava i provjeravamo postoje li dvije datoteke: jedna /boot/grub/grub.cfg i druga /next/START.ELF.

Idemo u gornji direktorij i pozivamo uslužni program za stvaranje ISO-a s GRUB-om grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Nakon što to učinimo imat ćemo a ISO. Ovaj se ISO može otvoriti na računalima x86 (64 bita također) i virtualni strojevi. Da bih ga testirao, koristit ću QEMU. Mi zovemo QEMU iz naredbenog retka:

qemu-system-i386 nextdivel.iso

Početi će SeaBIOS a kasnije ćemo imati GRUB. Kasnije, ako je sve točno, vidjet ćemo našu frazu.
Mislit ćete da je ovo teško, odgovaram, da jeste.

Stvarno je stvaranje operativnog sustava teško i ovaj ovdje ne čini ništa korisno. U budućim ćemo poglavljima vidjeti kako se rukuje bojama na zaslonu, rezervira memorija i, ako mogu, kako se dobivaju podaci s tipkovnice.

Ako netko ne želi sve ovdje kopirati, imam spremište na GitHub (detaljnije) s operativnim sustavom NextDivel. Ako želite sastaviti NextDivel jednostavno morate imati 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

Potičem vas da surađujete na NextDivelu ako imate vremena i želje za izradom operativnog sustava. Možda čak i superiorniji od Linuxa ... vrijeme će pokazati.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   živo dijo

    :O

    1.    marianogaudix dijo

      Torvalds je odnio operativni sustav Minix (izveden iz UNIX-a) Andrewu S. Tanenbaumu i poboljšao ga.

      Tanenbaum se potukao s Linusom, vrijeđali su jedni druge. Tanenbaum kaže da je Microkernel budućnost (HURD, Minix novi stožac Microkernel).

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

  2.   eliotime3000 dijo

    Ovo je najbolji post koji sam do sada vidio na ovom blogu. Već želim znati što drugo učiniti.

  3.   Carlos Gude dijo

    Budite impresionirani

  4.   sjekira dijo

    Stvarno impresivno !!

  5.   rhoconlinux dijo

    FUUUUUUA!
    to je geekiest post koji sam ikad vidio hehe. Čestitamo Adriáne, članak o kurvi! hiper zanimljivo !!! 🙂

    1.    Joaquin dijo

      Slažem se. Zamišljam ovu situaciju:
      GNU / Linux Power User (sa sretnim licem):
      "Već znam kako sastaviti svoj Gentoo"

      Nerd (prezirno): «pff, stvorio sam vlastiti distro ...»

      1.    desikoder dijo

        Da, mogu stvoriti vlastiti distribucijski sustav za Linux. Zapravo u njemu razvijam initramfs i kernel za ugrađeni linux. Nije isto stvoriti operativni sustav nego linux distribuciju. Prvi je puno teži, gotovo nemoguć, drugi, kao što ste rekli, može biti bilo što, čak i Ubuntu s promijenjenim logotipom xD. Pa bih ostavio ovako:

        Korisnik GNU / Linuxa (sa sretnim licem)
        - Već znam kako sastaviti svoj Gentoo

        Polu-Nerd
        - Pff, pratio sam linux od nule i napravio sam vlastiti distro

        Štreber (s prezirnim stavom)
        - pff, jer sam programirao kernel u asembleru i na C-u

        Saludos!

  6.   Cronos dijo

    Ovo mi je zanimljivo, u očekivanju sljedećih poglavlja.

  7.   abimaelmartell dijo

    Ovaj sam tutorial vidio prije nekog vremena, on je za C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Hvala na linku, pogledati ću ga.

  8.   Jose Jácome dijo

    Želio bih operativni sustav 100% kompatibilan s AMD grafikom: /

    1.    ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        hahaha u sustavu Windows Catalyst nema podršku za OpenGL, iako u Linuxu ne mogu iskoristiti svu grafičku snagu koju ću čekati da vidim što će se dogoditi!

        1.    beny_hm dijo

          samo pričekajte da ventil zbriše tržište

  9.   KZKG ^ Gaara dijo

    Magičan, savršen, izvrstan doprinos, izgleda kao sjajna serija objava 🙂

  10.   O_Pixote_O dijo

    Buah, volio bih znati kako programirati da ti pomogne, jednostavno kao način vježbanja sa znanjem koje učiš i pomažeš mu. Za sada vam ostavljam moto da skrenete pozornost na projekt nakon što ga završite "Koristite NextDivel, pornografija izgleda isto (ili bolje).", Pometat ćete xD.

  11.   ovo ime je lažno dijo

    Mooooooolaaa !!!!

  12.   nordi dijo

    Vrlo dobar članak, ali samo znatiželjan zašto niste pratili projekt Linux From Scratch?

    pozdravi

    1.    AdrianArroyoStreet dijo

      Pa, Linux iz Scratcha je u redu i možete reći da je vaš, ali stvarno je vrlo mehanički:
      -Preuzmi fontove
      -Popravi ih
      -Sastaviti
      -Instalirati
      -Praćenje
      Ovdje, iako je rezultat na kraju lošiji, možete reći da ste pregledali sve datoteke.

    2.    desikoder dijo

      Kao što je jasno iz mog prethodnog komentara, jer nema istu razinu složenosti. Nadalje, linux od nule zapravo nije, suprotno njegovom imenu, stvaranje sustava od nule. Stvaranje sustava od nule programirate ga sami, pišete vlastiti kernel, a ne linux kernel, ako je moguće čak i vlastiti bootloader umjesto grub, lilo, syslinux itd. Iako LFS nije mali podvig i prilično je složen, nije ni blizu programiranju vlastite jezgre ...

      Osim toga, slažem se s AdrianArroyo Calleom da je previše mehanički, pročitao sam ga nekada i na kraju odustanete od šeste stranice, također vam kažu da koristite koje verzije paketa jer inače upute neće raditi (to pokazuje nedostatak fleksibilnosti, po mom mišljenju). Mislim da je bolje imati nešto po svojoj vlastitoj zamisli, kompajlirati pakete koje želite, čak i programirati neke, kompilirati linux kernel i to u miru.

      Saludos!

  13.   kolačić dijo

    uuuoooohh !! Nikad nisam toliko zabilježio post kao ovaj.
    Molimo nastavite 😀

  14.   linux_korisnik dijo

    Ne znam što nije u redu:

    pogreška: nije pronađeno zaglavlje s više pokreta.
    pogreška prvo trebate učitati kernel

    1.    AdrianArroyoStreet dijo

      Ako je neka utjeha, i ja sam pogriješio. Pokušajte upotrijebiti izvore koji se nalaze u GitHubu, tamo je pogreška već riješena. U svakom slučaju mislim da ako promijenite liniju u grub.cfg iz "multiboot /next/START.ELF" u "kernel /next/START.ELF" to bi moglo funkcionirati. Ne znam točno.

      1.    mcbanana dijo

        Prije svega, veličanstveni ulaz 🙂
        Imam isti problem s učitavanjem kernela iz grub-a. Čak i korištenje GitHub izvora ili promjena višestrukog pokretanja za kernel ...

        pogreška: nije pronađeno zaglavlje s više pokreta.
        pogreška: nema učitane jezgre

        1.    AdrianArroyoStreet dijo

          Koristite li clang kao prevoditelj? Promijenite ga za gcc
          Jeste li se sjetili koristiti skriptu povezivača? To je neophodno kako bi povezivač (ld u našem slučaju) znao gdje će u datoteku staviti svaku stvar. U ovom slučaju zaglavlje s više pokreta mora biti na početku.
          Koristite li sustav CMake? Ako ga koristite, mislim da neće uspjeti.
          Ako vam ne uspije, pokušat ću pronaći drugo rješenje.

  15.   khourt dijo

    [+100]
    Baš odlično !!!

  16.   invisible15 dijo

    Stvarno je super 🙂

  17.   Tanraks dijo

    Skidam kapu. Impresivan post. Čestitamo.

  18.   čovjek dijo

    vau!
    Bilo bi sjajno kada biste mogli otvarati programe izrađene u HTML5 i Javascriptu bez potrebe za korištenjem preglednika, je li to moguće?
    Govorim o njima kao o izvornim aplikacijama.
    Tako bi bilo lako programirati za ovaj operativni sustav 😀

    1.    AdrianArroyoStreet dijo

      U ovom slučaju to neću učiniti, jer treba puno više posla, ali postoji operativni sustav nazvan "je" koji radi ono što vi kažete. Zapravo je naredbeni redak JavaScript, a prozori se crtaju pomoću funkcija Canvas JavaScript. Nintendovi inženjeri to su učinili i sada je to otvoreni izvor.

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

      1.    čovjek dijo

        Valla, hvala na informacijama 😀
        Pogledat ću

  19.   patodx dijo

    Tko može izraditi vlastiti OS, može mirno umrijeti od intelektualne razine koju mora postići njime; Zbog toga se odričete raja ili pakla.
    Komad knjiženja.

    1.    Miguel dijo

      Do sada se nije znalo da je izradio samo nešto za što se može reći da je pristojan operativni sustav napravljen od nule, čak ni Linux Torvalds kao što ste rekli na početku, budući da je ovo počelo iz Unix izvora, a sve ostalo je zajedničko autoru više od jedne osobe život je vrlo kratak i započinjanje ispočetka je nezamislivo za bilo koga, čak i ako se želi suprotno, vidljivo je u mnogim pogreškama koje je Linux Torvalds počinio kopirati i lijepiti

      1.    skarmiglione dijo

        Unix izvori su zatvoreni, upotreba minixa ... što je nešto drugo.

      2.    Filip Robaina dijo

        i oni koji su napravili QDOS što?
        bili zasnovani na nečemu?

  20.   Tesla dijo

    Koliko vidim, tko nema svoj operativni sustav je zato što to ne želi, hahahaha.

    Sad ozbiljno, vrlo zanimljivo! Mnogo je toga što je izvan mog ograničenog znanja o programiranju, ali s iščekivanjem ću pročitati ostale dijelove ove serije.

    Hvala na postu!

  21.   Manuel R. dijo

    Ostavio si me s O_O licem ... bez namjere da podcijenim bilo čiji doprinos, to je najviše "za" koje sam vidio u posljednje vrijeme. Pozdrav.

  22.   aitor_cz dijo

    Vrlo dobar članak, Adrián. Molim te nastavi…

  23.   mj dijo

    Šalite li se na Prvi aprilski dan? Ne budite zlobni "Oponašanje Linusa Torvaldsa: Stvorite vlastiti operativni sustav od nule." Mislim da onima koji nastavljaju karijeru na nekom tehnološkom institutu ili sveučilištu nije teško; ali ja sam za sebe streličar početnik (ima onih koji nas zovu "Noob", ali smatram se Newbieom pomalo lijenim) što zvuči kao da se ne korača na kopno. U svakom slučaju, OVAJ ČLANAK STVARA PUNO ZNATELJOSTI I BEZ SUMNJENOG DIVENJA I POŠTOVANJA UREDNIKA, ČESTITAMO; Prvo što ću učiniti jest pokušati razumjeti barem malo ovog vrijednog materijala.
    HVALA Adrian Arroyo Calle, izvrstan rad i plemenita isporuka znanja.

  24.   Blaire pascal dijo

    LEL Izvrsno, nastavi tako.

  25.   f3niX dijo

    Kakav sjajan post, ovo mi je nedostajalo desde linux. Predivno.

  26.   Rubin dijo

    Sjajan post, puno vam hvala.
    Nisam razumio što radi datoteka link.ld, može li mi netko to objasniti?

    1.    AdrianArroyoStreet dijo

      Datoteka link.ld govori povezivaču (u ovom slučaju ld) gdje bi svaki dio koda trebao biti u rezultirajućoj datoteci. Također definiramo ulaznu točku, budući da nemamo operativni sustav, ne možemo koristiti main kao normalan program, u ovom slučaju odabiremo funkciju pokretanja.

  27.   Maxi dijo

    Izvrsno za sve vaše objave! Čeka se 7! Što ako sumnjam, na primjer, ako sam samo htio pokrenuti algoritam, bez OS-a, kako mogu znati što mogu koristiti, a što ne C?

    1.    AdrianArroyoStreet dijo

      Ako ga koristite ovako, ne biste mogli koristiti ništa od stdliba, što je praktički ono što svi koriste (bez malloca, besplatnog, printf, scanf, strcmp, itd.). Sve se mora implementirati izravno iz memorije ili ASM-a. Možda ću vam u višem poglavlju pokazati kako instalirati C knjižnicu za operativni sustav. Ako koristite C ++, ne možete koristiti iznimke i nove i delete operatore (i sigurno više).

    2.    prekidač dijo

      mislim ovo može vam dati bolju ideju kako to učiniti.

  28.   Esteban dijo

    Pozdrav, prije otprilike 5 godina slijedio sam sličnu publikaciju i razvio mikro jezgru koja započinje na isti način, ima neke aspekte koje treba poboljšati, ali možda vas zanima, radi u zaštićenom načinu, izvršava više zadataka i vrši virtualizaciju memorije, u posljednje sam vrijeme radio na njemu pogonitelj diska i cd pogon kako bih ga mogao instalirati, a ne samo raditi na CD-u uživo ... Pozdrav.

  29.   Johan dijo

    Poštovani, imam pogrešku prilikom izvršavanja naredbe:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -samostojeći -lgcc

    link.ld: 5 sintaksnih pogrešaka
    collect2: pogreška: ld vratio 1 izlazni status

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

    U retku 5 ne vidim pogrešku, da li netko isto?

    Radim s virtualiziranim debianovim wheezyem u virtualboxu

    1.    Slika rezerviranog mjesta Julian Reyes Escrigas dijo

      dodajte ";" na kraju * (. multiboot_header)

  30.   Eric Orellana Romero dijo

    Izvrsna inicijativa, sigurno ću slijediti poglavlja ovog posta, namjeravam puno naučiti iz njega. Puno vam hvala što ste odvojili vrijeme da nas podučite. Kao jedan detalj u vezi s tim, valja napomenuti da Linus Torvalds nije tvorac nijednog operativnog sustava, on je stvorio jezgru GNU / Linux sustava (onu koja je korištena u drugim OS-ima), što još uvijek vrijedi, ali važno je zahvaliti Richardu Stallmanu za stvaranje većine OS-a.

    Puno vam hvala na doprinosu i nadam se da ćete uzeti u obzir moje zapažanje.

  31.   Slika rezerviranog mjesta Julian Reyes Escrigas dijo

    Neko sam se vrijeme zezao s tom temom, zainteresirao sam se čim sam pročitao naslov. ali poruka nastavlja dobivati

    pogreška: nije pronađeno zaglavlje s više pokreta.
    pogreška prvo trebate učitati kernel

    Prenio sam ono što uzmem u repo na github https://github.com/rkmax/GenyOS

    1.    martin villalba dijo

      Isto se događa i meni. Jeste li pronašli rješenje?

  32.   Carlos dijo

    pitanje koje sam započeo s uvođenjem sintakse, a meni menuentry kaže da naredba nije pronađena tko bi mi mogao reći zašto
    ovo je ono što radim

    CRNO @ CRNO-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: naredba nije pronađena

    1.    AdrianArroyoStreet dijo

      Sadržaj ovog sadržaja ne smije se unijeti u naredbeni redak, već u datoteku koju kreirate pod nazivom grub.cfg

  33.   Nodetin dijo

    Odličan članak, hvala!

  34.   David dijo

    Spektakularan…!! to je poput karike koja nedostaje.

  35.   r.garciag dijo

    Sviđaju mi ​​se vaši emulacijski vodiči za LInus Torvalds, ali jedan je korak koji ne razumijem, sljedeći:
    Sada kopiramo START.ELF u / next unutar naše mape koja simulira korijen našeg operativnog sustava. S konzolom idemo u korijensku mapu našeg novog operativnog sustava i provjeravamo postoje li dvije datoteke: jedna /boot/grub/grub.cfg i druga /next/START.ELF.

    Idemo u gornji direktorij i pozivamo uslužni program za stvaranje ISO-a s GRUB-om koji se zove grub-mkrescue

    Može li mi netko objasniti: str

    1.    AdrianArroyoStreet dijo

      Jednostavno da generiramo minimalni ISO koji GRUB može učitati, kopiramo kernel u (/ od ISO-a, bilo koju mapu) /naprijed/START.ELF i GRUB datoteku za konfiguraciju u (/ od ISO-a, bilo koju mapu) / boot / grub / grub.cfg. Kad je to gotovo, još nismo instalirali GRUB na ISO i postoji uslužni program koji generira ISO iz mape i instalira GRUB nazvan grub-mkrescue. Tada bismo konačno završili s pokretačkim ISO-om na koji je instaliran GRUB, koji može pročitati konfiguraciju kako bi kasnije ispravno izvršio START.ELF. Ne znam jesam li si objasnio, ali ono što radimo je vrsta lažnog datotečnog sustava pomoću kojeg generiramo ISO.

  36.   miguel jose guevara pozornost dijo

    Sjajno

  37.   michael moreno dijo

    Pa izgledajte stvarno novi sustav, ne toliko, ali ako poboljšavate linux, na primjer, stvarate linux exonucleus s poslužiteljskom komponentom koja djeluje kao mikro jezgra ako se to želi, to jest exo struktura s ponašanjem mikrozrcala koja bi bila super i linux.

    Druga stvar je da nisam stručnjak za programiranje, samo nekoliko sirastih c ++-a i malo jave, bilo bi mi dovoljno da linux kernel programu dam modul, uništavam ga, modificiram itd.

  38.   Zimski vojnik53 dijo

    Bez sumnje već moram na godišnji odmor.

  39.   Fermin dijo

    Ova dobra i u kojem programu je dizajnira i kodira?
    molim vas dajte mi taj odgovor

  40.   Mračni um dijo

    Pri kompajliranju iz vašeg gita dobivam:

    [jmponce @ build jar] $ cmake ..
    - Stvaranje direktorija NextRoot
    - Generiranje ISO skripte
    napravi DESTDIR = sljedeću instalaciju
    ./iso.sh
    - Pronađeni kisik: / usr / bin / doxygen (pronađena verzija "1.8.9")
    - Konfiguracija je gotova
    - Generiranje gotovo
    - Datoteke gradnje napisane su na: / home / jmponce / next-divel / build
    [jmponce @ build jar] $ make
    Skeniranje ovisnosti cilja START.ELF
    [7%] Izgradnja ASM-ATT objekta src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Izgradnja CXX objekta src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Izgradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Povezivanje izvršne datoteke CXX START.ELF
    / usr / bin / ld: Nekompatibilno /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a preskače se dok se traži -lgcc
    / usr / bin / ld: ne mogu pronaći -lgcc
    collect2: pogreška: ld vratio status izlaza 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Neuspjele upute za cilj 'src / START.ELF'
    make [2]: *** [src / START.ELF] Pogreška 1
    CMakeFiles / Makefile2: 106: Neuspjele upute za cilj 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Pogreška 2
    Makefile: 117: Neuspjeh u uputama za cilj "svi"
    make: *** [all] Pogreška 2

    1.    AdrianArroyoStreet dijo

      Čini se da je pogreška u tome što ne može pronaći llibgcc jer imate 64-bitnu verziju i trenutno je sustav gradnje prisiljen koristiti 32-bitnu. Trebali biste instalirati paket kompatibilnosti na vaš distro sustav ili bolje, koristite 32-bitni sustav.

      1.    Ronaldo Rodríguez dijo

        Imam 32 bita i dobivam istu pogrešku, mislite li na operativni sustav ili arhitekturu? moj je 64-bitni, ali koristim 32-bitni Ubuntu, ne pitajte, financijski problemi, s tim da kažem sve.

  41.   Jorge dijo

    Izvrsna tema, čeka se veći opseg. Živjeli

  42.   Jhon dijo

    Sjajno nadam se još

  43.   Soid perez dijo

    Pozdrav, ja sam mladi veleposlanik koji želi stvoriti operativni sustav koji podržava sve programe i platforme tako da programeri ne moraju imati moćne strojeve ili programe ili programe na računalu.
    zato me zanima ovaj post, ali kad preuzmem vaš git ili ga pokušam stvoriti, sve ide dobro dok ne izvršim naredbu ./iso.sh ili grub-mkrescue -o nextdivel.iso nextroot dobijete ovu pogrešku

    "Grub-mkrescue: upozorenje: vaš xorriso ne podržava" –grub2-boot-info ". Neke su značajke onemogućene. Koristite xorriso 1.2.9 ili noviji ..
    grub-mkrescue: upozorenje: Vaš xorriso ne podržava "–grub2-boot-info". Vaša je slika jezgre prevelika. Onemogućeno je pokretanje diska. Koristite xorriso 1.2.9 ili noviji .. »
    Zaista nemam pojma jer znam puno o aplikacijama i mrežama, ali ne znam ništa o grubu

    1.    AdrianArroyoStreet dijo

      Možda ćete trebati ažurirati program xorriso na vašem distro-u. Koji distro i verziju koristite?

      1.    Soid perez dijo

        Koristim xubuntu 14.04lts i pokušavam pokrenuti xorriso, ali ljuska mi kaže da ga ne može pronaći i dobivam apt-get install xorriso iako sam iskreno očekivao neki odgovor jer sam imao loše iskustvo s instaliranjem stvari koje ne znam u linuxu hehe . Odmah ću ga ažurirati i reći vam što se dogodilo

      2.    AdrianArroyoStreet dijo

        Zatim instalirajte xorriso iz softverskog centra ili jednostavno s terminala napravite "sudo apt-get install xorriso"

      3.    Soid perez dijo

        Već sam učinio sve što ste mi rekli i s git-om i s mojim dobivam ovaj xorriso 1.3.2: manipulator datotečnog sustava RockRidge, projekt libburnia.

        Pogonska struja: -outdev 'stdio: nextdivel.iso'
        Medijska struja: stdio datoteka, prepisljiva
        Status medija: prazno
        Sažetak medija: 0 sesija, 0 podatkovnih blokova, 0 podataka, 1901 m besplatno
        Dodano u ISO sliku: direktorij '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 datoteka dodano u 1 sekundi
        xorriso: FAILURE: Nije moguće utvrditi atribute izvorne datoteke '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Nema takve datoteke ili direktorija
        xorriso: UPDATE: 546 datoteka dodano u 1 sekundi
        xorriso: aborting: -abort_on 'FAILURE' nađen je 'FAILURE'
        i Velvet ne razumijem da je moja struktura /nextroot/boot/grub/grub.cfg i nextroot / next / START.ELF

      4.    Soid perez dijo

        Hvala, spreman sam za naprijed, prijatelj mi je pomogao i rekao mi je što sam pogriješio u organizaciji imenika, pa sam to sredio i to je to

      5.    Erik dijo

        Oprostite, možete li mi reći koji ste postupak izveli jer nisam dobio pogrešku za pokretanje: nema takve datoteke ili direktorija

        nema uređaja za pokretanje.

  44.   Jose dijo

    Živjeli! Htio sam te zamoliti za uslugu ako mi možeš poslati e-mail s onim što ovdje objašnjavaš, malo sam se zbunio i moram usporediti ono što imam s onim što objašnjavaš, možda mi nije jasno je li stvaranje grub. cfg vrši se u terminalu gcc ili gdje točno? puno hvala prijatelju!

    1.    AdrianArroyoStreet dijo

      Datoteku grub.cfg kreirate bilo kojim uređivačem teksta i morate je spremiti u PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano dijo

    Pozdrav Adrian, prije svega, čestitam ti i zahvaljujem na doprinosu.

    Znate da ovo radim za praksu i počeo sam to sastavljati slijedeći vaše poduke, no nakon početka pronašao sam prvu pogrešku

    $ kao -o kernel.o -c kernel.asm
    bash: as: naredba nije pronađena ...
    Slične su naredbe:
    'sa'
    'ac'

    Radim na Fedori 20 i ne mogu pronaći rješenje u tom pogledu, zahvalan bih na vašim uputama da li bih trebao nešto promijeniti u gcc-u ili plinu

    hvala unaprijed

    1.    AdrianArroyoStreet dijo

      Morate instalirati GAS kako bih mogao vidjeti kod pogreške. Nemam pri ruci Fedoru, ali u teoriji ako instalirate gcc-c ++, instalirat ćete čitav GCC paket, a on obično dolazi s GNU As.

  46.   Gaston Ramirez dijo

    Ja sam s vama, znam nešto o C ++, C # (iako ovaj posljednji u ovom pitanju nije previše koristan) loša stvar je što mi još uvijek nedostaje iskustva, nikad ne radim jezik C, vaša je publikacija sjajna, Nemam puno za reći, ako imam vremena vidim. Hvala vam.

  47.   Teresita del Isus nah sanchez dijo

    Puno vam hvala na velikoj pomoći….

  48.   jky dijo

    Volim linux, to je najbolji distrikt koji postoji, istina za moj Windows je smeće za koje znam da je tvorac linuxa kreator prozora

  49.   Rode dijo

    Pozdrav, dobivam pogrešku u grub kaže
    pogreška: datoteka /sljedeća/START.ELF Nije pronađena
    pogreška: prvo morate učitati kernel

    Možete li mi pomoći i poguglati, ali ne mogu pronaći

  50.   Henry Avila dijo

    Molim vas, kako mogu učiniti da se prikaže poruka POZDRAV SVIJET? Početnik sam i još uvijek ne znam dovoljno

  51.   CARLOS GUERRERO ALVAREZ dijo

    Meni se događa sljedeće:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -samostojeći -lgcc
    / usr / bin / ld: kernel.o: premještanje R_X86_64_32 protiv simbola `stog 'ne može se koristiti prilikom izrade PIE objekta; rekompajlirati sa -fPIE
    / usr / bin / ld: konačna veza nije uspjela: nereprezentativni odjeljak na izlazu
    collect2: pogreška: ld vratio 1 izlazni status