Efterligne Linus Torvalds: Opret dit eget operativsystem fra bunden (I)

Først og fremmest skal du kommentere, at dette er min første artikel, og at jeg håber, at du alle kan lide det.

Linus Torvals glad

I denne serie skal vi efterligne Linus Torvalds, vi skal oprette vores operativsystem fra 0. I denne første episode skal vi se boot, og vi lægger en tekst på skærmen fra vores kerne.

I mit tilfælde kaldes operativsystemet NæsteDivel. Den første beslutning, vi skal tage, så snart vi overvejer operativsystemet, er hvad bootloaderen vil være?

Her er der flere varianter, og vi kunne endda skabe en selv; dog i denne vejledning skal jeg bruge GRUB, fordi de fleste ved mere eller mindre noget om ham. Vi opretter en mappe, der vil være roden til vores operativsystem, og der opretter vi mappen / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

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

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

I denne fil har vi set hvordan GRUB vil indlæse vores kerne, i dette tilfælde i /next/START.ELF. Nu skal vi oprette vores kerne.

Til dette har vi brug for GCC y GAS (projektets montør GNU, kommer normalt med gcc). Så vi skal oprette kernen.

Først opretter vi en fil, der hedder kernel.asm. Denne fil indeholder startpunktet for vores kerne og definerer også multiboot (en funktion i nogle bootloaders som f.eks. GRUB). Indholdet af 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 relateret til multiboot er simpelthen ikke at følge specifikationen ikke mere. Alt starter i start, det kalder multiboot_entry, vi har defineret multiboot-header i den første 4k, og vi vil sætte det (med movl).

Senere kalder vi NextKernel_Main, som er vores kernel C-funktion. I sløjfen stopper vi for at stoppe computeren. Dette kompileres med:

as -o kernel.o -c kernel.asm

Nu skal vi gå ind i programmering i C. Du vil tro, at nu er alt et stykke kage, vi sætter en printf en main og det er det, vi har gjort det.

Nå nej, siden printf y main de er funktioner, der er defineret af operativsystemet, men vi opretter dem! Vi kan kun bruge de funktioner, som vi selv definerer.

I senere kapitler vil jeg tale om, hvordan vi kan placere vores eget C-bibliotek (glibc, bionic, newlibc) men tid til anden. Vi har talt om, at vi vil lægge tekst på skærmen, og vi får se, hvordan vi gør det.

Der er to muligheder, den ene er at ringe til BIOS og en anden er at styre skærmhukommelsen direkte. Vi skal gøre sidstnævnte, fordi det er klarere fra C, og det vil også give os mulighed for at gøre det, når vi går ind i beskyttet tilstand.

Vi opretter en fil kaldet NextKernel_Main.c med følgende indhold:

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 hukommelsen direkte VGA og karakter for karakter skriver vi det. Vi kompilerer ved at deaktivere stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Hvis du er nået så langt, vil du prøve dit helt nye operativsystem nu, men vi er ikke færdige endnu. Vi har brug for en lille fil, der fortæller kompilatoren, hvor i filen skal forlade hvert afsnit. Dette gøres med et linkerscript. Vi opretter 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 placeringen af ​​hvert afsnit og indgangspunktet, start, som vi har defineret i kernel.asm. Nu kan vi forene al denne sammensætning:

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

Nu kopierer vi START.ELF til / næste inde i vores mappe, der simulerer roden til vores operativsystem. Vi går til rodmappen på vores nye operativsystem med konsollen og kontrollerer, at der er to filer: en /boot/grub/grub.cfg og en anden /next/START.ELF.

Vi går til den øverste mappe og kalder et ISO-oprettelsesværktøj med GRUB kaldet grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Når vi har gjort dette, får vi en ISO. Denne ISO kan åbnes på computere x86 (64 bit også) og virtuelle maskiner. For at teste det skal jeg bruge QEMU. Vi ringer QEMU fra kommandolinjen:

qemu-system-i386 nextdivel.iso

Vil starte SeaBIOS og senere får vi det GRUB. Senere, hvis alt er korrekt, ser vi vores sætning.
Du vil tro, at dette er svært, svarer jeg, ja det er det.

Det er svært at oprette et operativsystem, og at dette her ikke gør noget nyttigt. I fremtidige kapitler vil vi se, hvordan man håndterer farver på skærmen, reserverer hukommelse, og hvis jeg kan, hvordan man får data fra tastaturet.

Hvis nogen ikke vil kopiere alt her, har jeg et lager på GitHub (mere detaljeret) med operativsystemet NæsteDivel. Hvis du vil kompilere NæsteDivel du skal bare have 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 opfordrer dig til at samarbejde om NextDivel, hvis du har tid og lyst til at oprette et operativsystem. Måske endda bedre end Linux ... tiden vil vise det.


Indholdet af artiklen overholder vores principper for redaktionel etik. Klik på for at rapportere en fejl her.

85 kommentarer, lad dine

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort.

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   elav sagde han

    :O

    1.    marianogaudix sagde han

      Torvalds tog Minix-operativsystemet (afledt af UNIX) til Andrew S. Tanenbaum og forbedrede det.

      Tanenbaum har haft en kamp med Linus, de fornærmede hinanden. Tanenbaum siger, at Microkernel er fremtiden (HURD, Minix nye kegle Microkernel).

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

  2.   eliotime3000 sagde han

    Dette har været det bedste indlæg, jeg hidtil har set på denne blog. Jeg vil allerede gerne vide, hvad jeg ellers skal gøre.

  3.   Carlos. Gude sagde han

    Bliv imponeret

  4.   axl sagde han

    Virkelig imponerende !!

  5.   rhoconlinux sagde han

    FUUUUUUA!
    Det er det nørdeste indlæg, jeg nogensinde har set hehe. Tillykke Adrián, en skøn artikel! hyper interessant !!! 🙂

    1.    Joaquin sagde han

      Jeg er enig. Jeg forestiller mig denne situation:
      GNU / Linux Power User (med et lykkeligt ansigt):
      "Jeg ved allerede, hvordan jeg skal kompilere min Gentoo"

      Nørd (foragteligt): «pff, jeg har skabt min egen distro ...»

      1.    desikoder sagde han

        Ja, jeg kan oprette min egen Linux distro. Faktisk i det udvikler jeg en initramfs og en kerne til indlejret linux. Det er ikke det samme at oprette et operativsystem end en Linux distro. Den første er meget vanskeligere, næsten umulig, den anden, som du har sagt, kan være hvad som helst, selv Ubuntu med logoet ændret xD. Så jeg vil lade det være sådan her:

        GNU / Linux Power User (med et lykkeligt ansigt)
        - Jeg ved allerede, hvordan jeg skal sammensætte min Gentoo

        Semi-nørd
        - Pff, jeg har fulgt en linux fra bunden, og jeg har lavet min egen distro

        Nørd (med foragtelig holdning)
        - pff, fordi jeg har programmeret en kerne i assembler og i C

        Saludos!

  6.   Cronos sagde han

    Dette er interessant for mig i afventning af de følgende kapitler.

  7.   abimaelmartell sagde han

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

    1.    AdrianArroyoStreet sagde han

      Tak for linket, jeg vil se på det.

  8.   Jose Jácome sagde han

    Jeg vil gerne have et operativsystem, der er 100% kompatibelt med AMD-grafik: /

    1.    IvanLinux sagde han

      Windows

      1.    Jose Jácome sagde han

        hahaha i Windows Catalyst har ikke OpenGL-understøttelse, selvom jeg ikke kan bruge al den grafiske kraft i Linux, vil jeg vente på at se, hvad der sker!

        1.    beny_hm sagde han

          bare vent på, at ventilen udsletter markedet

  9.   KZKG ^ Gaara sagde han

    Magisk, perfekt, fremragende bidrag, det ligner en stor række indlæg 🙂

  10.   O_Pixote_O sagde han

    Buah Jeg vil gerne vide, hvordan man programmerer for at hjælpe dig, simpelthen som en måde at øve på med den viden, at du lærer og hjælper en. For nu giver jeg dig mottoet for at henlede opmærksomheden på projektet, når du er færdig med det "Brug NextDivel, porno ser det samme ud (eller bedre).", Du vil feje xD.

  11.   dette navn er falsk sagde han

    Mooooooolaaa !!!!

  12.   nordi sagde han

    Meget god artikel, men bare nysgerrig, hvorfor du ikke har fulgt Linux From Scratch-projektet?

    hilsen

    1.    AdrianArroyoStreet sagde han

      Nå, Linux fra Scratch er fint, og du kan fortælle, at det er dit, men det er virkelig meget mekanisk:
      -Download skrifttyper
      -Patch dem
      -Udarbejde
      -Installere
      -Følge
      Her, selvom resultatet i sidste ende er værre, kan du sige, at du har gennemgået alle filerne.

    2.    desikoder sagde han

      Som det fremgår af min tidligere kommentar, fordi den ikke har samme niveau af kompleksitet. Desuden er linux fra bunden ikke rigtig, i modsætning til navnet, at skabe et system fra bunden. Oprettelse af et system fra bunden programmerer det selv, skriver din egen kerne, ikke linux-kernen, om muligt endda din egen bootloader i stedet for grub, lilo, syslinux osv. Selvom en LFS ikke er en lille bedrift og er ret kompleks, kommer den ikke engang tæt på at programmere din egen kerne ...

      Derudover er jeg enig med AdrianArroyo Calle i, at det er for mekanisk, jeg har læst det engang, og du ender med at give op på den sjette side, de fortæller dig også at bruge hvilke versioner af pakkerne, ellers vil instruktionerne ikke fungere (det viser manglen på fleksibilitet , Efter min mening ). Jeg synes, det er bedre at have noget af din egen idé, kompilere de pakker, du ønsker, endda programmere nogle, kompilere en linux-kerne og i fred.

      Saludos!

  13.   cookie sagde han

    uuuoooohh !! Jeg har aldrig fanget et indlæg så meget som dette gjorde.
    Fortsæt venligst 😀

  14.   linux_bruger sagde han

    Jeg ved ikke, hvad der er galt:

    fejl: ingen multiboot-header fundet.
    fejl, skal du først indlæse kernen

    1.    AdrianArroyoStreet sagde han

      Hvis det er nogen trøst, begik jeg den samme fejl. Prøv at bruge kilderne i GitHub, der er fejlen allerede løst. Alligevel tror jeg, at hvis du ændrer grub.cfg-linjen fra "multiboot /next/START.ELF" til "kernel /next/START.ELF", fungerer det muligvis. Jeg ved det ikke præcist.

      1.    mcbanan sagde han

        Først og fremmest storslået indgang 🙂
        Jeg har det samme problem med at indlæse kernen fra grub. Selv ved hjælp af GitHub-kilder eller ændring af multiboot til kerne ...

        fejl: ingen multiboot-header fundet.
        fejl: ingen indlæst kerne

        1.    AdrianArroyoStreet sagde han

          Bruger du clang som en compiler? Skift det til gcc
          Har du husket at bruge linkerscriptet? Det er nødvendigt, så linkeren (ld i vores tilfælde) ved, hvor i filen den skal placere hver ting. I dette tilfælde skal multiboot-overskriften være i starten.
          Bruger du CMake-systemet? Hvis du bruger det, tror jeg, det ikke fejler.
          Hvis det ikke virker for dig, prøver jeg at finde en anden løsning.

  15.   khourt sagde han

    [+100]
    Bare fantastisk !!!

  16.   invisible15 sagde han

    Det er virkelig sejt 🙂

  17.   tanrax sagde han

    Jeg tager hatten af. Imponerende indlæg. Tillykke.

  18.   mand sagde han

    wow!
    Det ville være dejligt, hvis du kunne åbne applikationer lavet i HTML5 og Javascript uden at skulle bruge en browser, er det muligt?
    Jeg taler om, at de er som native applikationer.
    Så det ville være let at programmere til dette operativsystem 😀

    1.    AdrianArroyoStreet sagde han

      I dette tilfælde vil jeg ikke gøre det, fordi det kræver meget mere arbejde bag det, men der er et operativsystem kaldet "er", der gør hvad du siger. Faktisk er kommandolinjen JavaScript, og windows tegnes ved hjælp af JavaScript Canvas-funktioner. Nintendo-ingeniører gjorde det, og nu er det open source.

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

      1.    mand sagde han

        Valla, tak for informationen 😀
        Jeg kigger

  19.   patodx sagde han

    Enhver, der kan lave sit eget operativsystem, kan dø fredeligt, da det intellektuelle niveau, som han skal opnå med det; Det får dig til at give afkald på himlen eller helvede.
    Stykke udstationering.

    1.    Miguel sagde han

      indtil videre er der ingen, der vides at have lavet kun noget, der kan siges at være et anstændigt operativsystem lavet fra bunden, ikke engang Linux Torvalds som du siger i begyndelsen, da dette startede fra Unix-kilder og alt andet er skrevet i fælles for mere end én person, livet er meget kort, og start fra bunden er utænkeligt for nogen, selvom det modsatte ønskes, det kan påvises i mange fejl i kopiering og indsættelse af Linux Torvalds

      1.    skarmiglione sagde han

        Unix-kilderne er lukkede, brugen af ​​minix ... hvilket er noget andet.

      2.    Philip Robina sagde han

        og dem der lavede QDOS hvad?
        var baseret på noget?

  20.   Tesla sagde han

    Fra det jeg ser, hvem der ikke har deres eget operativsystem, er fordi de ikke vil, hahahaha.

    Nu seriøst, meget interessant! Meget går ud over min begrænsede programmeringsviden, men jeg vil læse de andre dele af denne serie ivrigt.

    Tak for indlægget!

  21.   Manuel R. sagde han

    Du efterlod mig med et O_O-ansigt ... uden den hensigt at undervurdere andres bidrag, det er det mest "pro", jeg har set for nylig. Hilsen.

  22.   aitor_cz sagde han

    Meget god artikel, Adrián. Fortsæt venligst ...

  23.   mj sagde han

    Griner du på April Fools Day, skal du ikke være "Emulere Linus Torvalds: Opret dit eget operativsystem fra bunden." Jeg synes ikke, det er svært for dem, der forfølger en karriere inden for et eller andet institut for teknologi eller universitet; men for mig er jeg en novice-bueskytte (der er dem, der kalder os "Noob", men jeg betragter mig selv som mere newbie noget doven), der lyder som ikke at træde på land. Under alle omstændigheder skaber denne artikel en masse nysgerrighed og uden tvivlsom beundring og respekt for sin redaktør, tillykke; Det første jeg vil gøre er at prøve at forstå i det mindste lidt af dette værdifulde materiale.
    TAK Adrian Arroyo Calle, fremragende arbejde og ædel levering af viden.

  24.   Blaire pascal sagde han

    LEL Fremragende post, fortsæt det.

  25.   F3niX sagde han

    Hvilket godt indlæg, dette er hvad jeg savnede fra Linux. Vidunderlig.

  26.   Rubin sagde han

    Fantastisk indlæg, mange tak.
    Jeg forstod ikke, hvad link.ld-filen gør. Kan nogen forklare det for mig?

    1.    AdrianArroyoStreet sagde han

      Link.ld-filen fortæller linkeren (i dette tilfælde ld), i hvilken position inden for den resulterende fil hver del af koden skal være. Vi definerer også indgangsstedet, da vi ikke har et operativsystem, kan vi ikke bruge main som et normalt program, i dette tilfælde vælger vi startfunktionen.

  27.   Maxi sagde han

    Fantastisk hele dit indlæg! Venter på 7! Hvad hvis jeg for eksempel er i tvivl, hvis jeg kun ville køre en algoritme uden operativsystem, hvordan ved jeg hvad jeg kan bruge og hvad ikke C?

    1.    AdrianArroyoStreet sagde han

      Hvis du bruger det på denne måde, ville du ikke være i stand til at bruge noget fra stdlib, hvilket praktisk taget er hvad alle bruger (ingen malloc, gratis, printf, scanf, strcmp osv.). Alt skal implementeres direkte fra hukommelse eller ASM. Måske vil jeg i et højere kapitel vise, hvordan man installerer et C-bibliotek til operativsystemet. Hvis du bruger C ++, kan du ikke bruge undtagelser og de nye og slette operatorer (og helt sikkert mere).

    2.    skifter sagde han

      jeg tror dette det kan give dig en bedre idé om, hvordan du gør det.

  28.   Esteban sagde han

    Hej, for omkring 5 år siden fulgte jeg en lignende publikation og udviklede en mikrokernel, der starter på samme måde, den har nogle aspekter at forbedre, men det kan interessere dig, den kører i beskyttet tilstand, udfører multi-tasking og udfører hukommelsesvirtualisering, for nylig arbejdede jeg på det diskdriver og cd-drev for at gøre det installeret og ikke kun køre på live cd ... Hilsner.

  29.   Johan sagde han

    Kære, jeg har en fejl under udførelsen af ​​kommandoen:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -fritstående -lgcc

    link.ld: 5 syntaksfejl
    collect2: fejl: ld returnerede 1 exit-status

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

    I linje 5 kan jeg ikke se fejlen, gør nogen det samme?

    Jeg arbejder med en virtualiseret debian wheezy i virtualbox

    1.    Julian Reyes Escrigas pladsholderbillede sagde han

      tilføj ";" i slutningen af ​​* (. multiboot_header)

  30.   Eric Orellana Romero sagde han

    Fremragende initiativ, jeg vil helt sikkert følge kapitlerne i dette indlæg og har til hensigt at lære meget af det. Mange tak for at tage dig tid til at undervise os. En enkelt detalje i denne henseende skal det bemærkes, at Linus Torvalds ikke er skaberen af ​​noget operativsystem, han oprettede kernen til GNU / Linux-systemet (den, der er blevet brugt i andet operativsystem), hvilket stadig er umagen værd, men det er Det er vigtigt at kreditere Richard Stallman for at skabe det meste af operativsystemet.

    Mange tak for inputet, og jeg håber, du overvejer min observation.

  31.   Julian Reyes Escrigas pladsholderbillede sagde han

    Jeg har flimret med emnet i et stykke tid, jeg blev interesseret, så snart jeg læste overskriften. men beskeden bliver ved med at blive

    fejl: ingen multiboot-header fundet.
    fejl, skal du først indlæse kernen

    Jeg har uploadet det, jeg tager til en repo på github https://github.com/rkmax/GenyOS

    1.    Martin Villalba sagde han

      Det samme sker med mig. Fandt du løsningen?

  32.   Carlos sagde han

    et spørgsmål, jeg begyndte at introducere syntaksen, og menupunktlinjen fortæller mig, at kommandoen ikke blev fundet, der kunne fortælle mig hvorfor
    det er hvad jeg gør

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

    1.    AdrianArroyoStreet sagde han

      Indholdet af dette indhold skal ikke indtastes i kommandolinjen, men i den fil, du opretter, kaldet grub.cfg

  33.   Nodetin sagde han

    Fremragende artikel, tak!

  34.   David sagde han

    Spektakulær ... !! det er ligesom det manglende link.

  35.   r.garciag sagde han

    Jeg elsker dine emulerende LInus Torvalds-tutorials, men der er et trin, som jeg ikke forstår, følgende:
    Nu kopierer vi START.ELF til / næste inde i vores mappe, der simulerer roden til vores operativsystem. Vi går til rodmappen på vores nye operativsystem med konsollen og kontrollerer, at der er to filer: en /boot/grub/grub.cfg og en anden /next/START.ELF.

    Vi går til den øverste mappe og kalder et værktøj til oprettelse af ISO'er med GRUB kaldet grub-mkrescue

    Kunne nogen forklare det for mig: s

    1.    AdrianArroyoStreet sagde han

      Simpelthen for at generere et minimum ISO, som GRUB kan indlæse, kopierer vi kernen til (ISO / hvilken som helst mappe) /næst/START.ELF og GRUB-konfigurationsfilen til (ISO / enhver mappe) / boot /grub/grub.cfg. Når det er gjort, har vi endnu ikke installeret GRUB på ISO, og der er et værktøj, der genererer ISO fra en mappe og installerer GRUB kaldet grub-mkrescue. Derefter ville vi endelig ende med en bootbar ISO, der har GRUB installeret, som kan læse konfigurationen for senere at udføre START.ELF korrekt. Jeg ved ikke, om jeg har forklaret mig selv, men hvad vi gør er et slags falsk filsystem, som vi genererer en ISO med.

  36.   miguel jose guevara opmærksomhed sagde han

    Buenísimo

  37.   Michael Moreno sagde han

    Nå ser virkelig et nyt system ikke så meget ud, men hvis du forbedrer linux for eksempel at skabe en linux-exonucleus med en serverkomponent, der fungerer som en microkernel, hvis det ønskes, det vil sige en exo-struktur med micronucleus-opførsel, der ville være super og linux.

    Den anden ting er, at jeg ikke er ekspert i programmering, bare et par osteagtig c ++ og noget java, det ville være nok for mig at give linux-kerneprogrammet et modul, rense det, ændre det osv.

  38.   VinterSoldat53 sagde han

    Uden tvivl er jeg allerede nødt til at gøre på ferie.

  39.   Fermín sagde han

    Denne gode og i hvilket program designer og kode du den
    giv mig det svar

  40.   Darkmind sagde han

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

    [jmponce @ jar build] $ cmake ..
    - Oprettelse af NextRoot-bibliotek
    - Generering af ISO-script
    lav DESTDIR = næste installation
    ./iso.sh
    - Fundet Doxygen: / usr / bin / doxygen (fundet version "1.8.9")
    - Konfiguration udført
    - Generering færdig
    - Build-filer er blevet skrevet til: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Scanningsafhængigheder af mål START.ELF
    [7%] Bygger ASM-ATT-objekt src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Bygning af 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%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Bygning af 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%] Bygning af 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%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Bygning af CXX-objekt src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Kobling af CXX-eksekverbar START.ELF
    / usr / bin / ld: Inkompatibel /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a springes over, mens du leder efter -lgcc
    / usr / bin / ld: kan ikke finde -lgcc
    collect2: fejl: ld returnerede exit status 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Mislykkede instruktioner for mål 'src / START.ELF'
    make [2]: *** [src / START.ELF] Fejl 1
    CMakeFiles / Makefile2: 106: Fejl i instruktionerne til målet 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Fejl 2
    Makefile: 117: Manglende instruktioner til mål 'alle'
    make: *** [all] Fejl 2

    1.    AdrianArroyoStreet sagde han

      Fejlen ser ud til at være, at den ikke kan finde llibgcc, da du har 64-bit versionen og i øjeblikket er kompilationssystemet tvunget til at bruge 32-bit. Du skal installere en kompatibilitetspakke på din distro eller bedre, brug et 32-bit system.

      1.    Ronaldo Rodríguez sagde han

        Jeg har 32 bits, og den samme fejl vises, mener du operativsystemet eller arkitekturen? min er 64 Bit, men jeg bruger 32 bit Ubuntu, spørg ikke, økonomiske problemer, med det siger jeg det hele.

  41.   Jorge sagde han

    Fremragende emne, venter på større rækkevidde. Skål

  42.   Jhon sagde han

    Fantastisk håber jeg på mere

  43.   Soid perez sagde han

    Hej, jeg er en ung ambassadør, der ønsker at oprette et operativsystem, der understøtter alle programmer og platforme, så udviklere ikke behøver at have kraftfulde maskiner eller applikationer eller programmer på en pc.
    Det er derfor, jeg er interesseret i dette indlæg, men når jeg downloader din git eller prøver at oprette den, fungerer alt, indtil jeg udfører kommandoen ./iso.sh eller grub-mkrescue -o nextdivel.iso nextroot får du denne fejl

    "Grub-mkrescue: advarsel: Din xorriso understøtter ikke" –grub2-boot-info ". Nogle funktioner er deaktiveret. Brug xorriso 1.2.9 eller nyere ..
    grub-mkrescue: advarsel: Din xorriso understøtter ikke "–grub2-boot-info". Dit kernebillede er for stort. Diskstart er deaktiveret. Brug xorriso 1.2.9 eller nyere .. »
    Jeg aner virkelig ikke, da jeg ved meget om applikationer og webs, men jeg ved ikke noget om grub

    1.    AdrianArroyoStreet sagde han

      Du skal muligvis opdatere xorriso-programmet på din distro. Hvilken distro og version bruger du?

      1.    Soid perez sagde han

        Jeg bruger xubuntu 14.04lts og prøver at køre xorriso, men skallen fortæller mig, at den ikke kan finde den, og jeg får apt-get install xorriso, selvom jeg oprigtigt forventede noget svar, fordi jeg havde en dårlig oplevelse af at installere ting, som jeg ikke kender i linux hehe. Jeg opdaterer det lige nu og fortæller dig, hvad der skete

      2.    AdrianArroyoStreet sagde han

        Installer derefter xorriso fra softwarecentret eller blot fra terminalen, gør "sudo apt-get install xorriso"

      3.    Soid perez sagde han

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

        Kør nuværende: -outdev 'stdio: nextdivel.iso'
        Mediestrøm: stdio-fil, overskrivelig
        Mediestatus: er tom
        Medieoversigt: 0 sessioner, 0 datablokke, 0 data, 1901m gratis
        Tilføjet til ISO-billede: bibliotek '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 filer tilføjet på 1 sekund
        xorriso: FAILURE: Kan ikke bestemme attributter for kildefilen '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Ingen sådan fil eller bibliotek
        xorriso: UPDATE: 546 filer tilføjet på 1 sekund
        xorriso: afbryder: -abort_on 'FAILURE' stødte på 'FAILURE'
        og corduroy Jeg forstår ikke min struktur er /nextroot/boot/grub/grub.cfg og nextroot / next / START.ELF

      4.    Soid perez sagde han

        Tak, jeg er klar til at komme videre, en ven hjalp mig og fortalte mig, hvad jeg gjorde forkert, var organiseringen af ​​biblioteket, så jeg afviklede det, og det er det.

      5.    erik sagde han

        Undskyld mig, kan du fortælle mig, hvilken procedure du har udført, da jeg får fejlen intet at starte: ingen sådan fil eller mappe

        ingen startbar enhed.

  44.   jose sagde han

    Skål! Jeg ville bede dig om tjeneste, hvis du kunne sende mig en e-mail med det, du forklarer her, jeg er blevet lidt forvirret, og jeg skal sammenligne det, jeg har, med det, du forklarer, måske er det, der ikke er klart for mig, om oprettelsen af ​​gruben. cfg udføres i terminalen gcc eller hvor præcist? tak meget ven!

    1.    AdrianArroyoStreet sagde han

      Du opretter filen grub.cfg med en hvilken som helst teksteditor, og du skal gemme den i PROJECT_FOLDER / boot / grub / grub.cfg

  45.   Jhuazano sagde han

    Hej Adrian, først og fremmest lykønsker dig og tak for dit bidrag.

    Du ved, jeg gør dette til en øvelse, og jeg begyndte at sætte det sammen efter din vejledning, men efter start fandt jeg den første fejl

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

    Jeg arbejder på fedora 20, og jeg kan ikke finde en løsning i denne henseende, jeg vil sætte pris på din vejledning om, hvorvidt jeg skal ændre noget i gcc eller gas

    på forhånd tak

    1.    AdrianArroyoStreet sagde han

      Du skal installere GAS, så jeg kan se fejlkoden. Jeg har ikke Fedora ved hånden, men hvis du installerer gcc-c ++, vil du i teorien installere hele GCC-pakken, og den leveres normalt med GNU As.

  46.   Gaston Ramirez sagde han

    Jeg er med dig, jeg ved noget om C ++, C # (selvom denne sidste ikke er særlig nyttig i denne sag) den dårlige ting er, at jeg stadig mangler erfaring, jeg håndterer aldrig C-sprog, din publikation er fantastisk, jeg har ikke meget at sige, hvis jeg har tid ser jeg. Tak skal du have.

  47.   Teresita af Jesus Nah Sanchez sagde han

    Mange tak for stor hjælp….

  48.   jky sagde han

    Jeg elsker linux det er det bedste distrikt der er, sandheden for mine windows er skrald for en jeg ved, at skaberen af ​​linux er skaberen af ​​windows

  49.   Rode sagde han

    Hej jeg får en fejl i grub siger
    fejl: fil /next/START.ELF Ikke fundet
    fejl: du skal først indlæse kernen

    Kan du hjælpe mig og googlede, men jeg kan ikke finde

  50.   Henry Avila sagde han

    Hvordan kan jeg få det til at vise beskeden HELLO WORLD? Jeg er begynder og ved stadig ikke nok

  51.   CARLOS GUERRERO ALVAREZ sagde han

    Følgende sker for mig:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -fritstående -lgcc
    / usr / bin / ld: kernel.o: omplacering R_X86_64_32 mod symbol `stack 'kan ikke bruges, når du laver et PIE-objekt; kompilere med -fPIE
    / usr / bin / ld: endelig link mislykkedes: ikke-repræsentativ sektion om output
    collect2: fejl: ld returnerede 1 exit-status