Emulera Linus Torvalds: Skapa ditt eget operativsystem från grunden (I)

Först och främst, kommentera att det här är min första artikel och att jag hoppas att ni alla gillar det.

Linus Torvals glad

I den här serien kommer vi att efterlikna Linus Torvalds, vi kommer att skapa vårt operativsystem från 0. I det här första avsnittet ska vi se boot och lägga en text på skärmen från vår kärna.

I mitt fall kallas operativsystemet NextDivel. Det första beslutet som vi måste fatta så snart vi överväger operativsystemet är vad kommer startladdaren att vara?

Här finns det flera varianter, och vi kan till och med skapa en själva; men i denna handledning ska jag använda GRUB, för de flesta vet mer eller mindre något om honom. Vi skapar en mapp som kommer att vara roten till vårt operativsystem och där skapar vi mappen / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Där skapar vi grub.cfg-filen enligt följande:

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

I den här filen har vi sett hur GRUB kommer att ladda vår kärna, i det här fallet, i /next/START.ELF. Nu måste vi skapa vår kärna.

För detta behöver vi GCC y GAS (projektets samlare GNU, kommer vanligtvis med gcc). Så vi ska skapa kärnan.

Först skapar vi en fil som heter kernel.asm. Den här filen kommer att innehålla startpunkten för vår kärna och kommer också att definiera multiboot (en funktion för vissa bootloaders som GRUB). Innehållet i kernel.asm kommer att vara:

.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

Allt relaterat till multiboot är helt enkelt att följa specifikationen ingenting annat. Allt börjar i början, det kommer att kalla multiboot_entry, vi kommer att ha definierat multiboot-rubriken i de första 4k och vi kommer att lägga det (med movl).

Senare kallar vi NextKernel_Main som är vår kärna C-funktion. I slingan stoppar vi datorn. Detta sammanställs med:

as -o kernel.o -c kernel.asm

Nu ska vi gå in i programmering i C. Du kommer att tro att nu är allt en bit kaka, vi lägger en printf en huvudsakliga och det är det, vi har gjort det.

Jo nej, sedan printf y huvudsakliga de är funktioner som definieras av operativsystemet, men vi skapar dem! Vi kan bara använda de funktioner som vi själva definierar.

I senare kapitel kommer jag att prata om hur man lägger vårt eget C-bibliotek (glibc, bionic, newlibc) men då och då. Vi har pratat om att vi vill lägga text på skärmen, vi får se hur vi gör det.

Det finns två alternativ, ett är att ringa till BIOS och en annan är att hantera skärmminne direkt. Vi kommer att göra det senare eftersom det är tydligare från C och det kommer också att tillåta oss att göra det när vi går in i skyddat läge.

Vi skapar en fil som heter NextKernel_Main.c med följande innehåll:

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

Med detta manipulerar vi minnet direkt VGA och karaktär för karaktär skriver vi den. Vi sammanställer genom att inaktivera stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Om du har kommit så här långt vill du prova ditt helt nya operativsystem nu, men vi är inte färdiga än. Vi behöver en liten fil som berättar att kompilatorn var i filen ska lämna varje avsnitt. Detta görs med ett länkskript. Vi skapar 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 = .;
}

Med detta definierar vi positionen för varje sektion och startpunkten, start, som vi har definierat i kernel.asm. Nu kan vi förena all denna sammansättning:

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

Nu kopierar vi START.ELF till / nästa inuti vår mapp som simulerar roten till vårt operativsystem. Vi går till rotmappen i vårt nya operativsystem med konsolen och verifierar att det finns två filer: en /boot/grub/grub.cfg och en annan /next/START.ELF.

Vi går till den övre katalogen och kallar ett ISO-skapande verktyg med GRUB kallat grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

När vi väl har gjort detta kommer vi att ha en ISO. Denna ISO kan öppnas på datorer x86 (64 bitar också) och virtuella maskiner. För att testa det ska jag använda QEMU. Vi ringer QEMU från kommandoraden:

qemu-system-i386 nextdivel.iso

Kommer att starta SeaBIOS och senare kommer vi att ha GRUB. Senare om allt är korrekt kommer vi att se vår fras.
Du kommer att tro att det här är svårt, svarar jag, ja det är det.

Att skapa ett operativsystem är svårt och att det här inte gör något användbart. I framtida kapitel kommer vi att se hur man hanterar färger på skärmen, reserverar minne och om jag kan, hur man hämtar data från tangentbordet.

Om någon inte vill kopiera allt här har jag ett arkiv på GitHub (mer detaljerad) med operativsystemet NextDivel. Om du vill kompilera NextDivel du måste bara ha git och 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

Jag uppmuntrar dig att samarbeta på NextDivel om du har tid och önskan att skapa ett operativsystem. Kanske till och med överlägsen Linux ... tiden kommer att visa.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för uppgifterna: Miguel Ángel Gatón
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.

  1.   livlig sade

    :O

    1.    marianogaudix sade

      Torvalds tog Minix-operativsystemet (härledd från UNIX) till Andrew S. Tanenbaum och förbättrade det.

      Tanenbaum har kämpat med Linus, de förolämpade varandra. Tanenbaum säger att Microkernel är framtiden (HURD, Minix ny kon Microkernel).

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

  2.   eliotime3000 sade

    Detta har varit det bästa inlägget jag har sett hittills på den här bloggen. Jag vill redan veta vad jag ska göra mer.

  3.   Carlos. Gude sade

    Var imponerad

  4.   axl sade

    Verkligen imponerande !!

  5.   rhoconlinux sade

    FUUUUUUA!
    Det är det nördaste inlägget jag någonsin har sett hehe. Grattis Adrián, en horartikel! hyper intressant !!! 🙂

    1.    Joaquin sade

      Jag instämmer. Jag föreställer mig den här situationen:
      GNU / Linux Power User (med ett glatt ansikte):
      "Jag vet redan hur man kompilerar min Gentoo"

      Nörd (föraktfullt): «pff, jag har skapat min egen distro ...»

      1.    desikoder sade

        Ja, jag kan skapa min egen Linux-distro. I själva verket utvecklar jag en initramfs och en kärna för inbäddad Linux. Det är inte samma sak att skapa ett operativsystem än en Linux-distro. Den första är mycket svårare, nästan omöjlig, den andra, som du har sagt, kan vara vad som helst, även Ubuntu med logotypen ändrad xD. Så jag skulle lämna det så här:

        GNU / Linux Power User (med ett glatt ansikte)
        - Jag vet redan hur jag ska kompilera min Gentoo

        Halvnörd
        - Pff, jag har följt en Linux från grunden och jag har gjort min egen distro

        Nörd (med föraktfull attityd)
        - pff, för jag har programmerat en kärna i assembler och i C

        Saludos!

  6.   Cronos sade

    Detta är intressant för mig, i väntan på följande kapitel.

  7.   abimaelmartell sade

    Jag såg den här handledningen för en tid sedan, den är för C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet sade

      Tack för länken, jag tar en titt på den.

  8.   Jose Jácome sade

    Jag skulle vilja ha ett operativsystem som är 100% kompatibelt med AMD-grafik: /

    1.    ivanlinux sade

      Windows

      1.    Jose Jácome sade

        hahaha i Windows Catalyst har inte OpenGL-stöd, även om jag inte kan använda all grafisk kraft i Linux, jag väntar på att se vad som händer!

        1.    beny_hm sade

          vänta bara på att ventilen torkar ut marknaden

  9.   KZKG ^ Gaara sade

    Magiskt, perfekt, utmärkt bidrag, det ser ut som en fantastisk serie inlägg 🙂

  10.   O_Pixote_O sade

    Buah Jag skulle vilja veta hur man programmerar för att hjälpa dig, helt enkelt som ett sätt att öva med kunskapen att du lär dig och hjälper en. För tillfället lämnar jag dig mottot att uppmärksamma projektet när du är klar med det "Använd NextDivel, porr ser likadant ut (eller bättre).", Du kommer att svepa xD.

  11.   detta namn är falskt sade

    Mooooooolaaa !!!!

  12.   nordi sade

    Mycket bra artikel, men bara nyfiken på varför du inte har följt Linux From Scratch-projektet?

    hälsningar

    1.    AdrianArroyoStreet sade

      Tja, Linux från Scratch är bra, och du kan säga att det är ditt, men det är verkligen mycket mekaniskt:
      -Hämta teckensnitt
      -Patch dem
      -Sammanställa
      -Installera
      -Nästa
      Här, även om resultatet till sist är sämre, kan du säga att du har granskat alla filer.

    2.    desikoder sade

      Som framgår av min tidigare kommentar, eftersom den inte har samma komplexitetsnivå. Dessutom är Linux från grunden inte riktigt, i motsats till dess namn, att skapa ett system från grunden. Att skapa ett system från grunden programmerar det själv, skriver din egen kärna, inte linuxkärnan, om möjligt även din egen bootloader istället för grub, lilo, syslinux, etc. Även om en LFS inte är en liten bedrift och är ganska komplex, kommer den inte ens nära att programmera din egen kärna ...

      Dessutom håller jag med AdrianArroyo Calle om att den är för mekanisk, jag har läst den någon gång och du slutar ge upp på den sjätte sidan, de säger också att du ska använda vilka versioner av paketen eftersom annars kommer instruktionerna inte att fungera (att visar bristen på flexibilitet, enligt min mening). Jag tycker att det är bättre att ha något av din egen idé, kompilera de paket du vill ha, till och med programmera några, kompilera en Linux-kärna och i fred.

      Saludos!

  13.   kaka sade

    uuuoooohh !! Jag har aldrig fångat ett inlägg så mycket som det här gjorde.
    Fortsätt 😀

  14.   linux_user sade

    Jag vet inte vad som är fel:

    fel: ingen multiboot-rubrik hittades.
    fel måste du först ladda kärnan

    1.    AdrianArroyoStreet sade

      Om det är någon tröst, gjorde jag samma misstag. Försök att använda källorna i GitHub, där är felet redan löst. Hur som helst tror jag att om du ändrar grub.cfg-raden från "multiboot /next/START.ELF" till "kernel /next/START.ELF" kan det fungera. Jag vet inte exakt.

      1.    mcbanan sade

        Först och främst magnifik entré 🙂
        Jag har samma problem med att ladda kärnan från grub. Även med hjälp av GitHub-källor eller byte av multiboot för kärnan ...

        fel: ingen multiboot-rubrik hittades.
        fel: ingen laddad kärna

        1.    AdrianArroyoStreet sade

          Använder du clang som kompilator? Ändra det för gcc
          Har du kommit ihåg att använda länkerskriptet? Det är nödvändigt så att länkaren (ld i vårt fall) vet var i filen den ska lägga varje sak. I det här fallet måste multiboot-rubriken vara i början.
          Använder du CMake-systemet? Om du använder det tror jag att det inte misslyckas.
          Om det inte fungerar för dig försöker jag hitta en annan lösning.

  15.   khourt sade

    [+100]
    Bara bra !!!

  16.   invisible15 sade

    Det är riktigt coolt 🙂

  17.   tanrax sade

    Jag tar av mig hatten. Imponerande inlägg. Grattis.

  18.   människa sade

    Wow!
    Det vore jättebra om du kunde öppna applikationer gjorda i HTML5 och Javascript utan att behöva använda en webbläsare, är det möjligt?
    Jag pratar om att de är som inbyggda applikationer.
    Så det skulle vara enkelt att programmera för detta operativsystem 😀

    1.    AdrianArroyoStreet sade

      I det här fallet kommer jag inte att göra det eftersom det tar mycket mer arbete bakom det men det finns ett operativsystem som heter "är" som gör vad du säger. I själva verket är kommandoraden JavaScript och windows ritas med JavaScript Canvas-funktioner. Nintendo-ingenjörer gjorde det och nu är det öppen källkod.

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

      1.    människa sade

        Valla, tack för informationen 😀
        jag ska ta en titt

  19.   patodx sade

    Den som kan skapa sitt eget operativsystem kan dö fredligt, eftersom den intellektuella nivån han måste uppnå med det; Det får dig att avstå från himlen eller helvetet.
    Del av utstationering.

    1.    Miguel sade

      hittills är ingen känd för att ha skapat bara något som kan sägas vara ett anständigt operativsystem från grunden, inte ens Linux Torvalds som du säger i början, eftersom detta började från Unix-källor och allt annat är gemensamt författat till mer än en person är livet väldigt kort och från början är det otänkbart för alla, även om det motsatta är önskvärt, är det påvisbart i många misstag som kopieras och klistras in av Linux Torvalds

      1.    skarmiglione sade

        Unix-källorna är stängda, användningen av minix ... vilket är något annat.

      2.    Philip Robina sade

        och de som skapade QDOS vad?
        var baserade på något?

  20.   Tesla sade

    Enligt vad jag ser, vem som inte har sitt eget operativsystem beror på att de inte vill hahahaha.

    Nu på allvar, väldigt intressant! Mycket går bortom min begränsade programmeringskunskap, men jag kommer att läsa de andra delarna av denna serie med förväntan.

    Tack för inlägget!

  21.   Manuel R. sade

    Du lämnade mig med ett O_O-ansikte ... utan avsikten att underskatta någonas bidrag, det är det mest "proffs" jag har sett nyligen. Hälsningar.

  22.   aitor_cz sade

    Mycket bra artikel, Adrián. Vänligen fortsätt…

  23.   mj sade

    Skämtar du på April Fools Day? Var inte elak "Emulera Linus Torvalds: Skapa ditt eget operativsystem från grunden." Jag tror inte att det är svårt för dem som bedriver en karriär inom något tekniskt institut eller universitet. men för mig är jag nybörjare (det finns de som kallar oss "Noob" men jag anser mig mer nybörjare som lite lat) som låter som att inte gå på land. Hur som helst, DENNA ARTIKEL SKAPAR MYCKET Nyfikenhet och utan tviveladministration och respekt för REDAKTÖREN, GRATTIS; Det första jag ska göra är att försöka förstå åtminstone lite av detta värdefulla material.
    TACK Adrian Arroyo Calle, utmärkt arbete och ädla kunskapsleveranser.

  24.   Blaire pascal sade

    LEL Utmärkt inlägg, fortsätt.

  25.   f3niX sade

    Vilket bra inlägg, det här har jag missat desde linux. Underbar.

  26.   Rubin sade

    Bra inlägg, tack så mycket.
    Jag förstod inte vad link.ld-filen gör. Kan någon förklara det för mig?

    1.    AdrianArroyoStreet sade

      Link.ld-filen berättar för länkaren (i det här fallet ld) var varje del av koden ska finnas i den resulterande filen. Vi definierar också ingångspunkten eftersom vi inte har ett operativsystem kan vi inte använda main som ett normalt program, i det här fallet väljer vi startfunktionen.

  27.   Maxi sade

    Bra alla dina inlägg! Väntar på 7! Vad händer om jag till exempel tvivlar om jag bara vill köra en algoritm utan operativsystem, hur vet jag vad jag kan använda och vad inte C?

    1.    AdrianArroyoStreet sade

      Om du använder den så här skulle du inte kunna använda någonting från stdlib, vilket är praktiskt taget vad alla använder (inget malloc, gratis, printf, scanf, strcmp, etc). Allt måste implementeras direkt från minnet eller ASM. Kanske i ett högre kapitel kommer jag att visa dig hur du installerar ett C-bibliotek för operativsystemet. Om du använder C ++ kan du inte använda undantag och de nya och ta bort operatorerna (och säkert mer).

    2.    växlare sade

      Jag tror detta det kan ge dig en bättre uppfattning om hur du gör det.

  28.   Esteban sade

    Hej, för ungefär 5 år sedan följde jag en liknande publikation och utvecklade en mikrokärna som startar på samma sätt, den har vissa aspekter att förbättra, men det kan intressera dig, den körs i skyddat läge, kör multitasking och utför minnesvirtualisering, nyligen arbetade jag på det diskdrivrutin och cd-enhet för att göra det installerbart och inte bara köras på live-cd ... Hälsningar.

  29.   johan sade

    Hej, jag har fel när kommandot körs:
    gcc -o START.ELF-kärnan.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 syntaxfel
    collect2: fel: ld returnerade 1 utgångsstatus

    länk.ld
    . = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    I rad 5 ser jag inte felet, gör någon detsamma?

    Jag arbetar med en virtualiserad debian wheezy i virtualbox

    1.    Platshållarbild för Julian Reyes Escrigas sade

      Lägg till ";" i slutet av * (. multiboot_header)

  30.   Eric Orellana Romero sade

    Utmärkt initiativ, jag kommer definitivt att följa kapitlen i detta inlägg och tänker lära mig mycket av det. Tack så mycket för att du tog dig tid att lära oss. En enda detalj i detta avseende, det bör noteras att Linus Torvalds inte är skaparen av något operativsystem, han skapade Kärnan i GNU / Linux-systemet (den som har använts i andra operativsystem), vilket fortfarande är värt, men det är Det är viktigt att kreditera Richard Stallman för att skapa det mesta av operativsystemet.

    Tack så mycket för insatsen och jag hoppas att du överväger min iakttagelse.

  31.   Platshållarbild för Julian Reyes Escrigas sade

    Jag har trasslat med ämnet ett tag, jag blev intresserad så snart jag läste rubriken. men meddelandet fortsätter att bli

    fel: ingen multiboot-rubrik hittades.
    fel måste du först ladda kärnan

    Jag har laddat upp det jag tar till en repo på github https://github.com/rkmax/GenyOS

    1.    martin villalba sade

      Samma sak händer mig. Hittade du lösningen?

  32.   Carlos sade

    en fråga jag började introducera syntaksen och menyraden säger att kommandot inte hittade vem som kunde berätta varför
    detta är vad jag gör

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: kommandot hittades inte

    1.    AdrianArroyoStreet sade

      Innehållet i detta innehåll ska inte anges i kommandoraden, men i filen du skapar som heter grub.cfg

  33.   Nodetin sade

    Utmärkt artikel, tack!

  34.   David sade

    Spektakulär…!! det är precis som den saknade länken.

  35.   r.garciag sade

    Jag älskar dina emulerande LInus Torvalds-handledning, men det finns ett steg som jag inte förstår, följande:
    Nu kopierar vi START.ELF till / nästa inuti vår mapp som simulerar roten till vårt operativsystem. Vi går till rotmappen i vårt nya operativsystem med konsolen och verifierar att det finns två filer: en /boot/grub/grub.cfg och en annan /next/START.ELF.

    Vi går till den övre katalogen och kallar ett verktyg för att skapa ISO: er med GRUB som heter grub-mkrescue

    Kan någon förklara för mig: s

    1.    AdrianArroyoStreet sade

      Helt enkelt för att generera ett minimum ISO som GRUB kan ladda kopierar vi kärnan till (av / ISO, vilken mapp som helst) / nästa / START.ELF och GRUB-konfigurationsfilen till (av / av ISO, vilken mapp som helst) / start / grub / grub.cfg. När det är klart har vi ännu inte installerat GRUB på ISO och det finns ett verktyg som genererar ISO från en mapp och installerar GRUB som heter grub-mkrescue. Då slutade vi äntligen med en startbar ISO som har GRUB installerat, som kan läsa konfigurationen för att senare utföra START.ELF korrekt. Jag vet inte om jag har förklarat mig själv, men vad vi gör är ett slags falskt filsystem som vi genererar en ISO med.

  36.   miguel jose guevara uppmärksamhet sade

    Terrific

  37.   michael moreno sade

    Tja, titta verkligen på ett nytt system inte så mycket men om du till exempel förbättrar linux, skapa en linux exonukleus med en serverkomponent som fungerar som en micronucleus om du vill, det vill säga en exo struktur med micronucleus beteende som skulle vara super och Linux.

    Den andra saken är att jag inte är expert på programmering, bara några ostliknande c ++ och lite java, det skulle räcka för mig att ge Linux-kärnprogrammet en modul, rensa det, ändra det, etc.

  38.   VinterSoldat53 sade

    Utan tvekan måste jag redan göra på semester.

  39.   Fermín sade

    Den här bra och i vilket program designar den och kodar den?
    snälla ge mig det svaret

  40.   Darkmind sade

    När jag kompilerar från din git får jag:

    [jmponce @ jar build] $ cmake ..
    - Skapa NextRoot-katalog
    - Generera ISO-skript
    gör DESTDIR = nästa installation
    ./iso.sh
    - Found Doxygen: / usr / bin / doxygen (hittad version "1.8.9")
    - Konfigurera gjort
    - Genererat gjort
    - Byggfiler har skrivits till: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Skanningsberoenden för mål START.ELF
    [7%] Bygga ASM-ATT-objekt src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Bygga CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Länkar CXX körbar START.ELF
    / usr / bin / ld: Inkompatibel /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a hoppas över medan du letar efter -lgcc
    / usr / bin / ld: kan inte hitta -lgcc
    collect2: fel: ld returnerade utgångsstatus 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Misslyckade instruktioner för mål 'src / START.ELF'
    make [2]: *** [src / START.ELF] Fel 1
    CMakeFiles / Makefile2: 106: Fel på instruktionerna för målet 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Fel 2
    Makefile: 117: Fel i instruktionerna för mål 'alla'
    make: *** [alla] Fel 2

    1.    AdrianArroyoStreet sade

      Felet verkar vara att det inte kan hitta llibgcc eftersom du har 64-bitarsversionen och för närvarande tvingas kompileringssystemet att använda 32-bitars. Du bör installera ett kompatibilitetspaket på din distro eller bättre, använd ett 32-bitars system.

      1.    Ronaldo Rodríguez sade

        Jag har 32 bitar och samma fel visas, menar du operativsystemet eller arkitekturen? min är 64-bitars, men jag använder 32-bitars Ubuntu, fråga inte, ekonomiska problem, med det säger jag allt.

  41.   jorge sade

    Utmärkt ämne, väntar på större omfattning. Hälsningar

  42.   Jhon sade

    Bra jag hoppas på mer

  43.   Soid perez sade

    Hej, jag är en ung ambassadör som vill skapa ett operativsystem som stöder alla program och plattformar så att utvecklare inte behöver ha kraftfulla maskiner eller applikationer eller program på en dator.
    Det är därför jag är intresserad av det här inlägget, men när jag laddar ner din git eller försöker skapa den fungerar allt tills jag kör kommandot ./iso.sh eller grub-mkrescue -o nextdivel.iso nextroot får du det här felet

    "Grub-mkrescue: varning: Din xorriso stöder inte" –grub2-boot-info ". Vissa funktioner har inaktiverats. Använd xorriso 1.2.9 eller senare ..
    grub-mkrescue: varning: Din xorriso stöder inte "–grub2-boot-info". Din kärnbild är för stor. Diskstart har inaktiverats. Använd xorriso 1.2.9 eller senare .. »
    Jag har verkligen ingen aning eftersom jag vet mycket om applikationer och webb men jag vet ingenting om grub

    1.    AdrianArroyoStreet sade

      Du kan behöva uppdatera xorriso-programmet på din distro. Vilken distro och version använder du?

      1.    Soid perez sade

        Jag använder xubuntu 14.04lts och försöker köra xorriso men skalet säger till mig att det inte hittar det och jag får apt-get install xorriso även om jag uppriktigt förväntade mig något svar eftersom jag hade en dålig erfarenhet av att installera saker som jag inte känner till i linux hehe . Jag uppdaterar det nu och berättar vad som hände

      2.    AdrianArroyoStreet sade

        Installera sedan xorriso från programvarucentret eller helt enkelt från terminalen gör "sudo apt-get install xorriso"

      3.    Soid perez sade

        Jag har redan gjort allt du sa till mig och med både git och min får jag den här xorriso 1.3.2: RockRidge filsystemmanipulator, libburnia-projektet.

        Körström: -outdev 'stdio: nextdivel.iso'
        Medieström: stdio-fil, överskrivbar
        Mediestatus: är tom
        Medieöversikt: 0 sessioner, 0 datablock, 0 data, 1901m gratis
        Lagt till i ISO-avbildningen: katalog '/'='/tmp/grub.OEqSzV'
        xorriso: UPPDATERING: 546 filer har lagts till på 1 sekund
        xorriso: FAILURE: Kan inte bestämma attribut för källfilen '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Ingen sådan fil eller katalog
        xorriso: UPPDATERING: 546 filer har lagts till på 1 sekund
        xorriso: avbryter: -abort_on 'FAILURE' stötte på 'FAILURE'
        och corduroy Jag förstår inte min struktur är /nextroot/boot/grub/grub.cfg och nextroot / next / START.ELF

      4.    Soid perez sade

        Tack, jag är redo att gå vidare, en vän hjälpte mig och berättade för mig vad jag gjorde fel var organisationen av katalogen, så jag ordnade det och det är det.

      5.    erik sade

        Ursäkta mig, kan du berätta vilken procedur du utförde eftersom jag får felet ingenting att starta: ingen sådan fil eller katalog

        ingen startbar enhet.

  44.   jose sade

    Hälsningar! Jag tänkte fråga dig om du kunde skicka ett mejl med det du förklarar här, jag har blivit lite förvirrad och jag måste jämföra vad jag har med vad du förklarar, kanske det som inte är klart för mig är om skapandet av grub. cfg görs i terminalen gcc eller var exakt? tack så mycket min vän!

    1.    AdrianArroyoStreet sade

      Du skapar filen grub.cfg med valfri textredigerare och du måste spara den i PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano sade

    Hej Adrian, först och främst, gratulera dig och tack för ditt bidrag.

    Du vet att jag gör det här för en övning och jag började sätta ihop det efter din handledning, men efter start hittade jag det första felet

    $ som -o kernel.o -c kernel.asm
    bash: as: kommandot hittades inte ...
    Liknande kommandon är:
    'sa'
    'ac'

    Jag jobbar med fedora 20, och jag kan inte hitta en lösning i detta avseende, jag skulle uppskatta din vägledning om jag skulle ändra något i gcc eller gas

    tack på förhand

    1.    AdrianArroyoStreet sade

      Du måste installera GAS så att jag kan se felkoden. Jag har inte Fedora till hands men i teorin om du installerar gcc-c ++ installerar du hela GCC-sviten och GNU Som vanligtvis kommer med det.

  46.   Gaston Ramirez sade

    Jag är med dig, jag vet något om C ++, C # (även om den här sistnämnda inte är särskilt användbar i den här frågan) det dåliga är att jag fortfarande saknar erfarenhet, jag hanterar aldrig C-språk, din publikation är fantastisk, Jag har inte mycket att säga, om jag har tid ser jag det. Tack.

  47.   Teresita av Jesus Nah Sanchez sade

    Tack så mycket för stor hjälp ....

  48.   JKY sade

    Jag älskar Linux det är det bästa distriktet som finns, sanningen för mina fönster är skräp till en som jag vet att skaparen av Linux är skaparen av Windows

  49.   Rode sade

    Hej jag får ett fel i grub säger
    fel: fil /next/START.ELF Hittades inte
    fel: du måste ladda kärnan först

    Kan du hjälpa mig och googlade men jag kan inte hitta

  50.   Henry Avila sade

    Snälla, hur kan jag få det att visa meddelandet HELLO WORLD? Jag är nybörjare och vet fortfarande inte tillräckligt

  51.   CARLOS GUERRERO ALVAREZ sade

    Följande händer mig:
    gcc -o START.ELF-kärnan.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: omplacering R_X86_64_32 mot symbol `stack 'kan inte användas när du skapar ett PIE-objekt; kompilera om med -fPIE
    / usr / bin / ld: slutlig länk misslyckades: avsnitt som inte kan representeras på utdata
    collect2: fel: ld returnerade 1 utgångsstatus