Emulace Linuse Torvaldse: Vytvořte si svůj vlastní operační systém od nuly (I)

Nejprve poznamenejte, že toto je můj první článek a že doufám, že se vám všem líbí.

Linus Torvals šťastný

V této sérii budeme napodobovat Linus Torvalds, vytvoříme náš operační systém od 0. V této první epizodě uvidíme boot a vložíme text na obrazovku z našeho jádra.

V mém případě se volá operační systém DalšíDivel. První rozhodnutí, které musíme učinit, jakmile vezmeme v úvahu operační systém, je to, co bude bootloader?

Zde existuje několik variant a jednu bychom si dokonce mohli vytvořit sami; nicméně v tomto tutoriálu budu používat GRUB, protože většina o něm ví víceméně něco. Vytvoříme složku, která bude kořenem našeho operačního systému, a tam vytvoříme složku / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Tam vytvoříme soubor grub.cfg následovně:

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

V tomto souboru jsme viděli jak GRUB načte naše jádro, v tomto případě do /next/START.ELF. Nyní musíme vytvořit naše jádro.

K tomu budeme potřebovat GCC y GAS (asembler projektu GNU, obvykle přichází s gcc). Takže vytvoříme jádro.

Nejprve vytvoříme soubor s názvem kernel.asm. Tento soubor bude obsahovat počáteční bod našeho jádra a bude také definovat multiboot (funkce některých bootloaderů, jako je GRUB). Obsah souboru kernel.asm bude:

.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

Vše, co souvisí s multibootem, je jednoduše sledovat specifikaci, nic víc. Všechno začne na začátku, zavolá multiboot_entry, v první 4k budeme mít definovanou hlavičku multiboot a dáme ji (s movl).

Později zavoláme NextKernel_Main, což je naše funkce jádra C. Ve smyčce zastavíme počítač. Toto se kompiluje s:

as -o kernel.o -c kernel.asm

Nyní se chystáme vstoupit do programování v C. Budete si myslet, že teď je všechno hračka, dali jsme a printf en hlavní a to je vše, dokázali jsme to.

No, protože printf y hlavní jsou to funkce, které jsou definovány operačním systémem, ale vytváříme je! Můžeme používat pouze funkce, které sami definujeme.

V dalších kapitolách budu hovořit o tom, jak dát svou vlastní knihovnu C (glibc, bionic, newlibc), ale čas od času. Mluvili jsme, že chceme umístit text na obrazovku, uvidíme, jak to uděláme.

Existují dvě možnosti, jedna je zavolat na BIOS a další je přímá správa paměti obrazovky. Uděláme to druhé, protože je to jasnější z C a také nám to umožní, když vstoupíme do chráněného režimu.

Vytvoříme soubor s názvem NextKernel_Main.c s následujícím obsahem:

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

Tím přímo manipulujeme s pamětí VGA a znak po znaku to píšeme. Zkompilovali jsme deaktivací stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Pokud jste se dostali až sem, budete chtít vyzkoušet svůj zbrusu nový operační systém hned, ale ještě jsme neskončili. Potřebujeme malý soubor, který řekne kompilátoru, kde v souboru opustí každou sekci. To se provádí pomocí linkerového skriptu. Vytvoříme 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 = .;
}

Tímto definujeme pozici každé sekce a vstupního bodu, start, který jsme definovali v kernel.asm. Nyní můžeme spojit všechny tyto výmysly:

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

Nyní zkopírujeme START.ELF do / další uvnitř naší složky, která simuluje kořen našeho operačního systému. Pomocí konzoly přejdeme do kořenové složky našeho nového operačního systému a ověříme, zda existují dva soubory: jeden /boot/grub/grub.cfg a další /next/START.ELF.

Přejdeme do horního adresáře a zavoláme nástroj pro vytváření ISO s názvem GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Jakmile to uděláme, budeme mít ISO. Tuto ISO lze otevřít na počítačích x86 (64 bitů příliš) a virtuální stroje. Abych to otestoval, použiji QEMU. Voláme QEMU z příkazového řádku:

qemu-system-i386 nextdivel.iso

Začne SeaBIOS a později budeme mít GRUB. Později, pokud je vše v pořádku, uvidíme naši frázi.
Budete si myslet, že je to obtížné, odpovídám, ano, je.

Skutečné vytvoření operačního systému je obtížné a že tento zde nedělá nic užitečného. V dalších kapitolách uvidíme, jak zacházet s barvami na obrazovce, rezervovat paměť a pokud mohu, jak získávat data z klávesnice.

Pokud sem někdo nechce všechno kopírovat, mám úložiště na GitHub (propracovanější) s operačním systémem DalšíDivel. Pokud chcete kompilovat DalšíDivel stačí mít git a 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

Doporučuji vám spolupracovat na NextDivel, pokud máte čas a chuť vytvořit operační systém. Možná dokonce lepší než Linux ... čas ukáže.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   živý řekl

    :O

    1.    marianogaudix řekl

      Torvalds převzal operační systém Minix (odvozený od UNIXu) Andrewovi S. Tanenbaumovi a vylepšil jej.

      Tanenbaum bojoval s Linusem, uráželi se navzájem. Tanenbaum říká, že Microkernel je budoucnost (HURD, Minix nový kužel Microkernel).

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

  2.   eliotime3000 řekl

    Toto byl zatím nejlepší příspěvek, který jsem na tomto blogu viděl. Už chci vědět, co jiného mám dělat.

  3.   Carlos řekl

    Buďte ohromeni

  4.   Axl řekl

    Opravdu působivé !!

  5.   rhoconlinux řekl

    FUUUUUUA!
    Je to nejvtipnější příspěvek, jaký jsem kdy viděl. Gratulujeme Adriánovi, kurva! velmi zajímavé !!! 🙂

    1.    Joaquin řekl

      Souhlasím. Představuji si tuto situaci:
      GNU / Linux Power User (se šťastnou tváří):
      „Už vím, jak sestavit své Gentoo“

      Nerd (pohrdavě): «pff, vytvořil jsem si vlastní distro ...»

      1.    desikoder řekl

        Ano, mohu si vytvořit vlastní linuxovou distribuci. Ve skutečnosti v něm vyvíjím initramfs a jádro pro vložený linux. Vytvoření operačního systému není totéž jako linuxová distribuce. První je mnohem obtížnější, téměř nemožný, druhý, jak jste řekli, může být cokoli, dokonce i Ubuntu se změnou loga xD. Takže bych to nechal takhle:

        GNU / Linux Power User (se šťastnou tváří)
        - Už vím, jak sestavit své Gentoo

        Poloblbeček
        - Pff, sledoval jsem linux od nuly a vytvořil jsem si vlastní distribuci

        Nerd (s pohrdavým přístupem)
        - pff, protože jsem naprogramoval jádro v assembleru a v C

        Saludos!

  6.   cronos řekl

    To je pro mě zajímavé, čekám na další kapitoly.

  7.   abimaelmartell řekl

    dávno jsem viděl tento tutoriál, je pro C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyo Street řekl

      Díky za odkaz, podívám se na to.

  8.   Jose Jácome řekl

    Chtěl bych 100% kompatibilní operační systém s grafikou AMD: /

    1.    ivanlinux řekl

      Windows

      1.    Jose Jácome řekl

        hahaha ve Windows Catalyst nemá podporu OpenGL, i když v Linuxu nemohu využít veškerou grafickou sílu, budu čekat, co se stane!

        1.    beny_hm řekl

          jen počkejte, až ventil vymaže trh

  9.   KZKG ^ Gaara řekl

    Kouzelný, dokonalý, vynikající příspěvek, vypadá to jako skvělá série příspěvků 🙂

  10.   O_Pixote_O řekl

    Buah, chtěl bych vědět, jak ti programovat, abych ti pomohl, jednoduše jako způsob, jak cvičit s vědomím, že se učíš, a jeden pomáhá. Prozatím vám nechávám heslo upozornit na projekt, jakmile jej dokončíte „Použijte NextDivel, porno vypadá stejně (nebo lépe).“, Zametnete xD.

  11.   toto jméno je falešné řekl

    Mooooooolaaa !!!!

  12.   nordi řekl

    Velmi dobrý článek, ale jen zvědavé, proč jste nesledovali projekt Linux From Scratch?

    pozdravy

    1.    AdrianArroyo Street řekl

      Linux od Scratch je v pořádku a můžete říct, že je váš, ale je opravdu velmi mechanický:
      -Stáhnout písma
      -Patch je
      -Kompilovat
      -Nainstalujte
      -Další
      Tady, i když je výsledek nakonec horší, můžete říci, že jste zkontrolovali všechny soubory.

    2.    desikoder řekl

      Jak je zřejmé z mého předchozího komentáře, protože nemá stejnou úroveň složitosti. Kromě toho linux od nuly ve skutečnosti není, na rozdíl od jeho názvu, vytváření systému od nuly. Vytváření systému od nuly je jeho programování sami, psaní vlastního jádra, nikoli linuxového jádra, pokud možno i vlastního bootloaderu místo grubu, lilo, syslinux atd. Ačkoli LFS není žádná maličkost a je poměrně složitý, nepřibližuje se ani k programování vlastního jádra ...

      Kromě toho souhlasím s AdrianArroyo Calle, že je to příliš mechanické, přečetl jsem si to někdy a nakonec se vzdáte na šesté stránce, také vám řeknou, abyste použili jaké verze balíčků, protože jinak pokyny nefungují (že ukazuje nedostatek flexibility, podle mého názoru). Myslím, že je lepší mít nějaký vlastní nápad, sestavit balíčky, které chcete, dokonce si některé naprogramovat, zkompilovat linuxové jádro a v klidu.

      Saludos!

  13.   sušenka řekl

    uuuoooohh !! Nikdy jsem nezachytil příspěvek tolik jako tento.
    Pokračujte prosím 😀

  14.   linux_user řekl

    Nevím, co se děje:

    chyba: nebylo nalezeno žádné záhlaví pro více spuštění.
    Chyba musíte nejprve načíst jádro

    1.    AdrianArroyo Street řekl

      Pokud je to útěcha, udělal jsem stejnou chybu. Zkuste použít zdroje, které jsou v GitHubu, tam je chyba již vyřešena. Každopádně si myslím, že pokud změníte řádek grub.cfg z „multiboot /next/START.ELF“ na „kernel /next/START.ELF“, může to fungovat. Nevím přesně.

      1.    mcbanana řekl

        Za prvé, nádherný vstup 🙂
        Mám stejný problém s načítáním jádra z grub. Dokonce i použití zdrojů GitHub nebo změna multibootu pro jádro ...

        chyba: nebylo nalezeno žádné záhlaví pro více spuštění.
        chyba: žádné načtené jádro

        1.    AdrianArroyo Street řekl

          Používáte clang jako překladač? Změňte to za gcc
          Pamatovali jste si, že jste použili linkerový skript? Je to nutné, aby linker (v našem případě ld) věděl, kam do souboru vše umístí. V tomto případě musí být záhlaví multiboot na začátku.
          Používáte systém CMake? Pokud jej použijete, myslím, že nezklame.
          Pokud to nefunguje pro vás, pokusím se najít jiné řešení.

  15.   Kurt řekl

    [+100]
    Prostě skvělé !!!

  16.   invisible15 řekl

    Je to opravdu skvělé 🙂

  17.   tanrax řekl

    Sundám klobouk. Působivý příspěvek. Gratulujeme.

  18.   muž řekl

    Páni!
    Bylo by skvělé, kdybyste mohli otevírat aplikace vytvořené v HTML5 a Javascript, aniž byste museli používat prohlížeč, je to možné?
    Mluvím o tom, že jsou jako nativní aplikace.
    Pro tento operační systém by tedy bylo snadné programovat 😀

    1.    AdrianArroyo Street řekl

      V tomto případě to nebudu dělat, protože to vyžaduje mnohem více práce, ale existuje operační systém s názvem „is“, který dělá to, co říkáte. Ve skutečnosti je příkazový řádek JavaScript a okna jsou kreslena pomocí funkcí JavaScript Canvas. Inženýři Nintendo to dokázali a nyní je to open source.

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

      1.    muž řekl

        Valla, děkuji za informace 😀
        podívám se

  19.   patodx řekl

    Kdokoli si může vytvořit svůj vlastní OS, může pokojně zemřít, protože intelektuální úroveň, kterou je třeba dosáhnout; Nutí vás to upustit od nebe nebo pekla.
    Kus příspěvku.

    1.    Miguel řekl

      zatím nikdo neví, že vytvořil jen něco, o čem lze říci, že je to slušný operační systém od nuly, dokonce ani Linux Torvalds, jak říkáte na začátku, protože to začalo ze zdrojů Unixu a vše ostatní je vytvořeno společně pro více než jeden člověk, život je velmi krátký a začínat od nuly je pro kohokoli nemyslitelné, i když se chce opak, je prokazatelné na mnoha chybách při kopírování a vkládání Linuxem Torvalds

      1.    skarmiglione řekl

        Zdroje unixu jsou uzavřeny, použití minix ... což je něco jiného.

      2.    Filip Robaina řekl

        a ti, kdo vyrobili QDOS co?
        byly založeny na něčem?

  20.   Tesla řekl

    Z toho, co vidím, kdo nemá svůj vlastní operační systém, je, že nechtějí, hahahaha.

    Nyní vážně, velmi zajímavé! Hodně přesahuje mé omezené znalosti programování, ale další části této série budu číst s očekáváním.

    Díky za příspěvek!

  21.   Manuel R. řekl

    Nechal jsi mě s tváří O_O ... bez úmyslu podcenit příspěvky kohokoli, je to ten nejvíce „pro“, jaký jsem v poslední době viděl. Pozdravy.

  22.   aitor_cz řekl

    Velmi dobrý článek, Adriáne. Prosím pokračujte…

  23.   mj řekl

    Děláte si legraci z Prvního dubna?, Nemyslete na to „Emulace Linuse Torvaldse: Vytvořte si svůj vlastní operační systém od nuly.“ Nemyslím si, že je to těžké pro ty, kteří se věnují kariéře na nějakém technologickém institutu nebo univerzitě; ale pro mě jsem začínající lukostřelec (jsou ti, kteří nám říkají „Noob“, ale považuji se za více nováčka, poněkud líný), což zní jako nešlapání po zemi. TENTO ČLÁNEK V každém případě VYTVÁŘÍ SPOUSTU ZVĚDAVOSTI A BEZ DVOJITÉ ADMIRACE A REŠPEKTU JEJÍHO EDITORA, GRATULUJEME; První věc, kterou udělám, je pokusit se alespoň trochu porozumět tomuto cennému materiálu.
    DĚKUJEME Adrian Arroyo Calle, vynikající práce a ušlechtilý předávání znalostí.

  24.   Blaire pascal řekl

    LEL Vynikající příspěvek, jen tak dál.

  25.   f3niX řekl

    Skvělý příspěvek, tohle mi chybělo desde linux. Báječné.

  26.   Rubín řekl

    Skvělý příspěvek, moc děkuji.
    Nechápal jsem, co dělá soubor link.ld, může mi to někdo vysvětlit?

    1.    AdrianArroyo Street řekl

      Soubor link.ld sděluje linkeru (v tomto případě ld), kde by měla být každá část kódu ve výsledném souboru. Definujeme také vstupní bod, protože protože nemáme operační systém, nemůžeme použít main jako normální program, v tomto případě vybereme funkci start.

  27.   Maxi řekl

    Skvělé všechny vaše příspěvky! Čekání na 7! Co když mám pochybnosti, například kdybych chtěl spustit pouze algoritmus bez OS, jak poznám, co mohu použít a co ne C?

    1.    AdrianArroyo Street řekl

      Pokud to použijete takto, nebudete moci použít nic ze stdlib, což je prakticky to, co všichni používají (žádný malloc, free, printf, scanf, strcmp atd.). Vše musí být implementováno přímo z paměti nebo ASM. Možná vám ve vyšší kapitole ukážu, jak nainstalovat knihovnu C pro operační systém. Pokud používáte C ++, nemůžete použít výjimky a operátory new a delete (a určitě další).

    2.    přepínač řekl

      Myslím toto může vám poskytnout lepší představu o tom, jak to udělat.

  28.   Esteban řekl

    Dobrý den, asi před 5 lety jsem sledoval podobnou publikaci a vyvinul mikrokernel, který začíná stejným způsobem, má některé aspekty ke zlepšení, ale může vás zajímat, běží v chráněném režimu, provádí více úkolů a provádí virtualizaci paměti, v poslední době jsem pracoval na tom ovladač disku a cd disk, aby bylo možné jej nainstalovat a ne jen běžet na živém CD ... Zdravím.

  29.   Johan řekl

    Vážení, mám chybu při provádění příkazu:
    gcc -o jádro START.ELF.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 chyba syntaxe
    collect2: chyba: ld vrátil 1 stav ukončení

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

    V řádku 5 nevidím chybu, je někdo stejný?

    Pracuji s virtualizovaným debianem pískajícím ve virtuální schránce

    1.    Zástupný obrázek pro Julian Reyes Escrigas řekl

      přidat ";" na konci * (. multiboot_header)

  30.   Eric Orellana Romero řekl

    Skvělá iniciativa, určitě se budu řídit kapitolami tohoto příspěvku a hodlám se z toho hodně naučit. Velice vám děkujeme, že jste si našli čas a naučili nás to. Jediný detail v tomto ohledu, je třeba poznamenat, že Linus Torvalds není tvůrcem žádného operačního systému, vytvořil jádro systému GNU / Linux (ten, který byl použit v jiných OS), což je stále hodné, ale je důležité připočítat Richardu Stallmanovi za vytvoření většiny OS.

    Moc děkuji za vstup a doufám, že zvážíte můj postřeh.

  31.   Zástupný obrázek pro Julian Reyes Escrigas řekl

    Nějakou dobu jsem si s tématem pohrával, hned jsem se začal zajímat, jakmile jsem přečetl nadpis. ale zpráva se stále zobrazuje

    chyba: nebylo nalezeno žádné záhlaví pro více spuštění.
    Chyba musíte nejprve načíst jádro

    Na github jsem nahrál to, co jsem vzal do repo https://github.com/rkmax/GenyOS

    1.    martin villalba řekl

      Totéž se stalo mně. Našli jste řešení?

  32.   Carlos řekl

    otázka, kterou jsem začal představovat syntaxi a řádek menuentry mi říká commandnot found who could tell me why
    tohle je to co dělám

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: příkaz nebyl nalezen

    1.    AdrianArroyo Street řekl

      Obsah tohoto obsahu se nezadává do příkazového řádku, ale do souboru, který vytvoříte a který se nazývá grub.cfg

  33.   Nodetin řekl

    Výborný článek, děkuji!

  34.   David řekl

    Okázalý…!! je to jako chybějící odkaz.

  35.   r.garciag řekl

    Líbí se mi vaše výukové programy Emulace LInus Torvalds, ale je tu jeden krok, kterému nerozumím, následující:
    Nyní zkopírujeme START.ELF do / další uvnitř naší složky, která simuluje kořen našeho operačního systému. Pomocí konzoly přejdeme do kořenové složky našeho nového operačního systému a ověříme, zda existují dva soubory: jeden /boot/grub/grub.cfg a další /next/START.ELF.

    Přejdeme do horního adresáře a zavoláme nástroj pro vytváření ISO s GRUBem s názvem grub-mkrescue

    Mohl by mi to někdo vysvětlit: str

    1.    AdrianArroyo Street řekl

      Jednoduše vygenerujeme minimální ISO, které může GRUB načíst, zkopírujeme jádro do (/ ISO, libovolné složky) / další / START.ELF a konfigurační soubor GRUB do (/ ISO, libovolné složky) / boot / grub / grub.cfg. Jakmile to uděláme, ještě jsme nenainstalovali GRUB na ISO a existuje nástroj, který generuje ISO ze složky a nainstaluje GRUB s názvem grub-mkrescue. Nakonec bychom skončili se zaváděcím ISO, které má nainstalovaný GRUB, který může číst konfiguraci a později správně spustit START.ELF. Nevím, jestli jsem vysvětlil sám sebe, ale to, co děláme, je jakýsi falešný souborový systém, pomocí kterého generujeme ISO.

  36.   miguel jose guevara pozornost řekl

    Úžasný

  37.   Michael Moreno řekl

    Opravdu se na nový systém tolik nehledejte, ale pokud například zlepšíte linux, vytvořte linuxový exonukleus se serverovou komponentou, která bude fungovat jako mikronukleus, pokud si přejete, tj. Struktura exo s chováním mikrojader, která by byla super a linux.

    Další věc je, že nejsem odborník na programování, jen pár kýčovitých c ++ a java, stačilo by mi dát linuxovému jádrovému modulu modul, vykuchat ho, upravit atd.

  38.   53. Zimní voják řekl

    Bezpochyby už musím dělat na dovolené.

  39.   Fermin řekl

    Tento dobrý a v jakém programu to navrhuje a kóduje?
    prosím, dej mi tu odpověď

  40.   Temná mysl řekl

    Při kompilaci z vašeho git dostanu:

    [jmponce @ jar build] $ cmake ..
    - Vytvoření adresáře NextRoot
    - Generování skriptu ISO
    make DESTDIR = další instalace
    ./iso.sh
    - Nalezený Doxygen: / usr / bin / doxygen (nalezená verze „1.8.9“)
    - Konfigurace hotová
    - Generování hotovo
    - Soubory sestavení byly zapsány do: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Skenování závislostí cíle START.ELF
    [7%] Budování objektu ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Budování objektu CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Propojení spustitelného souboru CXX START.ELF
    / usr / bin / ld: Nekompatibilní /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a je při hledání -lgcc přeskočen
    / usr / bin / ld: nelze najít -lgcc
    collect2: chyba: ld vrátil stav ukončení 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: neúspěšné pokyny pro cíl 'src / START.ELF'
    make [2]: *** [src / START.ELF] Chyba 1
    CMakeFiles / Makefile2: 106: Neúspěšné pokyny pro cíl 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Chyba 2
    Makefile: 117: Selhání pokynů pro cíl 'all'
    make: *** [vše] Chyba 2

    1.    AdrianArroyo Street řekl

      Zdá se, že chyba spočívá v tom, že nemůže najít llibgcc, protože máte 64bitovou verzi a v současné době je systém sestavení nucen používat 32bitovou verzi. Měli byste na svůj distro nebo lepší nainstalovat balíček kompatibility, použijte 32bitový systém.

      1.    Ronaldo Rodríguez řekl

        Mám 32 bitů a objeví se stejná chyba, máte na mysli operační systém nebo architekturu? moje je 64 bit, ale používám 32 bit Ubuntu, neptejte se, finanční problémy, s tím říkám všechno.

  41.   Jorge řekl

    Vynikající téma, čeká se na větší rozsah. pozdravy

  42.   Jhon řekl

    Skvělé, doufám v další

  43.   Soid perez řekl

    Dobrý den, jsem mladý velvyslanec, který chce vytvořit operační systém, který podporuje všechny programy a platformy, aby vývojáři nemuseli mít na počítači výkonné stroje nebo aplikace nebo programy.
    Proto se o tento příspěvek zajímám, ale když si stáhnu váš git nebo se ho pokusím vytvořit, vše funguje, dokud neprovedu příkaz ./iso.sh nebo grub-mkrescue -o nextdivel.iso nextroot, dostanete tuto chybu

    „Grub-mkrescue: varování: Vaše xorriso nepodporuje„ –grub2-boot-info “. Některé funkce byly deaktivovány. Použijte xorriso 1.2.9 nebo novější.
    grub-mkrescue: varování: Vaše xorriso nepodporuje "–grub2-boot-info". Váš obraz jádra je příliš velký. Spuštění disku bylo zakázáno. Použijte xorriso 1.2.9 nebo novější .. »
    Opravdu netuším, protože vím hodně o aplikacích a webech, ale nevím nic o grub

    1.    AdrianArroyo Street řekl

      Možná budete muset na svém distro aktualizovat program xorriso. Jakou distribuci a verzi používáte?

      1.    Soid perez řekl

        Používám xubuntu 14.04lts a zkusím spustit xorriso, ale shell mi říká, že to nemůže najít a dostávám apt-get install xorriso, i když jsem upřímně očekával nějakou odpověď, protože jsem měl špatnou zkušenost s instalací věcí, které neznám v linuxu hehe . Právě to aktualizuji a povím vám, co se stalo

      2.    AdrianArroyo Street řekl

        Poté nainstalujte xorriso ze softwarového centra nebo jednoduše z terminálu proveďte „sudo apt-get install xorriso“

      3.    Soid perez řekl

        Už jsem udělal všechno, co jste mi řekli, a jak s git, tak s mým dostávám tento xorriso 1.3.2: manipulátor souborového systému RockRidge, projekt libburnia.

        Aktuální proud: -outdev 'stdio: nextdivel.iso'
        Aktuální médium: soubor stdio, přepisovatelný
        Stav média: je prázdné
        Souhrn médií: 0 relací, 0 datových bloků, 0 dat, 1901 m zdarma
        Přidáno do ISO obrazu: adresář '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 souborů přidaných za 1 sekundu
        xorriso: FAILURE: Nelze určit atributy zdrojového souboru '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Žádný takový soubor nebo adresář neexistuje
        xorriso: UPDATE: 546 souborů přidaných za 1 sekundu
        xorriso: aborting: -abort_on 'FAILURE' narazil na 'FAILURE'
        A manšestr nerozumím mé struktuře je /nextroot/boot/grub/grub.cfg a nextroot / next / START.ELF

      4.    Soid perez řekl

        Díky, jsem připraven jít vpřed, kamarád mi pomohl a řekl mi, co jsem udělal špatně, byla organizace adresáře, tak jsem to upravil a je to

      5.    erik řekl

        Promiňte, můžete mi říct, jaký postup jste provedli, protože jsem dostal chybu nic ke spuštění: žádný takový soubor nebo adresář

        žádné zaváděcí zařízení.

  44.   Jose řekl

    Pozdravy! Chtěl jsem vás požádat o laskavost, pokud mi můžete poslat e-mail s tím, co zde vysvětlíte, trochu jsem se zmátl a musím porovnat, co mám s tím, co vysvětlujete, možná mi není jasné, zda vytvoření grub. cfg se provádí v terminálu gcc nebo kde přesně? Děkuji ti mnohokrát příteli!

    1.    AdrianArroyo Street řekl

      Soubor grub.cfg vytvoříte pomocí libovolného textového editoru a musíte jej uložit do složky PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano řekl

    Ahoj Adrian, především ti blahopřeji a děkuji za příspěvek.

    Víte, že to dělám pro praxi a začal jsem to dávat dohromady podle vašeho doučování, ale po spuštění jsem našel první chybu

    $ jako -o kernel.o -c kernel.asm
    bash: as: příkaz nebyl nalezen ...
    Podobné příkazy jsou:
    ‚je '
    'ac'

    Pracuji na Fedoře 20 a nemohu v tomto ohledu najít řešení, ocenil bych vaše pokyny, zda mám něco změnit v GCC nebo v plynu

    díky předem

    1.    AdrianArroyo Street řekl

      Musíte nainstalovat GAS, abych viděl chybový kód. Nemám Fedoru po ruce, ale teoreticky, pokud nainstalujete yc gcc-c ++, nainstalujete si celou sadu GCC a GNU As s ní obvykle přichází.

  46.   Gaston Ramirez řekl

    Jsem s vámi, vím něco o C ++, C # (i když tento poslední není v této věci příliš užitečný) špatná věc je, že mi stále chybí zkušenosti, nikdy nezvládám jazyk C, vaše publikace je skvělá, Nemám moc co říci, pokud budu mít čas, vidím. Děkuji.

  47.   Teresita Ježíše Nah Sanchez řekl

    Moc děkuji za skvělou pomoc….

  48.   JKY řekl

    Miluji linux, je to nejlepší čtvrť, která existuje, pravdou pro moje okna je smetí a vím, že tvůrce linuxu je tvůrcem oken

  49.   Rode řekl

    Dobrý den, zobrazí se chyba v grub
    chyba: soubor /next/START.ELF nebyl nalezen
    chyba: musíte nejprve načíst jádro

    Mohl byste mi pomoci a googlit, ale nemohu najít

  50.   Henry Avila řekl

    Prosím, jak to můžu nechat ukázat zprávu HELLO WORLD? Jsem začátečník a stále toho nevím dost

  51.   CARLOS GUERRERO ALVAREZ řekl

    Stává se mi toto:
    gcc -o jádro START.ELF.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: přemístění R_X86_64_32 proti symbolu `stack 'nelze použít při vytváření objektu PIE; překompilovat s -fPIE
    / usr / bin / ld: finální odkaz selhal: nereprezentovatelná část na výstupu
    collect2: chyba: ld vrátil 1 stav ukončení