Etterligne Linus Torvalds: Lag ditt eget operativsystem fra bunnen av (I)

Først av alt, kommenter at dette er min første artikkel, og at jeg håper dere alle liker det.

Linus Torvals fornøyd

I denne serien skal vi etterligne Linus Torvalds, vi skal lage vårt operativsystem fra 0. I denne første episoden skal vi se oppstarten, og vi vil sette en tekst på skjermen fra kjernen vår.

I mitt tilfelle kalles operativsystemet NesteDivel. Den første avgjørelsen vi må ta så snart vi vurderer operativsystemet, er hva bootloader vil være?

Her er det flere varianter, og vi kan til og med lage en selv; men i denne opplæringen skal jeg bruke GRUB, fordi de fleste vet mer eller mindre noe om ham. Vi oppretter en mappe som vil være roten til operativsystemet vårt, og der lager vi mappen / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Der oppretter vi grub.cfg-filen som følger:

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

I denne filen har vi sett hvordan GRUB vil laste kjernen vår, i dette tilfellet, i /next/START.ELF. Nå må vi opprette kjernen vår.

For dette trenger vi GCC y GAS (montøren av prosjektet GNU, kommer vanligvis med gcc). Så vi skal lage kjernen.

Først lager vi en fil som heter kernel.asm. Denne filen vil inneholde startpunktet til kjernen vår og vil også definere multiboot (en funksjon av noen bootloaders som GRUB). Innholdet i kernel.asm vil være:

.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

Alt relatert til multiboot er ganske enkelt å følge spesifikasjonen ingenting annet. Alt starter i start, det vil kalle multiboot_entry, vi vil ha definert multiboot-headeren i den første 4k og vi vil sette den (med movl).

Senere kaller vi NextKernel_Main som er vår C-funksjon. I sløyfen stopper vi for å stoppe datamaskinen. Dette kompileres med:

as -o kernel.o -c kernel.asm

Nå skal vi gå inn i programmering i C. Du vil tro at nå er alt et stykke kake, vi legger en printf en main og det er det, vi har gjort det.

Vel nei, siden printf y main de er funksjoner som er definert av operativsystemet, men vi lager dem! Vi kan bare bruke funksjonene som vi selv definerer.

I senere kapitler vil jeg snakke om hvordan vi kan sette vårt eget C-bibliotek (glibc, bionic, newlibc) men tid til annen. Vi har diskutert at vi ønsker å sette tekst på skjermen, og vi får se hvordan vi gjør det.

Det er to alternativer, det ene er å ringe BIOS og en annen er å administrere skjermminnet direkte. Vi skal gjøre det siste fordi det er tydeligere fra C, og det vil også tillate oss å gjøre det når vi går inn i beskyttet modus.

Vi oppretter en fil som heter NextKernel_Main.c med følgende innhold:

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 dette manipulerer vi minnet direkte VGA og karakter for karakter skriver vi den. Vi kompilerer ved å deaktivere stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Hvis du har kommet dit så langt, vil du prøve det splitter nye operativsystemet nå, men vi er ikke ferdige ennå. Vi trenger en liten fil som forteller kompilatoren hvor i filen skal forlate hver seksjon. Dette gjøres med et koblingsskript. Vi oppretter 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 dette definerer vi posisjonen til hver seksjon og inngangspunktet, start, som vi har definert i kernel.asm. Nå kan vi forene all denne sammenblandingen:

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

Nå kopierer vi START.ELF til / neste i mappen vår som simulerer roten til operativsystemet vårt. Vi går til rotmappen til vårt nye operativsystem med konsollen og bekrefter at det er to filer: en /boot/grub/grub.cfg og en annen /next/START.ELF.

Vi går til den øvre katalogen og kaller et ISO-opprettingsverktøy med GRUB kalt grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Når vi har gjort dette, vil vi ha en ISO. Denne ISO kan åpnes på datamaskiner x86 (64 bits også) og virtuelle maskiner. For å teste det, skal jeg bruke QEMU. Vi ringer QEMU fra kommandolinjen:

qemu-system-i386 nextdivel.iso

Vil starte SeaBIOS og senere vil vi ha GRUB. Senere, hvis alt er riktig, vil vi se frasen vår.
Du vil tro at dette er vanskelig, jeg svarer deg, ja det er det.

Det er vanskelig å lage et operativsystem, og at dette her ikke gjør noe nyttig. I fremtidige kapitler vil vi se hvordan du håndterer farger på skjermen, reserverer minne og hvis jeg kan, hvordan du får data fra tastaturet.

Hvis noen ikke vil kopiere alt her, har jeg et depot på GitHub (mer forseggjort) med operativsystemet NesteDivel. Hvis du vil kompilere NesteDivel du må bare ha git og 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

Jeg oppfordrer deg til å samarbeide om NextDivel hvis du har tid og lyst til å lage et operativsystem. Kanskje enda bedre enn Linux ... tiden vil vise.


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   livlig sa

    :O

    1.    marianogaudix sa

      Torvalds tok operativsystemet Minix (avledet fra UNIX) til Andrew S. Tanenbaum og forbedret det.

      Tanenbaum har kjempet med Linus, de fornærmet hverandre. Tanenbaum sier at Microkernel er fremtiden (HURD, Minix new cone Microkernel).

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

  2.   eliotime3000. sa

    Dette har vært det beste innlegget jeg har sett så langt på denne bloggen. Jeg vil allerede vite hva jeg ellers skal gjøre.

  3.   Carlos. Gude sa

    Bli imponert

  4.   axl sa

    Virkelig imponerende !!

  5.   rhoconlinux sa

    FUUUUUUA!
    Det er det geekeste innlegget jeg noensinne har sett hehe. Gratulerer Adrián, en horeartikkel! hyper interessant !!! 🙂

    1.    Joaquin sa

      Jeg er enig. Jeg forestiller meg denne situasjonen:
      GNU / Linux Power User (med et lykkelig ansikt):
      "Jeg vet allerede hvordan jeg skal lage Gentoo"

      Nerd (foraktelig): «pff, jeg har skapt min egen distro ...»

      1.    desikoder sa

        Ja, jeg kan lage min egen Linux distro. Faktisk utvikler jeg en initramfs og en kjerne for innebygd linux. Det er ikke det samme å lage et operativsystem enn en Linux distro. Den første er mye vanskeligere, nesten umulig, den andre, som du har sagt, kan være hva som helst, til og med Ubuntu med xD-logoen endret. Så jeg vil la det være slik:

        GNU / Linux Power User (med et lykkelig ansikt)
        - Jeg vet allerede hvordan jeg skal lage Gentoo

        Halvnerd
        - Pff, jeg har fulgt en linux fra bunnen av, og jeg har laget min egen distro

        Nerd (med foraktelig holdning)
        - pff, fordi jeg har programmert en kjerne i assembler og i C

        Saludos!

  6.   Cronos sa

    Dette er interessant for meg, i påvente av de neste kapitlene.

  7.   abimaelmartell sa

    Jeg så denne veiledningen for lenge siden, den er for C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet sa

      Takk for lenken, jeg tar en titt på den.

  8.   Jose Jácome sa

    Jeg vil ha et operativsystem som er 100% kompatibelt med AMD-grafikk: /

    1.    ivanlinux sa

      Windows

      1.    Jose Jácome sa

        hahaha i Windows Catalyst støtter ikke OpenGL, selv om jeg ikke i Linux kan bruke all grafisk kraft, vil jeg vente på å se hva som skjer!

        1.    beny_hm sa

          bare vent til ventilen tørker ut markedet

  9.   KZKG ^ Gaara sa

    Magisk, perfekt, utmerket bidrag, det ser ut som en flott serie med innlegg 🙂

  10.   O_Pixote_O sa

    Buah Jeg vil gjerne vite hvordan jeg kan programmere for å hjelpe deg, bare som en måte å øve på med kunnskapen du lærer og hjelper en. For nå lar jeg deg mottoet for å gjøre oppmerksom på prosjektet når du er ferdig med det "Bruk NextDivel, porno ser likt ut (eller bedre).", Du vil feie xD.

  11.   dette navnet er falskt sa

    Mooooooolaaa !!!!

  12.   nordi sa

    Veldig bra artikkel, men bare nysgjerrig på hvorfor du ikke har fulgt Linux From Scratch-prosjektet?

    Hilsen

    1.    AdrianArroyoStreet sa

      Vel, Linux fra Scratch er greit, og du kan fortelle at det er ditt, men det er veldig mekanisk:
      -Last ned skrifttyper
      -Patch dem
      -Kompilere
      -Installere
      -Neste
      Her, selv om resultatet til slutt er verre, kan du si at du har vurdert alle filene.

    2.    desikoder sa

      Som det fremgår av min forrige kommentar, fordi den ikke har samme nivå av kompleksitet. Videre er linux fra bunnen av ikke egentlig, i motsetning til navnet, å lage et system fra bunnen av. Å lage et system fra bunnen av programmerer det selv, skriver din egen kjerne, ikke linux-kjernen, om mulig til og med din egen bootloader i stedet for grub, lilo, syslinux, etc. Selv om en LFS ikke er en liten bragd og er ganske kompleks, kommer den ikke engang i nærheten av å programmere din egen kjerne ...

      I tillegg er jeg enig med AdrianArroyo Calle i at den er for mekanisk, jeg har lest den en gang og du ender opp med å gi opp på den sjette siden, de forteller deg også å bruke hvilke versjoner av pakkene fordi ellers virker ikke instruksjonene (at viser mangelen på fleksibilitet, etter min mening). Jeg tror det er bedre å ha noe av din egen idé, kompilere pakkene du vil, til og med programmere noen, kompilere en linux-kjerne og i fred.

      Saludos!

  13.   cookie sa

    uuuoooohh !! Jeg har aldri fanget et innlegg så mye som dette gjorde.
    Fortsett 😀

  14.   linux_user sa

    Jeg vet ikke hva som er galt:

    feil: ingen multiboot-topptekst funnet.
    feil må du laste kjernen først

    1.    AdrianArroyoStreet sa

      Hvis det er trøst, gjorde jeg den samme feilen. Prøv å bruke kildene i GitHub, der er feilen allerede løst. Uansett tror jeg at hvis du endrer grub.cfg-linjen fra "multiboot /next/START.ELF" til "kernel /next/START.ELF", kan det fungere. Jeg vet ikke helt.

      1.    mcbanan sa

        Først av alt, fantastisk inngang 🙂
        Jeg har det samme problemet med å laste kjernen fra grub. Selv ved å bruke GitHub-kilder eller endre multiboot for kjernen ...

        feil: ingen multiboot-topptekst funnet.
        feil: ingen lastet kjerne

        1.    AdrianArroyoStreet sa

          Bruker du clang som kompilator? Endre det for gcc
          Har du husket å bruke koblingsskriptet? Det er nødvendig slik at linkeren (ld i vårt tilfelle) vet hvor i filen den skal legge hver ting. I dette tilfellet må multiboot-overskriften være i begynnelsen.
          Bruker du CMake-systemet? Hvis du bruker det, tror jeg det ikke mislykkes.
          Hvis det ikke fungerer for deg, prøver jeg å finne en annen løsning.

  15.   khourt sa

    [+100]
    Bare flott !!!

  16.   invisible15 sa

    Det er veldig kult 🙂

  17.   tanrax sa

    Jeg tar av meg hatten. Imponerende innlegg. Gratulerer.

  18.   mann sa

    wow!
    Det ville være flott om du kunne åpne applikasjoner laget i HTML5 og Javascript uten å måtte bruke en nettleser, er det mulig?
    Jeg snakker om at de er som innfødte applikasjoner.
    Så det ville være enkelt å programmere for dette operativsystemet 😀

    1.    AdrianArroyoStreet sa

      I dette tilfellet skal jeg ikke gjøre det fordi det tar mye mer arbeid bak det, men det er et operativsystem som heter "er" som gjør det du sier. Faktisk er kommandolinjen JavaScript, og vinduer tegnes ved hjelp av JavaScript Canvas-funksjoner. Nintendo-ingeniører gjorde det, og nå er det åpen kildekode.

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

      1.    mann sa

        Valla, takk for informasjonen 😀
        Jeg skal ta en titt

  19.   patodx sa

    Den som kan lage sitt eget operativsystem, kan dø fredelig, siden det intellektuelle nivået han må oppnå med det; Det får deg til å dispensere fra himmel eller helvete.
    Del av innlegg.

    1.    Miguel sa

      foreløpig er ingen kjent for å ha laget bare noe som kan sies å være et anstendig operativsystem laget fra bunnen av, ikke engang Linux Torvalds som du sier i begynnelsen, siden dette startet fra Unix-kilder og alt annet er forfattet til felles for mer enn en person, livet er veldig kort og det å begynne fra bunnen av er utenkelig for noen, selv om det motsatte er ønsket, er det påviselig i mange feil som ble gjort i kopiering og liming av Linux Torvalds

      1.    skarmiglione sa

        Unix-kildene er stengt, bruk av minix ... som er noe annet.

      2.    Philip Robina sa

        og de som laget QDOS hva?
        var basert på noe?

  20.   Tesla sa

    Etter det jeg ser, hvem som ikke har sitt eget operativsystem, er fordi de ikke vil hahahaha.

    Nå seriøst, veldig interessant! Mye går utover min begrensede programmeringskunnskap, men jeg vil lese de andre delene av denne serien med forventning.

    Takk for innlegget!

  21.   Manuel R. sa

    Du etterlot meg med et O_O-ansikt ... uten å tenke å undervurdere bidragene til noen, det er det mest "pro" jeg har sett i det siste. Hilsen.

  22.   aitor_cz sa

    Veldig bra artikkel, Adrián. Vennligst fortsett…

  23.   mj sa

    Tuller du på April Fools Day?, Ikke vær slem "Emulerer Linus Torvalds: Lag ditt eget operativsystem fra bunnen av." Jeg tror ikke det er vanskelig for de som følger en karriere i et eller annet institutt for teknologi eller universitet. men for meg er jeg en nybegynner-bueskytter (det er de som sier "Noob", men jeg anser meg som mer nybegynner som litt lat) som høres ut som å ikke tråkke på land. Uansett skaper denne artikkelen mye nysgjerrighet og uten tviladministrasjon og respekt for sin redaktør, gratulasjoner; Det første jeg vil gjøre er å prøve å forstå i det minste litt av dette verdifulle materialet.
    TAKK Adrian Arroyo Calle, utmerket arbeid og edel kunnskapsleveranse.

  24.   Blaire pascal sa

    LEL Utmerket innlegg, fortsett det.

  25.   f3niX sa

    For et flott innlegg, det er dette jeg savnet desde linux. Herlig.

  26.   Rubin sa

    Flott innlegg, tusen takk.
    Jeg forsto ikke hva link.ld-filen gjør. Kan noen forklare det for meg?

    1.    AdrianArroyoStreet sa

      Link.ld-filen forteller koblingen (i dette tilfellet ld) hvor hver del av koden skal være i den resulterende filen. Vi definerer også inngangspunktet ettersom vi ikke har et operativsystem, kan vi ikke bruke main som et normalt program, i dette tilfellet velger vi startfunksjonen.

  27.   Maxi sa

    Flott alt innlegget ditt! Venter på 7! Hva om jeg for eksempel er i tvil om jeg bare ville kjøre en algoritme uten operativsystem, hvordan vet jeg hva jeg kan bruke og hva ikke C?

    1.    AdrianArroyoStreet sa

      Hvis du bruker den slik, vil du ikke kunne bruke noe fra stdlib, som praktisk talt er det alle bruker (ingen malloc, gratis, printf, scanf, strcmp, etc). Alt må implementeres direkte fra minne eller ASM. Kanskje i et høyere kapittel viser jeg deg hvordan du installerer et C-bibliotek for operativsystemet. Hvis du bruker C ++, kan du ikke bruke unntak og de nye og slette operatorene (og sikkert mer).

    2.    bytter sa

      jeg tror dette det kan gi deg en bedre ide om hvordan du gjør det.

  28.   Esteban sa

    Hallo, for rundt 5 år siden fulgte jeg en lignende publikasjon og utviklet en mikrokjerner som starter på samme måte, har noen aspekter å forbedre, men det kan interessere deg, den kjører i beskyttet modus, utfører multitasking og utfører minnevirtualisering, i det siste jobbet jeg på den diskdriver og cd-stasjon for å gjøre den installerbar og ikke bare kjøre på live-cd ... Hilsen.

  29.   Johan sa

    Kjære, jeg har en feil når jeg utfører kommandoen:
    gcc -o START.ELF kjerne.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -frittstående -lgcc

    link.ld: 5 syntaksfeil
    collect2: feil: ld returnerte 1 utgangsstatus

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

    I linje 5 ser jeg ikke feilen, er det noen som har det samme?

    Jeg jobber med en virtualisert debian wheezy i virtualbox

    1.    Julian Reyes Escrigas plassholderbilde sa

      Legg til ";" på slutten av * (. multiboot_header)

  30.   Eric Orellana Romero sa

    Utmerket initiativ, jeg vil absolutt følge kapitlene i dette innlegget, og har tenkt å lære mye av det. Tusen takk for at du tok deg tid til å lære oss. En enkelt detalj i denne forbindelse, det skal bemerkes at Linus Torvalds ikke er skaperen av noe operativsystem, han opprettet kjernen til GNU / Linux-systemet (den som har blitt brukt i annet operativsystem), som fortsatt er verdt, men det er Det er viktig å kreditere Richard Stallman for å ha laget det meste av operativsystemet.

    Tusen takk for innspillene, og jeg håper du vurderer min observasjon.

  31.   Julian Reyes Escrigas plassholderbilde sa

    Jeg har rotet med emnet en stund, jeg ble interessert så snart jeg leste overskriften. men meldingen fortsetter å bli

    feil: ingen multiboot-topptekst funnet.
    feil må du laste kjernen først

    Jeg har lastet opp det jeg tar til en repo på github https://github.com/rkmax/GenyOS

    1.    martin villalba sa

      Det samme skjer med meg. Fant du løsningen?

  32.   Carlos sa

    et spørsmål jeg begynte å introdusere syntaksen, og menylinjen forteller meg at kommandoen ikke ble funnet som kunne fortelle meg hvorfor
    dette er hva jeg gjør

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: kommandoen ble ikke funnet

    1.    AdrianArroyoStreet sa

      Innholdet i dette innholdet skal ikke legges inn på kommandolinjen, men i filen du oppretter, kalt grub.cfg

  33.   Nodetin sa

    Utmerket artikkel, takk!

  34.   David sa

    Spektakulær ... !! det er akkurat som den manglende lenken.

  35.   r.garciag sa

    Jeg elsker dine emulerende LInus Torvalds-veiledninger, men det er ett trinn jeg ikke forstår, følgende:
    Nå kopierer vi START.ELF til / neste i mappen vår som simulerer roten til operativsystemet vårt. Vi går til rotmappen til vårt nye operativsystem med konsollen og bekrefter at det er to filer: en /boot/grub/grub.cfg og en annen /next/START.ELF.

    Vi går til den øvre katalogen og kaller et ISO-opprettelsesverktøy med GRUB kalt grub-mkrescue

    Kan noen forklare det for meg: s

    1.    AdrianArroyoStreet sa

      Bare for å generere et minimum ISO som GRUB kan laste, kopierer vi kjernen til (ISO / hvilken som helst mappe) / neste / START.ELF og GRUB-konfigurasjonsfilen til (ISO / hvilken som helst mappe) / boot / grub / grub.cfg. Når det er gjort, har vi ennå ikke installert GRUB på ISO, og det er et verktøy som genererer ISO fra en mappe og installerer GRUB kalt grub-mkrescue. Så vil vi endelig ende opp med en oppstartbar ISO som har GRUB installert, som kan lese konfigurasjonen for senere å utføre START.ELF riktig. Jeg vet ikke om jeg har forklart meg selv, men det vi gjør er et slags falskt filsystem som vi genererer en ISO med.

  36.   miguel jose guevara oppmerksomhet sa

    Buenísimo

  37.   michael moreno sa

    Vel, se på et nytt system ikke så mye, men hvis du forbedrer linux, for eksempel, opprett en linux exonucleus med en serverkomponent som fungerer som en micronucleus hvis du ønsker det, det vil si en exo struktur med micronucleus atferd som ville være super og linux.

    Den andre tingen er at jeg ikke er ekspert på programmering, bare noen få ostete c ++ og litt java, det ville være nok for meg å gi linux-kjerneprogrammet en modul, sløying, modifisering osv.

  38.   VinterSoldier53 sa

    Uten tvil må jeg allerede gjøre på ferie.

  39.   Fermín sa

    Denne gode og i hvilket program designer og kode du den?
    vær så snill å gi meg det svaret

  40.   Darkmind sa

    Når jeg kompilerer fra giten din får jeg:

    [jmponce @ jar build] $ cmake ..
    - Opprette NextRoot-katalog
    - Genererer ISO-skript
    lag DESTDIR = neste installasjon
    ./iso.sh
    - Fant Doxygen: / usr / bin / doxygen (funnet versjon "1.8.9")
    - Konfigurering ferdig
    - Genererer ferdig
    - Build-filer er skrevet til: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Skanneavhengigheter til målet START.ELF
    [7%] Bygger ASM-ATT-objekt src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Bygger CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Kobler CXX-kjørbar START.ELF
    / usr / bin / ld: Inkompatibel /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a hoppes over mens du leter etter -lgcc
    / usr / bin / ld: finner ikke -lgcc
    collect2: feil: ld returnerte exit status 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Mislykkede instruksjoner for mål 'src / START.ELF'
    lage [2]: *** [src / START.ELF] Feil 1
    CMakeFiles / Makefile2: 106: Mislykkede instruksjoner for målet 'src / CMakeFiles / START.ELF.dir / all'
    lage [1]: *** [src / CMakeFiles / START.ELF.dir / all] Feil 2
    Makefile: 117: Feil i instruksjonene for mål 'alle'
    make: *** [all] Feil 2

    1.    AdrianArroyoStreet sa

      Feilen ser ut til å være at den ikke finner llibgcc siden du har 64-biters versjonen og for øyeblikket er byggesystemet tvunget til å bruke 32-bit. Du bør installere en kompatibilitetspakke på din distro eller bedre, bruk et 32-biters system.

      1.    Ronaldo Rodríguez sa

        Jeg har 32 biter og den samme feilen vises, mener du operativsystemet eller arkitekturen? min er 64 Bit, men jeg bruker 32 bit Ubuntu, ikke spør, økonomiske problemer, med det sier jeg alt.

  41.   Jorge sa

    Utmerket tema, venter på større omfang. hilsen

  42.   Jhon sa

    Flott håper jeg på mer

  43.   Soid perez sa

    Hei, jeg er en ung ambassadør som ønsker å lage et operativsystem som støtter alle programmer og plattformer slik at utviklere ikke trenger å ha kraftige maskiner eller applikasjoner eller programmer på en pc.
    det er derfor jeg er interessert i dette innlegget, men når jeg laster ned git eller prøver å lage det, går alt bra til jeg utfører kommandoen ./iso.sh eller grub-mkrescue -o nextdivel.iso neste rot får du denne feilen

    "Grub-mkrescue: advarsel: Xorriso støtter ikke" –grub2-boot-info ". Noen funksjoner er deaktivert. Bruk xorriso 1.2.9 eller nyere ..
    grub-mkrescue: advarsel: Xorriso støtter ikke "–grub2-boot-info". Kjernebildet ditt er for stort. Diskoppstart er deaktivert. Bruk xorriso 1.2.9 eller nyere .. »
    Jeg aner egentlig ikke siden jeg vet mye om applikasjoner og nett, men jeg vet ikke noe om grub

    1.    AdrianArroyoStreet sa

      Du må kanskje oppdatere xorriso-programmet på distro. Hvilken distro og versjon bruker du?

      1.    Soid perez sa

        Jeg bruker xubuntu 14.04lts og prøver å kjøre xorriso, men skallet forteller meg at det ikke finner det, og jeg får apt-get install xorriso selv om jeg oppriktig forventet noe svar fordi jeg hadde dårlig erfaring med å installere ting som jeg ikke vet i Linux hehe . Jeg oppdaterer det med en gang og forteller deg hva som skjedde

      2.    AdrianArroyoStreet sa

        Installer deretter xorriso fra programvaresenteret eller bare fra terminalen, gjør "sudo apt-get install xorriso"

      3.    Soid perez sa

        Jeg har allerede gjort alt du fortalte meg, og både med git og min, jeg får denne xorriso 1.3.2: RockRidge filsystemmanipulator, libburnia-prosjektet.

        Kjør nåværende: -outdev 'stdio: nextdivel.iso'
        Mediestrøm: stdio-fil, overskrivbar
        Mediestatus: er tom
        Medieoppsummering: 0 økter, 0 datablokker, 0 data, 1901m gratis
        Lagt til i ISO-bilde: katalog '/'='/tmp/grub.OEqSzV'
        xorriso: OPPDATERING: 546 filer lagt til på 1 sekund
        xorriso: FAILURE: Kan ikke bestemme attributter for kildefilen '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Ingen slik fil eller katalog
        xorriso: OPPDATERING: 546 filer lagt til på 1 sekund
        xorriso: avbryter: -abort_on 'FAILURE' oppdaget 'FAILURE'
        og corduroy Jeg forstår ikke strukturen min er /nextroot/boot/grub/grub.cfg og nextroot / next / START.ELF

      4.    Soid perez sa

        Takk, jeg er klar til å gå videre, en venn hjalp meg og fortalte meg hva jeg gjorde galt var organiseringen av katalogen, så jeg ordnet det og det var det.

      5.    erik sa

        Unnskyld meg, kan du fortelle meg hvilken prosedyre du utførte siden jeg får feilen ingenting å starte: ingen slik fil eller katalog

        ingen oppstartbar enhet.

  44.   jose sa

    Hilsen! Jeg hadde tenkt deg om du kunne sende meg en e-post med det du forklarer her, jeg har blitt litt forvirret, og jeg må sammenligne det jeg har med det du forklarer, kanskje det som ikke er klart for meg er om opprettelsen av grubben. cfg gjøres i terminalen gcc eller hvor nøyaktig? tusen takk venn!

    1.    AdrianArroyoStreet sa

      Du oppretter filen grub.cfg med hvilken som helst teksteditor, og du må lagre den i PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano sa

    Hei Adrian, først og fremst gratulerer du og takker for ditt bidrag.

    Du vet at jeg gjør dette for en øvelse, og jeg begynte å sette det sammen etter veiledningen, men etter start fant jeg den første feilen

    $ som -o kernel.o -c kernel.asm
    bash: as: kommando ikke funnet ...
    Lignende kommandoer er:
    'sa'
    'ac'

    Jeg jobber med fedora 20, og jeg kan ikke finne en løsning i denne forbindelse, jeg vil sette pris på din veiledning om jeg skulle endre noe i gcc eller gass

    på forhånd takk

    1.    AdrianArroyoStreet sa

      Du må installere GAS slik at jeg kan se feilkoden. Jeg har ikke Fedora for hånden, men hvis du installerer gcc-c ++, vil du i teorien installere hele GCC-pakken, og den kommer vanligvis med GNU As.

  46.   Gaston Ramirez sa

    Jeg er med deg, jeg vet noe om C ++, C # (selv om denne siste ikke er veldig nyttig i denne saken) er det dårlige at jeg fortsatt mangler erfaring, jeg takler aldri C-språk, publikasjonen din er flott, Jeg har ikke så mye å si, hvis jeg har tid ser jeg. Takk skal du ha.

  47.   Teresita av Jesus Nah Sanchez sa

    Tusen takk for god hjelp….

  48.   jky sa

    Jeg elsker linux det er det beste distriktet det er sannheten for windows er søppel til en at jeg vet at skaperen av linux er skaperen av windows

  49.   Rode sa

    Hei, jeg får en feil i grub sier
    feil: fil /neste/START.ELF Ikke funnet
    feil: du må laste kjernen først

    Kan du hjelpe meg og googlet, men jeg finner ikke

  50.   Henry Avila sa

    Vær så snill, hvordan kan jeg få den til å vise meldingen HELLO WORLD? Jeg er nybegynner og vet fortsatt ikke nok

  51.   CARLOS GUERRERO ALVAREZ sa

    Følgende skjer med meg:
    gcc -o START.ELF kjerne.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -frittstående -lgcc
    / usr / bin / ld: kernel.o: flytting R_X86_64_32 mot symbol `stack 'kan ikke brukes når du lager et PIE-objekt; kompiler på nytt med -fPIE
    / usr / bin / ld: sluttkobling mislyktes: ikke-representativ del på utdata
    collect2: feil: ld returnerte 1 utgangsstatus