Posnemanje Linusa Torvaldsa: ustvarite svoj operacijski sistem iz nič (I)

Najprej komentirajte, da je to moj prvi članek in upam, da je vsem všeč.

Linus Torvals srečen

V tej seriji bomo posnemali Linus Torvalds, svoj operacijski sistem bomo ustvarili od 0. V tej prvi epizodi si bomo ogledali zagonski sistem in na jedro bomo dali besedilo na zaslon.

V mojem primeru se pokliče operacijski sistem NextDivel. Prva odločitev, ki jo moramo sprejeti takoj, ko pomislimo na operacijski sistem, je, kakšen bo zagonski nalagalnik?

Tu obstaja več različic in eno bi lahko celo ustvarili sami; vendar bom v tej vadnici uporabil GRUB, ker večina ve več ali manj nekaj o njem. Ustvarimo mapo, ki bo koren našega operacijskega sistema, in tam ustvarimo mapo / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Tam ustvarimo datoteko grub.cfg, kot sledi:

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

V tej datoteki smo videli, kako GRUB bo naše jedro naložil v tem primeru v /next/START.ELF. Zdaj moramo ustvariti svoje jedro.

Za to bomo potrebovali GCC y GAS (monter projekta GNU, ponavadi je priložen gcc). Torej bomo ustvarili jedro.

Najprej naredimo datoteko z imenom kernel.asm. Ta datoteka bo vsebovala začetno točko našega jedra in bo opredeljevala tudi večzagon (značilnost nekaterih zagonskih nalagalnikov, kot je npr. GRUB). Vsebina kernel.asm bo:

.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

Vse, kar je povezano z multibootom, je preprosto slediti specifikaciji nič drugega. Vse se bo začelo v startu, poklicalo bo multiboot_entry, v prvih 4k bomo definirali glavo več zagonov in ga postavili (z movl).

Kasneje pokličemo NextKernel_Main, ki je naša funkcija jedra C. V zanki ustavimo računalnik. To je sestavljeno iz:

as -o kernel.o -c kernel.asm

Zdaj bomo vstopili v programiranje v C. Mislili boste, da je zdaj vse skupaj, smo postavili printf en Glavni in to je to, to smo že storili.

No ne, saj printf y Glavni so funkcije, ki jih določa operacijski sistem, vendar jih ustvarjamo! Uporabljamo lahko samo funkcije, ki jih določimo sami.

V naslednjih poglavjih bom govoril o tem, kako postaviti lastno knjižnico C (glibc, bionic, newlibc), vendar občasno. Razpravljali smo o tem, da želimo postaviti besedilo na zaslon, pa bomo videli, kako bomo to storili.

Obstajata dve možnosti, ena je, da pokličete BIOS drugo pa je neposredno upravljanje pomnilnika zaslona. Slednje bomo storili, ker je bolj jasno od C in nam bo to tudi omogočilo, ko vstopimo v zaščiten način.

Ustvarimo datoteko z imenom NextKernel_Main.c z naslednjo vsebino:

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

S tem neposredno manipuliramo s spominom VGA in znak za znakom pišemo. Zberemo tako, da onemogočimo stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Če ste prišli tako daleč, boste zdaj želeli preizkusiti svoj popolnoma nov operacijski sistem, vendar še nismo končali. Potrebujemo majhno datoteko, ki prevajalniku pove, kje v datoteki naj zapusti vsak odsek. To se naredi s povezovalnim skriptom. Ustvarimo 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 = .;
}

S tem določimo položaj vsakega odseka in vstopno točko, start, ki smo jo določili v kernel.asm. Zdaj lahko združimo vso to domislico:

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

Zdaj kopiramo START.ELF v / zraven v našo mapo, ki simulira koren našega operacijskega sistema. S konzolo odpremo korensko mapo našega novega operacijskega sistema in preverimo, ali obstajata dve datoteki: ena /boot/grub/grub.cfg in druga /next/START.ELF.

Gremo v zgornji imenik in pokličemo pripomoček za ustvarjanje ISO s klicem GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Ko bomo to storili, bomo imeli ISO. Ta ISO je mogoče odpreti v računalnikih x86 (Tudi 64 bitov) in navidezni stroji. Da ga preizkusim, bom uporabil QEMU. Mi kličemo QEMU iz ukazne vrstice:

qemu-system-i386 nextdivel.iso

Bo začel SeaBIOS in kasneje bomo imeli GRUB. Kasneje, če je vse pravilno, bomo videli naš stavek.
Mislili boste, da je to težko, odgovorim, da je.

Resnično je ustvariti operacijski sistem težko in da ta tukaj ne naredi nič koristnega. V prihodnjih poglavjih bomo videli, kako ravnati z barvami na zaslonu, si rezervirati pomnilnik in, če lahko, kako pridobiti podatke s tipkovnice.

Če nekdo ne želi vsega kopirati tukaj, imam na tem mestu skladišče GitHub (bolj dodelano) z operacijskim sistemom NextDivel. Če želite prevesti NextDivel samo imeti moraš git in 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

Svetujem vam, da sodelujete pri NextDivelu, če imate čas in željo po ustvarjanju operacijskega sistema. Morda celo boljši od Linuxa ... čas bo pokazal.


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   živahno je dejal

    :O

    1.    marianogaudix je dejal

      Torvalds je operacijski sistem Minix (izpeljan iz UNIX-a) prevzel Andrewa S. Tanenbauma in ga izboljšal.

      Tanenbaum se je sprl z Linusom, drug drugega sta žalila. Tanenbaum pravi, da je Microkernel prihodnost (HURD, Minix novi stožec Microkernel).

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

  2.   eliotime3000 je dejal

    To je bila najboljša objava, ki sem jo doslej videl na tem blogu. Že želim vedeti, kaj naj še storim.

  3.   Carlos, Gude je dejal

    Bodite navdušeni

  4.   os je dejal

    Res impresivno !!

  5.   rhoconlinux je dejal

    FUUUUUUA!
    To je najbolj geeki objava, kar sem jih kdaj videl. Čestitam, Adrián, članek o kurbi! hiper zanimivo !!! 🙂

    1.    Joaquin je dejal

      Strinjam se. Predstavljam si to situacijo:
      Uporabnik GNU / Linux Power (z veselim obrazom):
      "Gentoo že znam sestaviti"

      Nerd (zaničljivo): «pff, ustvaril sem svoj distro ...»

      1.    desikoder je dejal

        Da, lahko ustvarim svoj distribucijski sistem linux. Pravzaprav v njem razvijam initramfs in jedro za vdelani linux. Ustvarjanje operacijskega sistema ni enako kot distribucija linuxa. Prvi je veliko težji, skoraj nemogoč, drugi je, kot ste že rekli, lahko karkoli, tudi Ubuntu s spremenjenim logotipom xD. Tako bi pustil takole:

        Uporabnik GNU / Linux Power (z veselim obrazom)
        - Že vem, kako sestaviti svoj Gentoo

        Pol-Nerd
        - Pff, sledil sem Linuxu od začetka in naredil svoj distro

        Nerd (s prezirljivo držo)
        - pff, ker sem programiral jedro v asemblerju in v C-ju

        Saludos!

  6.   Cronos je dejal

    To je zame zanimivo do naslednjih poglavij.

  7.   abimaelmartell je dejal

    To vadnico sem videl že pred časom, je za C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet je dejal

      Hvala za povezavo, si jo bom ogledal.

  8.   Jose Jácome je dejal

    Želel bi, da bi bil operacijski sistem 100% združljiv z grafiko AMD: /

    1.    ivanlinux je dejal

      Windows

      1.    Jose Jácome je dejal

        hahaha v sistemu Windows Catalyst nima podpore za OpenGL, čeprav v Linuxu ne morem uporabiti vse grafične moči, ki jo bom čakal, da vidim, kaj se bo zgodilo!

        1.    beny_hm je dejal

          samo počakajte, da ventil zbriše trg

  9.   KZKG ^ Gaara je dejal

    Čaroben, popoln, odličen prispevek, izgleda kot odlična serija objav 🙂

  10.   O_Pixote_O je dejal

    Buah, rad bi vedel, kako programirati, da ti pomaga, preprosto kot način vadbe z znanjem, ki se ga učiš, in eden pomaga. Za zdaj vam prepuščam geslo, da opozorite na projekt, ko ga končate "Uporabi NextDivel, porno je videti enako (ali bolje).", Pometali boste xD.

  11.   to ime je napačno je dejal

    Mooooooolaaa !!!!

  12.   nordi je dejal

    Zelo dober članek, a le radoveden, zakaj niste spremljali projekta Linux From Scratch?

    pozdrav

    1.    AdrianArroyoStreet je dejal

      No, Linux iz Scratcha je v redu in lahko ugotovite, da je vaš, vendar je res zelo mehaničen:
      -Prenos pisav
      -Popravi jih
      -Sestavi
      -Namestite
      -Sledim
      Tudi če je rezultat na koncu slabši, lahko rečete, da ste pregledali vse datoteke.

    2.    desikoder je dejal

      Kot je razvidno iz mojega prejšnjega komentarja, ker nima enake stopnje zapletenosti. Poleg tega linux iz nič v resnici v nasprotju z njegovim imenom ne ustvarja sistema iz nič. Ustvarjanje sistema iz nič ga programirate sami, pišete svoje jedro, ne jedra linuxa, če je le mogoče, tudi lastni zagonski nalagalnik namesto grub, lilo, syslinux itd. Čeprav LFS ni majhen podvig in je precej zapleten, niti približno ne programira lastnega jedra ...

      Poleg tega se strinjam z AdrianArroyo Calle, da je preveč mehaničen, nekoč sem ga že prebral in na koncu odnehaš na šesti strani, prav tako ti rečejo, da uporabiš katere različice paketov, ker druga navodila ne bodo delovala (da kaže premalo prilagodljivosti, po mojem mnenju). Mislim, da je bolje imeti nekaj po svoji zamisli, sestaviti pakete, ki jih želite, celo nekatere programirati, sestaviti jedro linux in v miru.

      Saludos!

  13.   piškotek je dejal

    uuuoooohh !! Nikoli še nisem zajel objave tako kot ta.
    Nadaljujte 😀

  14.   linux_user je dejal

    Ne vem, kaj je narobe:

    napaka: glave z več zagoni ni mogoče najti.
    Napako morate najprej naložiti jedro

    1.    AdrianArroyoStreet je dejal

      Če mi je v tolažbo, sem storil isto napako. Poskusite uporabiti vire v GitHubu, tam je napaka že odpravljena. Vseeno mislim, da če spremenite vrstico grub.cfg iz "multiboot /next/START.ELF" v "kernel /next/START.ELF", bo to morda delovalo. Ne vem natančno.

      1.    mcbanana je dejal

        Najprej čudovit vhod 🙂
        Imam enako težavo pri nalaganju jedra iz grub. Tudi z uporabo virov GitHub ali spreminjanjem večzagonov za jedro ...

        napaka: glave z več zagoni ni mogoče najti.
        napaka: ni naloženega jedra

        1.    AdrianArroyoStreet je dejal

          Ali uporabljate clang kot prevajalnik? Spremeni za gcc
          Ste se spomnili uporabiti povezovalni skript? To je potrebno, da povezovalnik (ld v našem primeru) ve, kam v datoteko bo shranil vsako stvar. V tem primeru mora biti glava z več zagoni na začetku.
          Ali uporabljate sistem CMake? Če ga uporabljate, mislim, da ne uspe.
          Če vam ne bo uspelo, bom poskusil najti drugo rešitev.

  15.   Khourt je dejal

    [+100]
    Res super !!!

  16.   nevidno15 je dejal

    Res je kul 🙂

  17.   tanrax je dejal

    Slečem klobuk. Impresivna objava. Vse čestitke.

  18.   moški je dejal

    vau!
    Odlično bi bilo, če bi lahko odprli programe, izdelane v HTML5 in Javascript, ne da bi morali uporabljati brskalnik, ali je to mogoče?
    Govorim o njih kot o izvornih aplikacijah.
    Tako bi bilo enostavno programirati za ta operacijski sistem 😀

    1.    AdrianArroyoStreet je dejal

      V tem primeru tega ne bom storil, ker za sabo zahteva veliko več dela, vendar obstaja operacijski sistem, imenovan "is", ki naredi to, kar rečete. Dejansko je ukazna vrstica JavaScript in okna se narišejo s funkcijami JavaScript Canvas. Inženirji Nintenda so to storili in zdaj so odprtokodni.

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

      1.    moški je dejal

        Valla, hvala za informacije 😀
        Bom pogledal

  19.   patodx je dejal

    Kdor si lahko ustvari svoj OS, lahko umre mirno, saj mora z njim doseči intelektualno raven; Zaradi tega se odreče nebesom ali peklu.
    Košček objave.

    1.    Miguel je dejal

      Do zdaj še nihče ni vedel, da je naredil le nekaj, za kar bi lahko rekli, da je dostojen operacijski sistem, narejen iz nič, niti Linux Torvalds, kot pravite na začetku, saj se je to začelo iz virov Unixa, vse ostalo pa je skupno več kot pri eni osebi je življenje zelo kratko in začeti od začetka je za vsakogar nepredstavljivo, četudi se želi ravno nasprotno, je to razvidno iz številnih napak pri kopiranju in lepljenju Linuxa Torvaldsa

      1.    skarmiglione je dejal

        Viri unixa so zaprti, uporaba minixa ... kar je nekaj drugega.

      2.    Filip Robaina je dejal

        in tisti, ki so naredili QDOS kaj?
        so temeljili na nečem?

  20.   Tesla je dejal

    Kar vidim, kdo nima svojega operacijskega sistema, je zato, ker tega noče, hahahaha.

    Zdaj resno, zelo zanimivo! Veliko presega moje omejeno znanje programiranja, vendar bom ostale dele te serije prebral s pričakovanjem.

    Hvala za prispevek!

  21.   Manuel R. je dejal

    Pustil si me z obrazom O_O ... brez namena podcenjevanja prispevkov kogar koli, je najbolj "profesionalen", kar sem jih videl v zadnjem času. S spoštovanjem.

  22.   aitor_cz je dejal

    Zelo dober članek, Adrián. Nadaljujte…

  23.   mj je dejal

    Se hecate na prvi aprilski dan?, Ne bodite zlobni "Posnemanje Linusa Torvaldsa: Ustvarite svoj operacijski sistem iz nič." Mislim, da tistim, ki nadaljujejo kariero na kakšnem tehnološkem inštitutu ali univerzi, ni težko; ampak zame sem lokostrelec začetnik (obstajajo tisti, ki nas kličejo "Noob", vendar se imam za bolj začetnika, ki je nekoliko len), kar zveni, kot da ne stopim na kopno. Kakorkoli že TA ČLEN USTVARJA ​​VELIKO ZANIMLJIVOSTI IN BREZ Dvomljivega občudovanja in spoštovanja do njegovega urednika, ČESTITKE; Najprej bom poskusil vsaj malo razumeti to dragoceno gradivo.
    HVALA Adrian Arroyo Calle, odlično delo in plemenito podajanje znanja.

  24.   Blaire pascal je dejal

    LEL Odlična objava, tako nadaljujte.

  25.   f3niX je dejal

    Kako odlična objava, to je tisto, kar sem pogrešal desde linux. čudovito

  26.   Ruby je dejal

    Odlična objava, najlepša hvala.
    Nisem razumel, kaj počne datoteka link.ld, mi lahko kdo razloži?

    1.    AdrianArroyoStreet je dejal

      Datoteka link.ld poveže povezovalcu (v tem primeru ld), kje naj bo vsak del kode v nastali datoteki. Določimo tudi vstopno točko, ker ker nimamo operacijskega sistema, main-a ne moremo uporabljati kot običajni program, v tem primeru izberemo funkcijo za zagon.

  27.   Maxi je dejal

    Odlično vse vaše prispevke! Čakam na 7! Kaj če dvomim, na primer, če sem hotel zagnati samo algoritem, brez OS, kako naj vem, kaj lahko uporabim in česa ne C?

    1.    AdrianArroyoStreet je dejal

      Če jo uporabljate tako, ne bi mogli uporabiti ničesar od stdlib, kar je praktično tisto, kar vsi uporabljajo (brez malloc, free, printf, scanf, strcmp itd.). Vse je treba izvesti neposredno iz pomnilnika ali ASM. Mogoče vam v zgornjem poglavju pokažem, kako namestiti knjižnico C za operacijski sistem. Če uporabljate C ++, ne morete uporabiti izjem in operaterjev new in delete (in zagotovo več).

    2.    preklopnik je dejal

      mislim to lahko vam da boljše predstave o tem, kako to storiti.

  28.   Esteban je dejal

    Pozdravljeni, pred približno petimi leti sem spremljal podobno publikacijo in razvil mikrojedro, ki se začne na enak način, nekatere vidike je treba izboljšati, vendar vas morda zanima, deluje v zaščitenem načinu, izvaja večopravilnost in virtualizacijo pomnilnika, v zadnjem času sem delal na njem gonilnik diska in cd pogon, da ga je mogoče namestiti in ne samo zagnati na CD-ju v živo ... Lep pozdrav.

  29.   Johan je dejal

    Spoštovani, pri izvajanju ukaza imam napako:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -samostojni -lgcc

    link.ld: 5 sintaksnih napak
    colle2: napaka: ld je vrnil 1 status izhoda

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

    V vrstici 5 ne vidim napake, ali je kdo enak?

    Delam z navideznim debianovim piskanjem v virtualboxu

    1.    Slika ograde Julian Reyes Escrigas je dejal

      dodajte ";" na koncu * (. multiboot_header)

  30.   Eric Orellana Romero je dejal

    Odlična pobuda, zagotovo bom sledil poglavjem tega prispevka, nameravam se iz njega veliko naučiti. Najlepša hvala, ker ste si vzeli čas in nas učili. V zvezi s tem je treba omeniti samo eno podrobnost, da Linus Torvalds ni ustvarjalec nobenega operacijskega sistema, ustvaril je jedro sistema GNU / Linux (tisto, ki je bilo uporabljeno v drugih OS), kar je še vedno vredno, vendar je pomembno, da Richardu Stallmanu priznamo, da je ustvaril večino operacijskega sistema.

    Najlepša hvala za prispevek in upam, da upoštevate moje opažanje.

  31.   Slika ograde Julian Reyes Escrigas je dejal

    Že nekaj časa se zezam s temo, zanimalo me je takoj, ko sem prebral naslov. vendar sporočilo še naprej dobiva

    napaka: glave z več zagoni ni mogoče najti.
    Napako morate najprej naložiti jedro

    Naložil sem tisto, kar vzamem v repo na github https://github.com/rkmax/GenyOS

    1.    martin villalba je dejal

      Z menoj se zgodi isto. Ste našli rešitev?

  32.   Carlos je dejal

    vprašanje, ki sem ga začel uvajati sintakso, in menijska vstopna vrstica mi pove, da ukaz ni bil najden, kdo bi mi lahko povedal, zakaj
    to počnem

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: ukaza ni mogoče najti

    1.    AdrianArroyoStreet je dejal

      Vsebine te vsebine ne smete vnašati v ukazno vrstico, temveč v datoteko, ki jo ustvarite, imenovano grub.cfg

  33.   Nodetin je dejal

    Odličen članek, hvala!

  34.   David je dejal

    Spektakularno ... !! tako kot manjkajoča povezava.

  35.   r.garciag je dejal

    Všeč so mi vaje o posnemanju LInusa Torvaldsa, toda korak, ki ga ne razumem, je naslednji:
    Zdaj kopiramo START.ELF v / zraven v našo mapo, ki simulira koren našega operacijskega sistema. S konzolo odpremo korensko mapo našega novega operacijskega sistema in preverimo, ali obstajata dve datoteki: ena /boot/grub/grub.cfg in druga /next/START.ELF.

    Gremo v zgornji imenik in pokličemo pripomoček za ustvarjanje ISO z GRUB, imenovan grub-mkrescue

    Bi mi lahko kdo razložil: str

    1.    AdrianArroyoStreet je dejal

      Preprosto, da ustvarimo najmanjši ISO, ki ga lahko GRUB naloži, kopiramo jedro v (/ ISO, katero koli mapo) /next/START.ELF in konfiguracijsko datoteko GRUB v (/ ISO, katero koli mapo) / boot / grub / grub.cfg. Ko je to končano, GRUB-a še nismo namestili v ISO in obstaja pripomoček, ki ustvari ISO iz mape in namesti GRUB, imenovan grub-mkrescue. Potem bi končno končali z zagonskim ISO-jem, v katerem je nameščen GRUB, ki lahko prebere konfiguracijo, da pozneje pravilno izvede START.ELF. Ne vem, ali sem si razložil, toda to, kar počnemo, je nekakšen lažni datotečni sistem, s katerim ustvarimo ISO.

  36.   miguel jose guevara pozornost je dejal

    Buenísimo

  37.   Michael Moreno je dejal

    No, res ne glejte toliko novega sistema, ampak če izboljšate linux, na primer ustvarite linux exonucleus s strežniško komponento, ki po želji deluje kot mikronukleus, to je ekso struktura z vedenjem mikronukleusa, ki bi bila super in linux.

    Druga stvar je, da nisem strokovnjak za programiranje, le nekaj sirastega c ++ in nekaj jave, dovolj bi mi bilo, da dam jedru linux modul, ga drobim, spreminjam itd.

  38.   WinterSoldier53 je dejal

    Brez dvoma moram že na dopustu.

  39.   Fermín je dejal

    Ta dobra in v katerem programu jo oblikujete in kodirate
    prosim, dajte mi ta odgovor

  40.   Temni um je dejal

    Pri sestavljanju iz vašega gita dobim:

    [jmponce @ jar build] $ cmake ..
    - Ustvarjanje imenika NextRoot
    - Ustvarjanje skripta ISO
    naredite DESTDIR = naslednjo namestitev
    ./iso.sh
    - Najden kisik: / usr / bin / doxygen (najdena različica "1.8.9")
    - Konfiguriranje končano
    - Ustvarjanje končano
    - Datoteke gradnje so bile napisane na: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Skeniranje odvisnosti cilja START.ELF
    [7%] Gradnja predmeta ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Gradnja predmeta CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Izdelava predmeta CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Izdelava predmeta CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Gradnja predmeta CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Gradnja objekta CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Gradnja predmeta CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Izdelava predmeta CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Povezovanje izvedljivega programa CXX START.ELF
    / usr / bin / ld: Nezdružljivo /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a je med iskanjem -lgcc preskočeno
    / usr / bin / ld: -lgcc ni mogoče najti
    collect2: napaka: ld vrnil status izhoda 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Napačna navodila za cilj 'src / START.ELF'
    make [2]: *** [src / START.ELF] Napaka 1
    CMakeFiles / Makefile2: 106: Napačna navodila za cilj 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Napaka 2
    Makefile: 117: Neuspeh v navodilih za ciljno "vse"
    make: *** [vse] Napaka 2

    1.    AdrianArroyoStreet je dejal

      Zdi se, da je napaka v tem, da ne more najti llibgcc, saj imate 64-bitno različico in je trenutno sistem prevajanja prisiljen uporabljati 32-bitno. Na svoj distribucijski sistem namestite paket združljivosti ali bolje, uporabite 32-bitni sistem.

      1.    Ronaldo Rodríguez je dejal

        Imam 32 bitov in dobim isto napako, ali mislite na operacijski sistem ali arhitekturo? moj je 64-bitni, vendar uporabljam 32-bitni Ubuntu, ne sprašujte, finančne težave, s tem povem vse.

  41.   Jorge je dejal

    Odlična tema, čaka na večji obseg. Na zdravje

  42.   Jhon je dejal

    Super upam na več

  43.   Soid perez je dejal

    Pozdravljeni, sem mladi veleposlanik, ki želi ustvariti operacijski sistem, ki podpira vse programe in platforme, tako da razvijalcem ni treba imeti na računalniku zmogljivih strojev ali aplikacij ali programov.
    zato me zanima ta objava, toda ko prenesem vaš git ali ga poskusim ustvariti, gre vse dobro, dokler ne izvedem ukaza ./iso.sh ali grub-mkrescue -o nextdivel.iso nextroot, dobite to napako

    "Grub-mkrescue: opozorilo: vaš xorriso ne podpira" –grub2-boot-info ". Nekatere funkcije so onemogočene. Uporabite xorriso 1.2.9 ali novejšo različico.
    grub-mkrescue: opozorilo: Vaš xorriso ne podpira "–grub2-boot-info". Vaša slika jedra je prevelika. Zagon diska je onemogočen. Uporabite xorriso 1.2.9 ali novejšo različico .. »
    Resnično nimam pojma, saj vem veliko o aplikacijah in spletnih straneh, o grubu pa ne vem ničesar

    1.    AdrianArroyoStreet je dejal

      Morda boste morali posodobiti program xorriso na vašem distribucijskem sistemu. Kateri distro in različico uporabljate?

      1.    Soid perez je dejal

        Uporabljam xubuntu 14.04lts in poskušam zagnati xorriso, vendar mi lupina pove, da ga ne najde in dobim apt-get install xorriso, čeprav sem iskreno pričakoval kakšen odziv, ker sem imel slabe izkušnje z namestitvijo stvari, ki jih v Linuxu ne poznam hehe . Takoj ga posodobim in vam povem, kaj se je zgodilo

      2.    AdrianArroyoStreet je dejal

        Nato namestite xorriso iz programskega centra ali preprosto s terminala naredite "sudo apt-get install xorriso"

      3.    Soid perez je dejal

        Vse, kar ste mi povedali, sem že naredil in tako z gitom kot z mojim dobim ta xorriso 1.3.2: manipulator datotečnega sistema RockRidge, projekt libburnia.

        Pogonski tok: -outdev 'stdio: nextdivel.iso'
        Mediji: datoteka stdio, prepisljiva
        Stanje medija: prazno
        Povzetek medija: 0 sej, 0 podatkovnih blokov, 0 podatkov, 1901 m brezplačno
        Dodano v sliko ISO: direktorij '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: v 546 sekundah je dodanih 1 datotek
        xorriso: FAILURE: Ne morem določiti atributov izvorne datoteke '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Takšne datoteke ali imenika ni
        xorriso: UPDATE: v 546 sekundah je dodanih 1 datotek
        xorriso: aborting: -abort_on "FAILURE" je naletel na "FAILURE"
        in Velvet ne razumem, moja struktura je /nextroot/boot/grub/grub.cfg in nextroot / next / START.ELF

      4.    Soid perez je dejal

        Hvala, pripravljen sem iti naprej, prijatelj mi je pomagal in mi povedal, kaj sem naredil narobe, da je organizacija imenika, zato sem ga uredil in to je to

      5.    erik je dejal

        Oprostite, ali mi lahko poveste, kakšen postopek ste izvedli, ker se napaka ne zažene: nobena datoteka ali imenik

        ni naprave za ponovni zagon.

  44.   jose je dejal

    Na zdravje! Hotel bi vas prositi za uslugo, če bi mi lahko poslali e-poštno sporočilo s tem, kar tukaj razlagate, sem se nekoliko zmedel in moram primerjati to, kar imam, s tem, kar pojasnjujete, morda mi ni jasno, ali ustvarjanje grub. cfg se izvede v terminalu gcc ali kje točno? najlepša hvala prijatelju!

    1.    AdrianArroyoStreet je dejal

      Datoteko grub.cfg ustvarite s katerim koli urejevalnikom besedil in jo morate shraniti v PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano je dejal

    Pozdravljeni Adrian, najprej vam čestitam in se zahvaljujem za vaš prispevek.

    Veste, da to počnem za vajo in sem jo začel sestavljati po vaših vajah, vendar sem po začetku našel prvo napako

    $ kot -o kernel.o -c kernel.asm
    bash: as: ukaza ni mogoče najti ...
    Podobni ukazi so:
    'sa'
    'ac'

    Delam na Fedori 20 in v zvezi s tem ne najdem rešitve. Hvaležen bi bil za vaše napotke, ali naj kaj spremenim v gcc ali plinu

    vnaprej hvala

    1.    AdrianArroyoStreet je dejal

      Namestiti morate GAS, da bom lahko videl kodo napake. Nimam Fedore pri roki, vendar teoretično, če namestite gcc-c ++, boste namestili celoten paket GCC in GNU, kot je običajno priložen.

  46.   Gaston Ramirez je dejal

    Z vami sem, vem nekaj o C ++, C # (čeprav ta zadnji v tej zadevi ni zelo uporaben) slabo je, da mi še vedno primanjkuje izkušenj, jezika C nikoli ne obvladam, vaša objava je super, Nimam kaj dosti povedati, če imam čas, ki ga vidim. Hvala vam.

  47.   Teresita del Jezus nah sanchez je dejal

    Najlepša hvala za veliko pomoč….

  48.   jky je dejal

    Všeč mi je linux, to je najboljše okrožje, resnica za moja okna je smeti, za katere vem, da je ustvarjalec linux ustvarjalec oken

  49.   Vožnja je dejal

    Pozdravljeni, prišlo je do napake v grub
    napaka: datoteka /next/START.ELF Ni mogoče najti
    napaka: najprej morate naložiti jedro

    Bi mi lahko pomagali in poguglali, vendar ne najdem

  50.   Henry Avila je dejal

    Prosim, kako naj prikažem sporočilo HELLO WORLD? Sem začetnik in še vedno ne vem dovolj

  51.   CARLOS GUERRERO ALVAREZ je dejal

    Zgodi se mi naslednje:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -samostojni -lgcc
    / usr / bin / ld: kernel.o: premestitev R_X86_64_32 proti simbolu `stack 'ni mogoče uporabiti pri izdelavi predmeta PIE; ponovno prevedite s -fPIE
    / usr / bin / ld: končna povezava ni uspela: odsek na izhodu ni predstavljiv
    colle2: napaka: ld je vrnil 1 status izhoda