Linus Torvalds emuleren: maak uw eigen besturingssysteem helemaal opnieuw (I)

Merk allereerst op dat dit mijn eerste artikel is en dat ik hoop dat jullie het allemaal leuk vinden.

Linus Torvals blij

In deze serie gaan we emuleren Linus Torvalds, we gaan ons besturingssysteem aanmaken vanaf 0. In deze eerste aflevering gaan we de boot bekijken en zullen we een tekst uit onze kernel op het scherm zetten.

In mijn geval heet het besturingssysteem Volgende Duik. De eerste beslissing die we moeten nemen zodra we het besturingssysteem overwegen, is: wat wordt de bootloader?

Hier zijn er meerdere varianten, en we zouden er zelfs zelf een kunnen maken; maar in deze tutorial ga ik gebruiken GRUB, omdat de meesten min of meer iets over hem weten. We maken een map die de root van ons besturingssysteem zal zijn en daar maken we de map / boot / grub aan

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Daar maken we het bestand grub.cfg als volgt aan:

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

In dit bestand hebben we gezien hoe GRUB laadt onze kernel, in dit geval, in /next/START.ELF. Nu moeten we onze kernel maken.

Hiervoor hebben we de GCC y GAS (de samensteller van het project GNU, wordt meestal geleverd met de gcc). Dus we gaan de kernel maken.

Eerst maken we een bestand met de naam kernel.asm. Dit bestand bevat het startpunt van onze kernel en definieert ook de multiboot (een kenmerk van sommige bootloaders zoals GRUB). De inhoud van kernel.asm zal zijn:

.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

Alles met betrekking tot multiboot is simpelweg om de specificatie te volgen, niets meer. Alles zal starten in het begin, het zal multiboot_entry aanroepen, we hebben de multiboot-header in de eerste 4k gedefinieerd en we zullen het plaatsen (met movl).

Later noemen we NextKernel_Main, wat onze kernel C-functie is. In de loop stoppen we om de computer te stoppen. Dit compileert met:

as -o kernel.o -c kernel.asm

Nu gaan we programmeren invoeren in C. Je zult denken dat nu alles een fluitje van een cent is, we zetten een printf en hoofd- en dat is het, we hebben het gedaan.

Nou nee, sinds printf y hoofd- het zijn functies die worden gedefinieerd door het besturingssysteem, maar wij maken ze! We kunnen alleen de functies gebruiken die we zelf definiëren.

In latere hoofdstukken zal ik het hebben over hoe we onze eigen C-bibliotheek (glibc, bionic, newlibc) kunnen plaatsen, maar van tijd tot tijd. We hebben besproken dat we tekst op het scherm willen zetten, nou we zullen zien hoe we dat doen.

Er zijn twee opties, een is om het BIOS en een andere is om het schermgeheugen direct te beheren. We gaan het laatste doen omdat het duidelijker is vanaf C en het ons ook in staat stelt om het te doen wanneer we de beschermde modus openen.

We maken een bestand met de naam NextKernel_Main.c met de volgende inhoud:

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

Hiermee manipuleren we direct het geheugen VGA en karakter voor karakter schrijven we het. We compileren door de stdlib uit te schakelen:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Als je zover bent gekomen, wil je je gloednieuwe besturingssysteem nu proberen, maar we zijn nog niet klaar. We hebben een klein bestand nodig dat de compiler vertelt waar in het bestand elke sectie moet worden verlaten. Dit wordt gedaan met een linker script. We creëren 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 = .;
}

Hiermee definiëren we de positie van elke sectie en het startpunt, start, dat we hebben gedefinieerd in kernel.asm. Nu kunnen we al dit brouwsel verenigen:

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

Nu kopiëren we START.ELF naar / next in onze map die de root van ons besturingssysteem simuleert. We gaan met de console naar de hoofdmap van ons nieuwe besturingssysteem en controleren of er twee bestanden zijn: een /boot/grub/grub.cfg en een andere /next/START.ELF.

We gaan naar de bovenste map en bellen een ISO-aanmaakprogramma met de naam GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Zodra we dit hebben gedaan, hebben we een ISO. Deze ISO kan op computers worden geopend x86 (64 bits ook) en virtuele machines. Om het te testen, ga ik gebruiken QEMU. Wij bellen QEMU vanaf de opdrachtregel:

qemu-system-i386 nextdivel.iso

Zal beginnen ZeeBIOS en later zullen we hebben GRUB. Als later alles klopt, zullen we onze zin zien.
Je zult denken dat dit moeilijk is, ik antwoord je, ja dat is het.

Echt een besturingssysteem maken is moeilijk en dat dit hier niets nuttigs doet. In toekomstige hoofdstukken zullen we zien hoe om te gaan met kleuren op het scherm, geheugen te reserveren en, indien mogelijk, gegevens van het toetsenbord te krijgen.

Als iemand hier niet alles wil kopiëren, heb ik een repository op GitHub (uitgebreider) met het besturingssysteem Volgende Duik. Als je wilt compileren Volgende Duik je hoeft alleen git en cmake te hebben:

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

Ik moedig je aan om samen te werken aan NextDivel als je de tijd en de wens hebt om een ​​besturingssysteem te maken. Misschien zelfs superieur aan Linux ... de tijd zal het leren.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.

  1.   levendig zei

    :O

    1.    marianogaudix zei

      Torvalds bracht het Minix-besturingssysteem (afgeleid van UNIX) naar Andrew S. Tanenbaum en verbeterde het.

      Tanenbaum heeft ruzie gehad met Linus, ze hebben elkaar beledigd. Tanenbaum zegt dat de Microkernel de toekomst is (HURD, Minix nieuwe kegel Microkernel).

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

  2.   eliotime3000 zei

    Dit is de beste post die ik tot nu toe op deze blog heb gezien. Ik wil al weten wat ik nog meer moet doen.

  3.   Carlos Gude zei

    Wees onder de indruk

  4.   axl zei

    Erg indrukwekkend!!

  5.   rhoclinux zei

    FUUUUUUUU!
    Het is de meest geekiest post die ik ooit heb gezien hehe. Gefeliciteerd Adrian, een hoerartikel! hyper interessant !!! 🙂

    1.    Joaquin zei

      Ik ben het eens. Ik stel me deze situatie voor:
      GNU / Linux Power User (met een blij gezicht):
      "Ik weet al hoe ik mijn Gentoo moet samenstellen"

      Nerd (met een minachtende houding): «pff, ik heb mijn eigen distro ...»

      1.    desicoder zei

        Ja, ik kan mijn eigen Linux-distro maken. In feite ontwikkel ik daarin een initramfs en een kernel voor embedded linux. Het is niet hetzelfde om een ​​besturingssysteem te maken als een linux-distro. De eerste is veel moeilijker, bijna onmogelijk, de tweede kan, zoals je al zei, van alles zijn, zelfs Ubuntu met het logo veranderd xD. Dus ik zou het zo laten:

        GNU / Linux Power User (met een blij gezicht)
        - Ik weet al hoe ik mijn Gentoo moet samenstellen

        Semi-nerd
        - Pff, ik heb een linux vanaf nul gevolgd en ik heb mijn eigen distro gemaakt

        Nerd (met minachtende houding)
        - pff, omdat ik een kernel in assembler en in C heb geprogrammeerd

        Saludos!

  6.   cronos zei

    Dit is interessant voor mij, in afwachting van de volgende hoofdstukken.

  7.   abimaelmartell zei

    Ik zag deze tutorial enige tijd geleden, het is voor C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet zei

      Bedankt voor de link, ik zal er eens naar kijken.

  8.   Jose Jácome zei

    Ik wil een besturingssysteem dat 100% compatibel is met AMD-graphics: /

    1.    ivanlinux zei

      Dakramen en raamkozijnen

      1.    Jose Jácome zei

        hahaha in Windows Catalyst heeft geen OpenGL-ondersteuning, hoewel ik in Linux niet alle grafische kracht kan gebruiken, blijf ik wachten om te zien wat er gebeurt!

        1.    beny_hm zei

          wacht gewoon tot de klep de markt wegvaagt

  9.   KZKG ^ Gaara zei

    Magische, perfecte, uitstekende bijdrage, het ziet eruit als een geweldige reeks berichten 🙂

  10.   O_Pixote_O zei

    Buah, ik zou graag willen weten hoe ik moet programmeren om je te helpen, gewoon als een manier om te oefenen met de kennis die je aan het leren bent, en dat helpt. Voor nu laat ik je het motto achter om de aandacht te vestigen op het project zodra je het af hebt "Gebruik NextDivel, porno ziet er hetzelfde (of beter) uit.", Je zult xD vegen.

  11.   deze naam is onjuist zei

    Mooooooolaaa !!!!

  12.   Nordri zei

    Zeer goed artikel, maar gewoon nieuwsgierig waarom je het Linux From Scratch-project niet hebt gevolgd?

    groeten

    1.    AdrianArroyoStreet zei

      Nou, Linux from Scratch is prima, en je kunt zien dat het van jou is, maar het is echt heel mechanisch:
      -Download lettertypen
      -Patch ze
      -Compileren
      -Installeren
      -In aansluiting op
      Hier kun je, zelfs als het resultaat uiteindelijk slechter is, zeggen dat je alle bestanden hebt bekeken.

    2.    desicoder zei

      Zoals duidelijk is uit mijn vorige opmerking, omdat het niet hetzelfde niveau van complexiteit heeft. Bovendien is linux vanaf het begin niet echt, in tegenstelling tot zijn naam, het creëren van een systeem vanaf het begin. Een systeem vanaf het begin maken is het zelf programmeren, je eigen kernel schrijven, niet de linux-kernel, indien mogelijk zelfs je eigen bootloader in plaats van grub, lilo, syslinux, enz. Hoewel een LFS geen sinecure is en behoorlijk complex is, komt het niet eens in de buurt van het programmeren van je eigen kernel ...

      Bovendien ben ik het met AdrianArroyo Calle eens dat het te mechanisch is, ik heb het een keer gelezen en je geeft het op op de zesde pagina, ze vertellen je ook welke versies van de pakketten te gebruiken omdat anders de instructies niet werken (dat toont het gebrek aan flexibiliteit , Volgens mij ). Ik denk dat het beter is om iets van je eigen idee te hebben, de pakketten te compileren die je wilt, zelfs wat te programmeren, een linux-kernel te compileren en in alle rust.

      Saludos!

  13.   koekje zei

    uuuoooohh !! Ik heb nog nooit een bericht zo vaak vastgelegd als deze.
    Ga verder 😀

  14.   linux_gebruiker zei

    Ik weet niet wat er mis is:

    fout: geen multiboot-header gevonden.
    fout moet je eerst de kernel laden

    1.    AdrianArroyoStreet zei

      Als het enige troost is, ik heb dezelfde fout gemaakt. Probeer de bronnen te gebruiken die in GitHub staan, daar is de fout al opgelost. Hoe dan ook, ik denk dat als je de regel grub.cfg verandert van "multiboot /next/START.ELF" naar "kernel /next/START.ELF", het zou kunnen werken. Ik weet het niet precies.

      1.    mcbanana zei

        Allereerst prachtige entree 🙂
        Ik heb hetzelfde probleem met het laden van de kernel vanuit grub. Zelfs GitHub-bronnen gebruiken of multiboot voor kernel wijzigen ...

        fout: geen multiboot-header gevonden.
        fout: geen geladen kernel

        1.    AdrianArroyoStreet zei

          Gebruik je clang als compiler? Verander het voor de gcc
          Herinner je je eraan om het linker-script te gebruiken? Het is nodig zodat de linker (in ons geval ld) weet waar hij alles in het bestand gaat plaatsen. In dit geval moet de multiboot-header aan het begin staan.
          Gebruikt u het CMake-systeem? Als je het gebruikt, denk ik dat het niet faalt.
          Als het voor jou niet werkt, zal ik proberen een andere oplossing te vinden.

  15.   Khourt zei

    [+100]
    Gewoon geweldig !!!

  16.   invisible15 zei

    Het is echt gaaf 🙂

  17.   tanrax zei

    Ik neem mijn hoed af. Indrukwekkend bericht. Gefeliciteerd.

  18.   man zei

    Whaha!
    Het zou geweldig zijn als je applicaties gemaakt in HTML5 en Javascript zou kunnen openen zonder een browser te gebruiken, kan dat?
    Ik heb het erover dat ze als native applicaties zijn.
    Het zou dus gemakkelijk te programmeren zijn voor dit besturingssysteem 😀

    1.    AdrianArroyoStreet zei

      In dit geval ga ik het niet doen omdat er veel meer werk achter nodig is, maar er is een besturingssysteem genaamd "is" dat doet wat je zegt. In feite is de opdrachtregel JavaScript en worden vensters getekend met JavaScript Canvas-functies. Nintendo-ingenieurs hebben het gedaan en nu is het open source.

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

      1.    man zei

        Valla, bedankt voor de info 😀
        ik zal kijken

  19.   patodx zei

    Wie zijn eigen OS kan maken, kan vreedzaam sterven, aangezien hij het intellectuele niveau ermee moet bereiken; Het zorgt ervoor dat je de hemel of de hel achterwege laat.
    Stukje posten.

    1.    Miguel zei

      tot dusverre heeft niemand bekend dat het alleen iets heeft gemaakt waarvan kan worden gezegd dat het een fatsoenlijk besturingssysteem is dat helemaal opnieuw is gemaakt, zelfs niet Linux Torvalds zoals je in het begin zei, aangezien dit begon met Unix-bronnen en al het andere is geschreven gemeenschappelijk voor meer dan één persoon, het leven is erg kort en helemaal opnieuw beginnen is voor niemand ondenkbaar, zelfs als het tegenovergestelde gewenst is, is het aantoonbaar in veel fouten die gemaakt zijn bij het kopiëren en plakken door Linux Torvalds

      1.    skarmiglione zei

        De unix-bronnen zijn gesloten, het gebruik van minix ... dat is iets anders.

      2.    Felipe Robina zei

        en degenen die QDOS hebben gemaakt, wat?
        waren ergens op gebaseerd?

  20.   Tesla zei

    Van wat ik zie, wie geen eigen besturingssysteem heeft, is omdat ze dat niet willen, hahahaha.

    Nu serieus, heel interessant! Veel gaat mijn beperkte programmeerkennis te boven, maar ik zal de andere delen van deze serie met verwachting lezen.

    Bedankt voor de post!

  21.   Manuel R. zei

    Je liet me achter met een O_O gezicht ... zonder de bedoeling de bijdragen van iemand te onderschatten, het is de meest "pro" die ik de laatste tijd heb gezien. Vriendelijke groeten.

  22.   aitor_cz zei

    Heel goed artikel, Adrián. Ga door, alsjeblieft…

  23.   mj zei

    Maak je een grapje op April Fools Day?, Doe niet zo gemeen "Linus Torvalds emuleren: maak je eigen besturingssysteem vanaf nul". Ik denk niet dat het moeilijk is voor degenen die een carrière nastreven in een of andere technische instelling of universiteit; maar voor mij ben ik een beginnende boogschutter (er zijn er die "Noob" zeggen, maar ik beschouw mezelf als een beetje lui als newbie) dat klinkt alsof ik niet aan land sta. Hoe dan ook, DIT ARTIKEL CREËERT VEEL NIEUWSGIERIGHEID EN ZONDER TWIJFEL BEWIJS EN RESPECT VOOR ZIJN UITGEVER, GEFELICITEERD; Het eerste dat ik zal doen, is proberen in ieder geval een beetje van dit waardevolle materiaal te begrijpen.
    BEDANKT Adrian Arroyo Calle, uitstekend werk en nobele levering van kennis.

  24.   Blaire pascal zei

    LEL Uitstekend bericht, ga zo door.

  25.   f3niX zei

    Wat een leuk bericht, dit heb ik gemist desde linux. Prachtig.

  26.   Ruby zei

    Geweldig bericht, heel erg bedankt.
    Ik heb niet begrepen wat het link.ld-bestand doet, kan iemand het mij uitleggen?

    1.    AdrianArroyoStreet zei

      Het link.ld-bestand vertelt de linker (in dit geval ld) waar elk deel van de code in het resulterende bestand moet staan. We definiëren ook het startpunt, aangezien we geen besturingssysteem hebben en we main niet als een normaal programma kunnen gebruiken, in dit geval selecteren we de startfunctie.

  27.   Maxi zei

    Geweldig al je post! Wachten op de 7! Wat als ik twijfel heb, bijvoorbeeld als ik alleen een algoritme wil draaien, zonder OS, hoe weet ik dan wat ik wel en wat niet kan gebruiken C?

    1.    AdrianArroyoStreet zei

      Als je het op deze manier gebruikt, kun je niets van stdlib gebruiken, wat praktisch iedereen gebruikt (geen malloc, gratis, printf, scanf, strcmp, enz.). Alles moet rechtstreeks vanuit het geheugen of ASM worden geïmplementeerd. Misschien zal ik u in een hoger hoofdstuk laten zien hoe u een C-bibliotheek voor het besturingssysteem installeert. Als je C ++ gebruikt, kun je geen uitzonderingen gebruiken en de nieuwe en delete-operators (en zeker meer).

    2.    Wisselaar zei

      Denk ik ESTO het kan u een beter idee geven van hoe u het moet doen.

  28.   Esteban zei

    Hallo, ongeveer 5 jaar geleden volgde ik een soortgelijke publicatie en ontwikkelde ik een microkernel die op dezelfde manier begint, enkele aspecten heeft om te verbeteren, maar het kan je interesseren, het werkt in beschermde modus, voert multi-tasking uit en voert geheugenvirtualisatie uit, de laatste tijd heb ik eraan gewerkt disk driver en cd drive om het installeerbaar te maken en niet alleen op live cd te draaien ... Gegroet.

  29.   Johan zei

    Beste, ik heb een fout bij het uitvoeren van de opdracht:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -fvrijstaand -lgcc

    link.ld: 5 syntaxisfout
    collect2: error: ld heeft 1 exit-status geretourneerd

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

    In regel 5 zie ik de fout niet, doet iemand hetzelfde?

    Ik werk met een gevirtualiseerde Debian-piep in virtualbox

    1.    Tijdelijke afbeelding voor Julian Reyes Escrigas zei

      voeg de ";" aan het einde van * (. multiboot_header)

  30.   Eric Orellana Romero zei

    Uitstekend initiatief, ik zal zeker de hoofdstukken van dit bericht volgen, met de bedoeling er veel van te leren. Heel erg bedankt dat je de tijd hebt genomen om ons les te geven. Een enkel detail in dit verband, er moet worden opgemerkt dat Linus Torvalds niet de maker is van een besturingssysteem, hij heeft de kernel van het GNU / Linux-systeem gemaakt (het systeem dat in andere besturingssystemen is gebruikt), wat nog steeds de moeite waard is, maar het is Het is belangrijk Richard Stallman te noemen voor het maken van het grootste deel van het besturingssysteem.

    Heel erg bedankt voor de input en ik hoop dat je mijn observatie in overweging neemt.

  31.   Tijdelijke afbeelding voor Julian Reyes Escrigas zei

    Ik rommelde al een tijdje met het onderwerp, ik raakte geïnteresseerd zodra ik de kop las. maar de boodschap blijft maar komen

    fout: geen multiboot-header gevonden.
    fout moet je eerst de kernel laden

    Ik heb geüpload wat ik meeneem naar een opslagplaats op github https://github.com/rkmax/GenyOS

    1.    Martin Villalba zei

      Hetzelfde gebeurt met mij: heb je de oplossing gevonden?

  32.   Carlos zei

    een vraag die ik begon met het introduceren van de syntaxis en de menu-invoerregel vertelt me ​​commando niet gevonden wie me zou kunnen vertellen waarom
    dit is wat ik doe

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: commando niet gevonden

    1.    AdrianArroyoStreet zei

      De inhoud van deze inhoud moet niet worden ingevoerd in de opdrachtregel, maar in het bestand dat u maakt met de naam grub.cfg

  33.   Nodetin zei

    Uitstekend artikel, bedankt!

  34.   David zei

    Spectaculair… !! het is net als de ontbrekende schakel.

  35.   r.garciag zei

    Ik ben dol op je tutorials over Emuleren van LInus Torvalds, maar er is een stap die ik niet begrijp, de volgende:
    Nu kopiëren we START.ELF naar / next in onze map die de root van ons besturingssysteem simuleert. We gaan met de console naar de hoofdmap van ons nieuwe besturingssysteem en controleren of er twee bestanden zijn: een /boot/grub/grub.cfg en een andere /next/START.ELF.

    We gaan naar de bovenste map en bellen een ISO-aanmaakprogramma met GRUB genaamd grub-mkrescue

    Kan iemand het mij uitleggen: p

    1.    AdrianArroyoStreet zei

      Om eenvoudig een minimum ISO te genereren die GRUB kan laden, kopiëren we de kernel naar (de / van de ISO, elke map) /next/START.ELF en het GRUB-configuratiebestand naar (de / van de ISO, elke map) / boot /grub/grub.cfg. Zodra dat is gebeurd, hebben we GRUB nog niet op de ISO geïnstalleerd en is er een hulpprogramma dat de ISO genereert vanuit een map en GRUB installeert genaamd grub-mkrescue. Dan zouden we uiteindelijk eindigen met een opstartbare ISO waarop GRUB is geïnstalleerd, die de configuratie kan lezen om later START.ELF correct uit te voeren. Ik weet niet of ik het mezelf heb uitgelegd, maar wat we doen is een soort vals bestandssysteem waarmee we een ISO genereren.

  36.   Miguel Jose Guevara Atencio zei

    Terrific

  37.   Michael Moreno zei

    Nou, kijk niet zozeer naar een nieuw systeem, maar als je linux verbetert, bijvoorbeeld door een linux exonucleus te maken met een servercomponent die indien gewenst als een microkernel fungeert, dat wil zeggen een exo-structuur met micronucleusgedrag dat super en linux zou zijn.

    Het andere ding is dat ik geen expert ben in programmeren, slechts een paar goedkope c ++ en wat java, het zou voor mij voldoende zijn om het linux-kernelprogramma een module te geven, het te verwijderen, het aan te passen, enz.

  38.   WinterSoldaat 53 zei

    Zonder twijfel moet ik het al doen op vakantie.

  39.   Fermin zei

    Deze goede en in welk programma ontwerpt en codeert hij deze?
    geef me alsjeblieft dat antwoord

  40.   Duistere geest zei

    Bij het compileren vanuit je git krijg ik:

    [jmponce @ jar build] $ cmake ..
    - Aanmaken van een NextRoot-directory
    - Genereren van ISO-script
    make DESTDIR = volgende installatie
    ./iso.sch
    - Gevonden Doxygen: / usr / bin / doxygen (gevonden versie "1.8.9")
    - Configureren gedaan
    - Genereren klaar
    - Build-bestanden zijn geschreven naar: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Scannen van afhankelijkheden van doel START.ELF
    [7%] ASM-ATT-object src / CMakeFiles / START.ELF.dir / start / boot.asm.o bouwen
    [14%] CXX-object src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o bouwen
    [21%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o bouwen
    [28%] CXX-object src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o bouwen
    [35%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o bouwen
    [42%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o bouwen
    [50%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o bouwen
    [57%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o bouwen
    [64%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o bouwen
    [71%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o bouwen
    [78%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o bouwen
    [85%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o bouwen
    [92%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o bouwen
    [100%] CXX-object src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o bouwen
    Koppeling CXX uitvoerbaar START.ELF
    / usr / bin / ld: Incompatibel /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a wordt overgeslagen tijdens het zoeken naar -lgcc
    / usr / bin / ld: kan -lgcc niet vinden
    collect2: error: ld retourneerde exitstatus 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: mislukte instructies voor doel 'src / START.ELF'
    make [2]: *** [src / START.ELF] Fout 1
    CMakeFiles / Makefile2: 106: mislukte instructies voor doel 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Fout 2
    Makefile: 117: mislukking in instructies voor doel 'alles'
    make: *** [all] Fout 2

    1.    AdrianArroyoStreet zei

      De fout lijkt te zijn dat het llibgcc niet kan vinden aangezien je de 64-bits versie hebt en momenteel wordt het compilatiesysteem gedwongen 32-bits te gebruiken. U moet een compatibiliteitspakket op uw distro installeren of beter, een 32-bits systeem gebruiken.

      1.    Ronaldo Rodríguez zei

        Ik heb 32 bits en dezelfde fout verschijnt, bedoel je het besturingssysteem of de architectuur? de mijne is 64 bit, maar ik gebruik 32 bit Ubuntu, vraag het niet, financiële problemen, daarmee zeg ik het allemaal.

  41.   Jorge zei

    Uitstekend onderwerp, wachtend op meer reikwijdte. Proost

  42.   Jhon zei

    Geweldig, ik hoop op meer

  43.   Soid Perez zei

    Hallo, ik ben een jonge ambassadeur die een besturingssysteem wil creëren dat alle programma's en platforms ondersteunt, zodat ontwikkelaars geen krachtige machines of applicaties of programma's op een pc hoeven te hebben.
    Daarom ben ik geïnteresseerd in dit bericht, maar wanneer ik je git download of probeer het te maken, gaat alles goed totdat ik het commando ./iso.sh of grub-mkrescue -o nextdivel.iso nextroot uitvoer, krijg je deze fout

    "Grub-mkrescue: waarschuwing: Uw xorriso ondersteunt" –grub2-boot-info "niet. Sommige functies zijn uitgeschakeld. Gebruik xorriso 1.2.9 of hoger.
    grub-mkrescue: waarschuwing: Uw xorriso ondersteunt "–grub2-boot-info" niet. Uw kernelimage is te groot. Schijf opstarten is uitgeschakeld. Gebruik xorriso 1.2.9 of hoger .. »
    Ik heb echt geen idee, want ik weet veel over applicaties en webs, maar ik weet niets van grub

    1.    AdrianArroyoStreet zei

      Mogelijk moet u het xorriso-programma op uw distro bijwerken. Welke distro en versie gebruik je?

      1.    Soid perez zei

        Ik gebruik xubuntu 14.04lts en probeer xorriso uit te voeren, maar de shell vertelt me ​​dat het het niet kan vinden en ik krijg apt-get install xorriso, hoewel ik oprecht een reactie verwachtte omdat ik een slechte ervaring had met het installeren van dingen die ik niet ken in linux hehe. Ik zal het nu updaten en je vertellen wat er is gebeurd

      2.    AdrianArroyoStreet zei

        Installeer vervolgens xorriso vanuit het softwarecentrum of doe gewoon vanaf de terminal "sudo apt-get install xorriso"

      3.    Soid perez zei

        Ik heb al alles gedaan wat je me vertelde en met zowel git als de mijne krijg ik deze xorriso 1.3.2: RockRidge-bestandssysteemmanipulator, libburnia-project.

        Drive huidige: -outdev 'stdio: nextdivel.iso'
        Media stroom: stdio-bestand, overschrijfbaar
        Mediastatus: is leeg
        Media samenvatting: 0 sessies, 0 datablokken, 0 data, 1901m vrij
        Toegevoegd aan ISO-image: directory '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 bestanden toegevoegd in 1 seconde
        xorriso: FAILURE: Kan attributen van bronbestand '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot' niet bepalen: bestand of directory bestaat niet
        xorriso: UPDATE: 546 bestanden toegevoegd in 1 seconde
        xorriso: aborting: -abort_on 'FAILURE' heeft 'FAILURE' aangetroffen
        en corduroy Ik begrijp niet dat mijn structuur /nextroot/boot/grub/grub.cfg en nextroot / next / START.ELF is

      4.    Soid perez zei

        Bedankt, ik ben klaar om verder te gaan, een vriend hielp me en vertelde me dat wat ik verkeerd deed de organisatie van de directory was, dus ik heb het opgelost en dat is alles.

      5.    erik zei

        Pardon, kunt u me vertellen welke procedure u hebt uitgevoerd, aangezien ik de foutmelding niets om op te starten krijg: niet zo'n bestand of map

        geen opstartbaar apparaat.

  44.   jose zei

    Proost! Ik wilde je om een ​​gunst vragen als je me een e-mail zou kunnen sturen met wat je hier uitlegt, ik ben een beetje in de war geraakt en ik moet wat ik heb vergelijken met wat je uitlegt, misschien is wat mij niet duidelijk is of het ontstaan ​​van de rups. cfg wordt gedaan in de terminal gcc of waar precies? heel erg bedankt vriend!

    1.    AdrianArroyoStreet zei

      U maakt het bestand grub.cfg met een willekeurige teksteditor en u moet het opslaan in PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano zei

    Hallo Adrian, allereerst gefeliciteerd en bedankt voor je bijdrage.

    Je weet dat ik dit voor een praktijk doe en ik ben het na je studie gaan samenstellen, maar nadat ik was begonnen, vond ik de eerste fout

    $ als -o kernel.o -c kernel.asm
    bash: as: commando niet gevonden ...
    Vergelijkbare commando's zijn:
    'sa'
    'ac'

    Ik werk aan fedora 20, en ik kan in dit opzicht geen oplossing vinden, ik zou je advies op prijs stellen over of ik iets in gcc of gas moet veranderen

    dank bij voorbaat

    1.    AdrianArroyoStreet zei

      U moet GAS installeren zodat ik de foutcode kan zien. Ik heb Fedora niet bij de hand, maar in theorie, als je gcc-c ++ installeert, installeer je de hele GCC-suite en GNU zoals gewoonlijk wordt meegeleverd.

  46.   Gaston Ramirez zei

    Ik ben bij je, ik weet iets over C ++, C # (hoewel deze laatste niet erg nuttig is in deze kwestie) het slechte is dat ik nog steeds geen ervaring heb, ik behandel nooit C-taal, je publicatie is geweldig, ik heb niet veel te zeggen, als ik tijd heb, zie ik. Dank je.

  47.   Teresita del jezus nah sanchez zei

    Heel erg bedankt voor de geweldige hulp….

  48.   JKY zei

    Ik hou van linux, het is de beste wijk die er is, de waarheid voor mijn windows is rotzooi tot een dat ik weet dat de maker van linux de maker van windows is

  49.   Rode zei

    Hallo, ik krijg een foutmelding in grub zegt
    fout: bestand /next/START.ELF Niet gevonden
    fout: je moet eerst de kernel laden

    Kun je me helpen en googlen maar ik kan het niet vinden

  50.   Henry Avila zei

    Alsjeblieft, hoe kan ik ervoor zorgen dat de boodschap HALLO WORLD wordt weergegeven? Ik ben een beginner en ik weet nog steeds niet genoeg

  51.   CARLOS GUERRERO ALVAREZ zei

    Het volgende overkomt mij:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -fvrijstaand -lgcc
    / usr / bin / ld: kernel.o: verplaatsing R_X86_64_32 tegen symbool `stack 'kan niet worden gebruikt bij het maken van een PIE-object; hercompileren met -fPIE
    / usr / bin / ld: laatste link mislukt: niet-representatieve sectie over uitvoer
    collect2: error: ld heeft 1 exit-status geretourneerd