Linus Torvalds utánzása: Készítse el saját operációs rendszerét a semmiből (I)

Először is kommentáld, hogy ez az első cikkem, és remélem, hogy mindannyian kedvelni fogjátok.

Linus Torvals boldog

Ebben a sorozatban fogunk utánozni Linus Torvalds, 0-tól fogjuk létrehozni az operációs rendszerünket. Ebben az első epizódban megnézzük a rendszerindítást, és egy szöveget teszünk fel a képernyőre a kernelünkből.

Nálam az operációs rendszert hívják NextDivel. Az első döntés, amelyet meg kell hoznunk, amint megfontoljuk az operációs rendszert, mi lesz a bootloader?

Itt többféle változat létezik, és akár magunk is létrehozhatnánk egyet; azonban ebben az oktatóanyagban használni fogom GRUB, mert a többség többé-kevésbé tud róla valamit. Létrehozunk egy mappát, amely az operációs rendszerünk gyökere lesz, és ott létrehozzuk a / boot / grub mappát

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Itt hozzuk létre a grub.cfg fájlt az alábbiak szerint:

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

Ebben a fájlban láttuk, hogyan GRUB a kernelünket ebben az esetben a /next/START.ELF fájlba tölti be. Most létre kell hoznunk a kernelünket.

Ehhez szükségünk lesz a GCC y GAS (a projekt összeállítója GNÚ, általában a gcc-vel jár). Tehát létrehozni fogjuk a kernelt.

Először készítünk egy kernel.asm nevű fájlt. Ez a fájl tartalmazza a kernelünk kiindulási pontját, és meghatározza a multibootot is (néhány bootloader egyik jellemzője, például GRUB). A kernel.asm tartalma a következő lesz:

.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

Minden, ami a multiboot-hoz kapcsolódik, egyszerűen csak a specifikáció követése. Minden elölről indul, multiboot_entry-t fog hívni, az első 4k-ban definiáltuk a multiboot fejlécet és feltesszük (movl-lel).

Később a NextKernel_Main nevet kapjuk, amely a kernel C függvényünk. A hurokban leállítjuk a számítógép leállítását. Ez összeállítja:

as -o kernel.o -c kernel.asm

Most belépünk a programozásba C-ben. Azt fogja gondolni, hogy most minden egy darab sütemény, beleteszünk egy printf en fő- és ennyi, megtettük.

Hát nem, azóta printf y fő- ezek olyan funkciók, amelyeket az operációs rendszer határoz meg, de mi létrehozzuk őket! Csak azokat a függvényeket használhatjuk, amelyeket magunk határozunk meg.

A későbbi fejezetekben arról fogok beszélni, hogyan lehet saját C könyvtárunkat (glibc, bionikus, newlibc) elhelyezni, de időről időre. Megbeszéltük, hogy szöveget akarunk felvenni a képernyőre, és meglátjuk, hogyan csináljuk.

Két lehetőség van, az egyik a BIOS a másik pedig a képernyő memóriájának közvetlen kezelése. Ez utóbbit fogjuk megtenni, mert ez egyértelműbb a C-től, és ez lehetővé teszi számunkra is, hogy amikor védett módba lépünk.

Létrehozunk egy NextKernel_Main.c nevű fájlt a következő tartalommal:

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

Ezzel közvetlenül manipuláljuk a memóriát VGA és karakterenként írjuk. Az stdlib letiltásával állítjuk össze:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Ha eddig elérted, akkor most kipróbálhatod a vadonatúj operációs rendszeredet, de még nem készült el. Szükségünk van egy kis fájlra, amely megmondja a fordítónak, hogy a fájl hol hagyja el az egyes szakaszokat. Ez egy linker szkript segítségével történik. Létrehozunk 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 = .;
}

Ezzel meghatározzuk az egyes szakaszok helyzetét és a belépési pontot (start), amelyet a kernel.asm fájlban definiáltunk. Most egyesíthetjük ezt a főzetet:

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

Most átmásoljuk a START.ELF fájlt a következő könyvtárba, amely az operációs rendszer gyökerét szimulálja. A konzollal megyünk új operációs rendszerünk gyökérmappájába, és ellenőrizzük, hogy van-e két fájl: egy /boot/grub/grub.cfg és egy másik /next/START.ELF.

Menjünk a felső könyvtárba, és meghívunk egy ISO létrehozó segédprogramot, amelynek GRUB-ja van grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Ha ezt megtettük, akkor a ISO. Ez az ISO számítógépeken megnyitható x86 (64 bit is) és virtuális gépek. A teszteléshez használni fogom QEMU. Hívjuk QEMU a parancssorból:

qemu-system-i386 nextdivel.iso

Kezdődni fog SeaBIOS és később meglesz GRUB. Később, ha minden helyes, látni fogjuk a kifejezésünket.
Azt gondolja, hogy ez nehéz, válaszolok, igen.

Az operációs rendszer valóban nehéz létrehozni, és ez itt nem tesz semmi hasznosat. A következő fejezetekben megtudhatjuk, hogyan kell kezelni a színeket a képernyőn, lefoglalni a memóriát, és ha tudok, hogyan lehet adatokat szerezni a billentyűzetről.

Ha valaki nem akar mindent ide másolni, van egy tárhelyem a címen GitHub (részletesebben) az operációs rendszerrel NextDivel. Ha össze akarsz állítani NextDivel csak git és cmake kell:

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

Arra bátorítalak, hogy működjön együtt a NextDivel, ha van ideje és vágya operációs rendszer létrehozására. Talán még felülmúlja a Linuxot ... az idő megmondja.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   élénk dijo

    :O

    1.    marianogaudix dijo

      Torvalds elvitte a Minix (UNIX-ból származó) operációs rendszert Andrew S. Tanenbaumhoz, és továbbfejlesztette.

      Tanenbaum összeveszett Linusszal, sértegették egymást. Tanenbaum szerint a mikrokernel a jövő (HURD, Minix új kúpú mikrokernel).

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

  2.   eliotime3000 dijo

    Ez volt a legjobb bejegyzés, amit eddig láttam ezen a blogon. Már tudni akarom, mit tegyek.

  3.   Carlos Gude dijo

    Legyen lenyűgözve

  4.   fejsze dijo

    Tényleg lenyűgöző !!

  5.   rhoconlinux dijo

    FUUUUUUUUA!
    Ez a geekiest poszt, amit valaha láttam hehe. Gratulálunk Adriánnak, egy kurvacikk! hiper érdekes !!! 🙂

    1.    Joaquin dijo

      Egyetértek. Elképzelem ezt a helyzetet:
      GNU / Linux Power User (boldog arccal):
      "Már tudom, hogyan állítsam össze a Gentoo -imat"

      Nerd (megvetően): «pff, létrehoztam a saját disztribúciómat ...»

      1.    desikoder dijo

        Igen, létrehozhatom saját linux disztróm. Valójában egy initramfs-t és egy kernelt fejlesztek a beágyazott linux számára. Nem ugyanaz az operációs rendszer létrehozása, mint a linux disztribúció. Az első sokkal nehezebb, szinte lehetetlen, a második, mint mondtad, bármi lehet, még az xD logóval ellátott Ubuntu is. Tehát így hagynám:

        GNU / Linux Power User (boldog arccal)
        - Már tudom, hogyan állítsam össze a Gentoo -imat

        Félig Nerd
        - Pff, a semmiből követtem egy linuxot, és elkészítettem saját disztrót

        Nerd (megvető hozzáállással)
        - pff, mert egy kernelt programoztam az assemblerben és a C-ben

        Saludos!

  6.   Cronos dijo

    Ez érdekes számomra a következő fejezetekig.

  7.   abimaelmartell dijo

    Valamikor láttam ezt az oktatóanyagot, a C ++ - hoz készült
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Köszönöm a linket, megnézem.

  8.   Jose Jácome dijo

    Szeretnék 100% -osan kompatibilis operációs rendszert az AMD grafikával: /

    1.    ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        hahaha a Windows Catalyst-ban nem rendelkezik OpenGL támogatással, bár Linux alatt nem tudom felhasználni az összes grafikus erőt, tovább várok, hogy mi történjen!

        1.    beny_hm dijo

          csak várja meg, amíg a szelep kiirtja a piacot

  9.   KZKG ^ Gaara dijo

    Varázslatos, tökéletes, kiváló közreműködés, remek bejegyzéssorozatnak tűnik 🙂

  10.   O_Pixote_O dijo

    Buah Szeretném tudni, hogyan kell programozni, hogy segítsek neked, egyszerűen gyakorlás módjaként azzal a tudattal, hogy tanulsz, és az egyik segít. Most hagyom neked a mottót, hogy felhívd a figyelmet a projektre, miután befejezted "Használd a NextDivel, a pornó ugyanúgy (vagy jobban néz ki)."

  11.   ez a név hamis dijo

    Mooooooolaaa !!!!

  12.   nordi dijo

    Nagyon jó cikk, de csak kíváncsi, miért nem követte a Linux From Scratch projektet?

    Üdvözlet

    1.    AdrianArroyoStreet dijo

      Nos, a Scratch Linux-ja rendben van, és elmondhatja, hogy a tiéd, de valójában nagyon mechanikus:
      -Töltse le a betűtípusokat
      -Patch őket
      -Összed össze
      -Telepítés
      -Következő
      Még akkor is, ha az eredmény végül rosszabb, azt mondhatja, hogy áttekintette az összes fájlt.

    2.    desikoder dijo

      Ahogy az előző megjegyzésemből is kiderül, mert ennek nincs ugyanolyan összetettsége. Továbbá, a linux a semmiből valójában nem a nevével ellentétben a rendszer létrehozása a semmiből. A rendszer nulláról történő létrehozása maga a programozás, a saját kernel írása, nem a linux kernel, ha lehetséges, még a saját bootloader is a grub helyett, lilo, syslinux stb. Bár egy LFS nem kis teljesítmény és meglehetősen összetett, még csak közel sem áll a saját kernel programozásához ...

      Ezen túlmenően egyetértek AdrianArroyo Calle-val abban, hogy túl mechanikus, olvastam valamikor, és végül a hatodik oldalon adod fel, azt is mondják, hogy a csomagok mely verzióit használd, mert különben az utasítások nem működnek (ez a rugalmasság hiányát mutatja, véleményem szerint). Szerintem jobb, ha van saját ötletünk, lefordítjuk a kívánt csomagokat, sőt programozunk is néhányat, lefordítunk egy linuxos kernelt és békében.

      Saludos!

  13.   aprósütemény dijo

    uuuoooohh !! Még soha nem készítettem annyi bejegyzést, mint ez.
    Kérjük, folytassa 😀

  14.   linux_user dijo

    Nem tudom mi a baj:

    hiba: nem található multiboot fejléc.
    hiba, először be kell töltenie a kernelt

    1.    AdrianArroyoStreet dijo

      Ha ez vigasztal, ugyanezt a hibát követtem el. Próbálja meg használni a GitHubban található forrásokat, ott a hiba már megoldódott. Egyébként úgy gondolom, hogy ha megváltoztatja a grub.cfg sort "multiboot /next/START.ELF" -ről "kernel /next/START.ELF" -re, akkor működhet. Nem tudom pontosan.

      1.    mcbanana dijo

        Először is csodálatos bejárat 🙂
        Ugyanez a probléma a kernel grub-ból történő betöltésével. Még a GitHub források használata vagy a multiboot módosítása a kernel számára ...

        hiba: nem található multiboot fejléc.
        hiba: nincs betöltve a kernel

        1.    AdrianArroyoStreet dijo

          A clang-ot fordítónak használja? Változtassa meg a gcc-vel
          Emlékeztek már a linker szkript használatára? Szükséges, hogy a linker (esetünkben ld) tudja, hogy az egyes fájlok hova kerülnek a fájlban. Ebben az esetben a multiboot fejlécnek az elején kell lennie.
          A CMake rendszert használja? Ha használod, azt hiszem, nem fog kudarcot vallani.
          Ha ez nem megy neked, megpróbálok más megoldást találni.

  15.   khourt dijo

    [+100]
    Szuper !!!

  16.   invisible15 dijo

    Nagyon klassz 🙂

  17.   tanrax dijo

    Leveszem a kalapomat. Lenyűgöző poszt. Gratulálunk.

  18.   férfi dijo

    Hűha!
    Nagyon jó lenne, ha HTML5 és Javascript alkalmazásokat nyithatna meg böngésző használata nélkül. Lehetséges ez?
    Arról beszélek, hogy olyanok, mint a natív alkalmazások.
    Tehát könnyű lenne programozni erre az operációs rendszerre 😀

    1.    AdrianArroyoStreet dijo

      Ebben az esetben nem fogom megtenni, mert sokkal több munkát igényel mögötte, de van egy "is" nevű operációs rendszer, amely megteszi, amit mond. Valójában a parancssor JavaScript, és az ablakok a Canvas JavaScript funkciók segítségével rajzolódnak ki. A Nintendo mérnökei megcsinálták, és most nyílt forráskódú.

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

      1.    férfi dijo

        Valla, köszönöm az infót 😀
        Megnézem

  19.   patodx dijo

    Aki elkészítheti saját operációs rendszerét, békésen meghalhat, mivel az intellektuális szintet el kell érnie vele; Ez elhagyja a mennyet vagy a poklot.
    Darab kiküldetés.

    1.    Miguel dijo

      Eddig senki sem tudott arról, hogy csak olyat készített volna, amiről azt lehet mondani, hogy tisztességes, a semmiből készült operációs rendszer, még a Linux Torvalds sem, ahogy az elején mondja, mivel ez Unix forrásokból indult, és minden más közösen szerződik mint egy ember, az élet nagyon rövid, és a semmiből való kiindulás senki számára sem képzelhető el, még ha az ellenkezőjét is akarják, a Linux Torvalds sok másolásában és beillesztésében elkövetett sok hibában kimutatható

      1.    skarmiglione dijo

        Az unix források zárva vannak, a minix használata ... ami valami más.

      2.    Philip Robaina dijo

        és azok, akik QDOS-t készítettek?
        valamin alapultak?

  20.   Tesla dijo

    Amit látok, akinek nincs saját operációs rendszere, az azért van, mert nem akarja, hahahaha.

    Most komolyan, nagyon érdekes! Sok minden meghaladja a korlátozott programozási ismereteimet, de a sorozat többi részét várakozással el fogom olvasni.

    Köszönöm a bejegyzést!

  21.   Manuel R. dijo

    O_O arccal hagytál engem ... anélkül, hogy bárki hozzájárulását lekicsinyelném, ez az egyik legprofibb, amit az utóbbi időben láttam. Üdvözlettel.

  22.   aitor_cz dijo

    Nagyon jó cikk, Adrián. Kérem folytassa…

  23.   mj dijo

    Viccelsz az április bolondok napján?, Ne értsd: "Linus Torvalds utánzása: Készítse el saját operációs rendszerét a semmiből." Nem hinném, hogy nehéz azok számára, akik valamilyen technológiai intézetben vagy egyetemen karriert folytatnak; de számomra kezdő íjász vagyok (van, aki "Noobnak" hív minket, de kissé lustábbnak tartom magam Newbie-nek), ami úgy hangzik, mintha nem lépnék szárazföldre. Mindenesetre ez a cikk rengeteg kíváncsiságot hoz létre, kétségtelen csodálat és szerkesztő tiszteletben tartása nélkül, GRATULÁLOK; Először megpróbálok legalább egy kicsit megérteni ezt az értékes anyagot.
    KÖSZÖNÖM Adrian Arroyo Calle, kiváló munkát és nemes tudásszolgáltatást.

  24.   Blaire pascal dijo

    LEL Kiváló poszt, csak így tovább.

  25.   f3niX dijo

    Milyen jó poszt, ez az, amiről lemaradtam desde linux. Csodálatos.

  26.   Rubin dijo

    Remek poszt, köszönöm szépen.
    Nem értettem, hogy mit csinál a link.ld fájl, meg tudja magyarázni nekem valaki?

    1.    AdrianArroyoStreet dijo

      A link.ld fájl megmondja a linkelőnek (ebben az esetben az ld-nek), hogy a kapott fájlban melyik pozícióban kell lennie a kód egyes részeinek. Meghatározzuk a belépési pontot is, mivel mivel nincs operációs rendszerünk, ezért a mainot nem használhatjuk normál programként, ebben az esetben a start funkciót választjuk.

  27.   maxi dijo

    Remek az összes hozzászólásod! Várakozás a 7-re! Mi van, ha kétségeim vannak például, ha csak algoritmust akartam futtatni, operációs rendszer nélkül, honnan tudhatnám, hogy mit használhatok, és mi nem a C?

    1.    AdrianArroyoStreet dijo

      Ha így használod, akkor nem használhatsz semmit az stdlib-ből, amit gyakorlatilag mindenki használ (nincs malloc, free, printf, scanf, strcmp stb.). Mindent közvetlenül a memóriából vagy az ASM-ből kell megvalósítani. Talán egy magasabb fejezetben bemutatom, hogyan kell telepíteni a C könyvtárat az operációs rendszerhez. A C ++ használata esetén nem használhat kivételeket, valamint az új és a törlendő operátorokat (és biztosan többet).

    2.    váltó dijo

      gondolom ezt jobb képet kaphat arról, hogyan kell csinálni.

  28.   Esteban dijo

    Helló, körülbelül 5 évvel ezelőtt követtem egy hasonló kiadványt, és kifejlesztettem egy mikrokernelt, amely ugyanúgy indul, van néhány szempontja, amelyeket javítani lehet, de érdekes lehet, hogy védett módban fut, multitaskingot hajt végre és memória-virtualizációt hajt végre rajta a meghajtó és a cd meghajtó, hogy telepíthető legyen, és ne csak élő CD-n fusson ... Üdvözlet.

  29.   Johan dijo

    Kedves, hibám van a parancs végrehajtásakor:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 szintaxis hiba
    gyűjt2: hiba: ld 1 kilépési állapotot adott vissza

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

    Az 5. sorban nem látom a hibát, valaki ugyanezt?

    Egy virtualizált debian wheezy-vel dolgozom a virtualboxban

    1.    Julian Reyes Escrigas helyőrző kép dijo

      adja hozzá a ";" * végén (. multiboot_header)

  30.   Eric Orellana Romero dijo

    Kiváló kezdeményezés, minden bizonnyal követem ennek a bejegyzésnek a fejezeteit, sokat szándékozom tanulni belőle. Köszönöm szépen, hogy időt szakított arra, hogy megtanítson minket. Egyetlen részlet ebben a tekintetben meg kell jegyezni, hogy Linus Torvalds nem egy operációs rendszer létrehozója, ő hozta létre a GNU / Linux rendszer kerneljét (amelyet más operációs rendszerekben használtak), ami még mindig érdemes, de fontos Fontos megadni Richard Stallman-nak a szükséges hitelt az operációs rendszer nagy részének létrehozásához.

    Nagyon köszönöm a hozzászólást, és remélem, hogy figyelembe veszi észrevételemet.

  31.   Julian Reyes Escrigas helyőrző kép dijo

    Egy ideje vacakoltam a témával, amint elolvastam a címsort, érdekelt. de az üzenet folyamatosan érkezik

    hiba: nem található multiboot fejléc.
    hiba, először be kell töltenie a kernelt

    A github repo-jába feltöltöttem a felvetteket https://github.com/rkmax/GenyOS

    1.    Martin villalba dijo

      Ugyanez történik velem is. Megtalálta a megoldást?

  32.   Carlos dijo

    egy kérdés, amit elkezdtem bevezetni a szintaxist, és a menuentry sor megmondja, hogy nem találtam meg, aki meg tudná mondani, miért
    ez az amit csinálok

    FEKETE @ FEKETE-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: a parancs nem található

    1.    AdrianArroyoStreet dijo

      A tartalom tartalmát nem a parancssorba kell beírni, hanem a létrehozott fájlba, amelyet grub.cfg

  33.   Nodetin dijo

    Kiváló cikk, köszönöm!

  34.   David dijo

    Látványos…!! pont olyan, mint a hiányzó láncszem.

  35.   r.garciag dijo

    Szeretem az emuláló LInus Torvalds oktatóanyagokat, de van egy lépés, amelyet nem értek, a következő:
    Most átmásoljuk a START.ELF fájlt a következő könyvtárba, amely az operációs rendszer gyökerét szimulálja. A konzollal megyünk új operációs rendszerünk gyökérmappájába, és ellenőrizzük, hogy van-e két fájl: egy /boot/grub/grub.cfg és egy másik /next/START.ELF.

    Menjünk a felső könyvtárba, és hívunk egy ISO létrehozó segédprogramot a GRUB-szal, grub-mkrescue néven

    Meg tudná valaki magyarázni nekem: p

    1.    AdrianArroyoStreet dijo

      Egyszerűen egy minimális ISO generálásához, amelyet a GRUB betölthet, átmásoljuk a kernelt (az ISO /, bármely mappa / / next / START.ELF fájljába, a GRUB konfigurációs fájlt pedig az (ISO, bármely mappa / könyvtárába) / boot / grub / grub.cfg. Miután ez megtörtént, még nem telepítettük a GRUB-ot az ISO-ra, és van egy segédprogram, amely egy mappából állítja elő az ISO-t, és telepíti a GRUB-t, az úgynevezett grub-mkrescue. Aztán végül egy olyan bootolható ISO-val állunk elő, amelyre telepítve van a GRUB, amely kiolvassa a konfigurációt, hogy később helyesen hajtsa végre a START.ELF-et. Nem tudom, magyaráztam-e magam, de amit csinálunk, az egyfajta hamis fájlrendszer, amellyel ISO-t állítunk elő.

  36.   miguel jose guevara figyelem dijo

    Remek

  37.   Michael Moreno dijo

    Nos, valóban ne egy új rendszert nézzünk, hanem ha javítunk a linuxon, például létrehozunk egy linux exonukleust egy szerver komponenssel, amely kívánság szerint mikronukleusként működik, vagyis egy olyan exo struktúrát, amelynek mikronukleus viselkedése szuper és linux lenne.

    A másik dolog az, hogy nem vagyok a programozás szakértője, csak néhány sajtos c ++ és némi java, nekem elég lenne, ha a linux kernel programnak adnék egy modult, kibelezve, módosítva stb.

  38.   53. Téli katona dijo

    Kétségtelen, hogy már nyaralni kell.

  39.   Fermin dijo

    Ezt a jót és milyen programban tervezi és kódolja
    kérlek, add meg nekem ezt a választ

  40.   Darkmind dijo

    Amikor a gitből állítom össze, a következőket kapom:

    [jmponce @ jar build] $ cmake ..
    - A NextRoot könyvtár létrehozása
    - ISO szkript létrehozása
    make DESTDIR = következő telepítés
    ./iso.sh
    - Megtalált Doxygen: / usr / bin / doxygen (megtalált "1.8.9" verzió)
    - Konfigurálás kész
    - Generálás kész
    - A build fájlokat a következő könyvtárba írták: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    A cél START.ELF szkennelési függőségei
    [7%] ASM-ATT objektum építése src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] CXX objektum építése src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    A CXX futtatható START.ELF összekapcsolása
    / usr / bin / ld: Inkompatibilis /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a átugorva, miközben a -lgcc keresést végzi
    / usr / bin / ld: nem található a -lgcc
    gyűjt2: hiba: ld visszaadta az 1. kilépési állapotot
    src / CMakeFiles / START.ELF.dir / build.make: 402: Sikertelen utasítások az „src / START.ELF” célhoz
    make [2]: *** [src / START.ELF] 1. hiba
    CMakeFiles / Makefile2: 106: Az 'src / CMakeFiles / START.ELF.dir / all' cél utasításainak meghibásodása
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] 2. hiba
    Makefile: 117: Hiba az „all” célra vonatkozó utasításokban
    make: *** [all] 2. hiba

    1.    AdrianArroyoStreet dijo

      Úgy tűnik, hogy a hiba az, hogy nem találja a llibgcc-t, mivel a 64 bites verzióval rendelkezik, és jelenleg a build rendszer kénytelen 32 biteset használni. Telepítsen egy kompatibilitási csomagot a terjesztőjére, vagy jobb, 32 bites rendszert használjon.

      1.    Ronaldo Rodríguez dijo

        32 bitem van, és ugyanazt a hibát kapom, az operációs rendszerre vagy az architektúrára gondolsz? az enyém 64 bites, de én 32 bites Ubuntut használok, ne kérdezz, pénzügyi problémákat, ezzel elmondom az egészet.

  41.   Jorge dijo

    Kiváló téma, nagyobb terjedelemre vár. Egészségére

  42.   Jhon dijo

    Remek, még többre remélem

  43.   Kerülje perez dijo

    Helló, fiatal nagykövet vagyok, aki olyan operációs rendszert akar létrehozni, amely támogatja az összes programot és platformot, hogy a fejlesztőknek ne kelljen erőteljes gépekkel, alkalmazásokkal vagy programokkal rendelkezniük a pc-n.
    Ezért érdekel ez a bejegyzés, de amikor letöltöm a gitedet, vagy megpróbálom létrehozni, minden addig működik, amíg végre nem hajtom a ./iso.sh vagy grub-mkrescue -o nextdivel.iso nextroot parancsot.

    "Grub-mkrescue: figyelmeztetés: Az xorriso nem támogatja a" –grub2-boot-info "fájlt. Néhány funkció le van tiltva. Használja az xorriso 1.2.9 vagy újabb verziót.
    grub-mkrescue: figyelmeztetés: Az xorriso nem támogatja a "–grub2-boot-info" fájlt. A rendszermag képe túl nagy. A lemez indítása le van tiltva. Használja az xorriso 1.2.9 vagy újabb verziót .. »
    Valójában fogalmam sincs, mivel sokat tudok az alkalmazásokról és a webekről, de a grubról semmit sem tudok

    1.    AdrianArroyoStreet dijo

      Lehet, hogy frissítenie kell az xorriso programot a terjesztőn. Milyen terjesztést és verziót használsz?

      1.    Kerülje perez dijo

        Az xubuntu 14.04lts-t használom, és megpróbálom futtatni az xorriso-t, de a shell azt mondja nekem, hogy nem találja meg, és kapok apt-get install xorriso-t, bár őszintén vártam valamilyen választ, mert rossz tapasztalatom volt olyan dolgok telepítésével, amelyeket nem ismerek a linuxban hehe . Most frissítem, és elmondom, mi történt

      2.    AdrianArroyoStreet dijo

        Ezután telepítse az xorriso szoftvert a szoftverközpontból, vagy egyszerűen a terminálról. "Sudo apt-get install xorriso"

      3.    Kerülje perez dijo

        Már mindent megtettem, amit mondott, és mind a git-mel, mind az enyémmel megkapom ezt az xorriso 1.3.2: RockRidge fájlrendszer-manipulátort, libburnia projektet.

        Meghajtó áram: -outdev 'stdio: nextdivel.iso'
        Média aktuális: stdio fájl, felülírható
        Média állapota: üres
        Média összefoglaló: 0 munkamenet, 0 adatblokk, 0 adat, 1901m szabad
        Hozzáadva az ISO képhez: '/'='/tmp/grub.OEqSzV könyvtár
        xorriso: UPDATE: 546 fájl hozzáadva 1 másodperc alatt
        xorriso: HIBA: A "/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot" forrásfájl attribútumai nem határozhatók meg: Nincs ilyen fájl vagy könyvtár
        xorriso: UPDATE: 546 fájl hozzáadva 1 másodperc alatt
        xorriso: aborting: -abort_on 'FAILURE' találkozott 'FAILURE'
        és kordbársony Nem értem, hogy a szerkezetem /nextroot/boot/grub/grub.cfg és nextroot / next / START.ELF

      4.    Kerülje perez dijo

        Köszönöm, készen állok a továbblépésre, egy barátom segített nekem, és elmondta, hogy mit csináltam rosszul, az a könyvtár szervezése volt, ezért módosítottam és ennyi

      5.    erik dijo

        Elnézést, meg tudná mondani, hogy milyen eljárást hajtott végre, mivel a hibát nem kapom: nincs ilyen fájl vagy könyvtár

        nincs bootolható eszköz.

  44.   jose dijo

    Egészségére! Megkértem a szívességet, ha küldhetne nekem egy e-mailt azzal, amit itt megmagyaráz, kissé összezavarodtam, és össze kell hasonlítanom, hogy mi van azzal, amit megmagyaráz, talán az nem világos számomra, a grub. cfg létrehozása a gcc terminálban történik, vagy pontosan hol? nagyon szépen köszönöm, barátom!

    1.    AdrianArroyoStreet dijo

      A grub.cfg fájlt bármilyen szövegszerkesztővel létrehozza, és el kell mentenie a PROJECT_FOLDER / boot / grub / grub.cfg könyvtárba.

  45.   jhuazano dijo

    Helló Adrian, először is gratulálok és köszönöm a hozzájárulását.

    Tudod, hogy egy gyakorlás miatt csinálom, és elkezdtem összerakni a korrepetálásod nyomán, azonban az indulás után megtaláltam az első hibát

    $ as -o kernel.o -c kernel.asm
    bash: as: parancs nem található ...
    Hasonló parancsok:
    'sa'
    „ac”

    A fedora 20-on dolgozom, és nem találok megoldást erre a kérdésre, nagyra értékelném az útmutatásodat arról, hogy változtassak-e valamit gcc-ben vagy gázban

    köszönet előre

    1.    AdrianArroyoStreet dijo

      Telepítenie kell a GAS-t, hogy lássam a hibakódot. Nincs kéznél a Fedora, de elméletileg, ha telepíti a gcc-c ++ szoftvert, akkor telepíti a teljes GCC programcsomagot és a GNU-t, ahogy az általában vele jár.

  46.   Gaston Ramirez dijo

    Veled vagyok, tudok valamit a C ++ -ról, a C # -ról (bár ez az utolsó nem túl hasznos ebben a kérdésben) a rossz az, hogy még mindig nincs tapasztalatom, soha nem kezelem a C nyelvet, a kiadványod nagyszerű, Nincs sok mondanivalóm, ha van időm, látom. Köszönöm.

  47.   Jézus Terézitája Nah Sanchez dijo

    Köszönöm szépen a nagy segítséget.

  48.   jky dijo

    Imádom a linuxot, ez a legjobb kerület, a Windows-nak az az igazsága, hogy szemetet dobok, és tudom, hogy a linux készítője a Windows

  49.   Lovagolt dijo

    Helló, kapok egy hibát a grub-ban
    hiba: /next/START.ELF fájl nem található
    hiba: először be kell töltenie a kernelt

    Tudna nekem segíteni és guglizni, de nem találom

  50.   Henry Avila dijo

    Kérem, hogyan tudjam elérni, hogy a HELLO WORLD üzenet jelenjen meg? Kezdő vagyok, és még mindig nem ismerem eléggé

  51.   CARLOS GUERRERO ALVAREZ dijo

    A következő történik velem:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: Az R_X86_64_32 áthelyezés a "stack" szimbólumhoz nem használható PIE objektum készítésekor; fordítsd újra az -fPIE-vel
    / usr / bin / ld: a link nem sikerült: nem reprezentálható szakasz a kimeneten
    gyűjt2: hiba: ld 1 kilépési állapotot adott vissza