Lino Torvaldso mėgdžiojimas: sukurkite savo operacinę sistemą nuo nulio (I)

Visų pirma pakomentuokite, kad tai yra mano pirmasis straipsnis ir tikiuosi, kad jums visiems tai patiks.

Linus Torvals laimingas

Šioje serijoje mes imituosime Linus Torvalds, mes sukursime savo operacinę sistemą nuo 0. Šiame pirmame epizode pamatysime įkrovą ir ekrane iš savo branduolio įdėsime tekstą.

Mano atveju vadinama operacine sistema „NextDivel“. Pirmasis sprendimas, kurį turime priimti, kai tik apsvarstysime operacinę sistemą, yra koks bus įkrovos tvarkyklė?

Čia yra keli variantai, ir mes netgi patys galėtume jį sukurti; tačiau šioje pamokoje ketinu naudoti GRUB, nes dauguma apie jį daugiau ar mažiau ką nors žino. Sukuriame aplanką, kuris bus mūsų operacinės sistemos šaknis, ir ten sukursime aplanką / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Čia mes sukuriame failą grub.cfg taip:

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

Šiame faile matėme kaip GRUB šiuo atveju įkels mūsų branduolį į /next/START.ELF. Dabar turime sukurti savo branduolį.

Tam mums reikės GCC y DUJŲ (projekto surinkėjas GNU, paprastai pateikiama kartu su gcc). Taigi mes sukursime branduolį.

Pirmiausia padarome failą, pavadintą kernel.asm. Šiame faile bus mūsų branduolio pradinis taškas, taip pat bus apibrėžtas daugkartinis įkrovimas (kai kurių įkrovos elementų, tokių kaip GRUB). Kernel.asm turinys bus:

.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

Viskas, kas susiję su „multiboot“, yra tik tai, kad laikytumėtės nieko kito. Viskas prasidės iš pradžių, jis iškvies multiboot_entry, mes nustatysime multiboot antraštę per pirmuosius 4k ir įdėsime (su movl).

Vėliau mes vadiname „NextKernel_Main“, kuri yra mūsų branduolio C funkcija. Kilpoje mes sustabdome kompiuterį. Tai sudaro:

as -o kernel.o -c kernel.asm

Dabar eisime į programavimą C. Jūs manysite, kad dabar viskas yra pyrago gabalas, mes įdėjome a printf en pagrindinis ir viskas, mes tai padarėme.

Na ne, nuo tada printf y pagrindinis tai yra operacinės sistemos apibrėžtos funkcijos, bet mes jas kuriame! Mes galime naudoti tik tas funkcijas, kurias mes patys apibrėžiame.

Vėlesniuose skyriuose kalbėsiu apie tai, kaip sukurti savo C biblioteką (glibc, bionic, newlibc), bet laikas nuo laiko. Aptarėme, kad norime įdėti tekstą į ekraną, gerai pamatysime, kaip tai darysime.

Yra dvi galimybės, viena yra paskambinti BIOS o kitas yra tiesiogiai valdyti ekrano atmintį. Mes ketiname padaryti pastarąjį, nes tai aiškiau iš C ir tai taip pat leis mums tai padaryti, kai įeisime į apsaugotą režimą.

Sukuriame failą pavadinimu NextKernel_Main.c su tokiu turiniu:

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

Tuo mes tiesiogiai manipuliuojame atmintimi VGA ir po simbolį mes jį rašome. Mes sudarome išjungdami „stdlib“:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Jei tai padarėte iki šiol, norėsite išbandyti savo naują operacinę sistemą dabar, bet mes dar ne viskas. Mums reikia nedidelio failo, kuris kompiliatoriui nurodo, kur faile palikti kiekvieną skyrių. Tai daroma naudojant susiejimo scenarijų. Mes kuriame 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 = .;
}

Tuo mes apibrėžiame kiekvieno skyriaus poziciją ir pradžios tašką, kurį apibrėžėme kernel.asm. Dabar mes galime sujungti visą šią sumanymą:

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

Dabar kopijuojame START.ELF į / kitą aplanke, kuris imituoja mūsų operacinės sistemos šaknį. Su konsole einame į naujos operacinės sistemos šakninį aplanką ir patikriname, ar yra du failai: vienas /boot/grub/grub.cfg ir kitas /next/START.ELF.

Einame į viršutinį katalogą ir iškviečiame ISO sukūrimo įrankį, kai iškviečiamas GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Tai padarę turėsime ISO. Šį ISO galima atidaryti kompiuteriuose x86 (64 bitai taip pat) ir virtualios mašinos. Norėdami tai išbandyti, aš ketinu naudoti QEMU. Mes skambiname QEMU iš komandinės eilutės:

qemu-system-i386 nextdivel.iso

Pradės „SeaBIOS“ o vėliau turėsime GRUB. Vėliau, jei viskas bus teisinga, pamatysime savo frazę.
Jūs manysite, kad tai sunku, aš jums atsakau, taip yra.

Tikrai sukurti operacinę sistemą yra sunku ir kad ši čia nepadaro nieko naudingo. Ateityje skyriuose pamatysime, kaip elgtis su spalvomis ekrane, rezervuoti atmintį ir, jei galiu, kaip gauti duomenis iš klaviatūros.

Jei kas nors nenori čia kopijuoti visko, turiu saugyklą GitHub (išsamiau) su operacine sistema „NextDivel“. Jei norite sudaryti „NextDivel“ jūs tiesiog turite turėti git ir 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

Jei turite laiko ir noro sukurti operacinę sistemą, raginu bendradarbiauti „NextDivel“. Galbūt net pranašesnis už „Linux“ ... laikas parodys.


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   gyvas sakė

    :O

    1.    marianogaudix sakė

      Torvalds perėmė „Minix“ operacinę sistemą (kilusią iš UNIX) Andrew S. Tanenbaumui ir ją patobulino.

      Tanenbaumas yra kovojęs su Linu, jie įžeidė vienas kitą. Tanenbaumas sako, kad mikrokernelis yra ateitis (HURD, „Minix new cone Microkernel“).

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

  2.   3000 sakė

    Tai buvo geriausias iki šiol matytas įrašas šiame tinklaraštyje. Aš jau noriu žinoti, ką dar daryti.

  3.   Carlosas. Gude sakė

    Būkite sužavėtas

  4.   ašis sakė

    Tikrai įspūdinga !!

  5.   Rhoconlinux sakė

    FUUUUUUA!
    Tai geekiest įrašas, kurį kada nors mačiau hehe. Sveikiname Adrianą, kekšės straipsnis! hiper įdomu !!! 🙂

    1.    Joaquinas sakė

      Sutinku. Įsivaizduoju šią situaciją:
      GNU / „Linux“ energijos vartotojas (su laimingu veidu):
      "Aš jau žinau, kaip sudaryti savo" Gentoo "

      Nerd (paniekinamai): «pff, aš sukūriau savo platintoją ...»

      1.    desikoderis sakė

        Taip, aš galiu sukurti savo „Linux Distro“. Tiesą sakant, jame kuriu „initramfs“ ir branduolį įterptam „Linux“. Kurti operacinę sistemą nėra tas pats, kas „Linux Linux“. Pirmasis yra daug sunkesnis, beveik neįmanomas, antrasis, kaip jūs sakėte, gali būti bet koks, net „Ubuntu“ su „xD“ logotipu. Taigi paliksiu tai taip:

        GNU / „Linux“ energijos vartotojas (su laimingu veidu)
        - Aš jau moku sudaryti savo „Gentoo“

        Pusiau paprastas
        - Pff, aš laikiausi „linux“ nuo nulio ir padariau savo distro

        Nerd (su paniekinančiu požiūriu)
        - pff, nes aš užprogramavau branduolį surinkime ir C

        Sveiki atvykę!

  6.   Cronos sakė

    Tai man įdomu, laukiant tolesnių skyrių.

  7.   abimaelmartell sakė

    Prieš kurį laiką mačiau šią pamoką, ji skirta „C ++“
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyo gatvė sakė

      Ačiū už nuorodą, aš ją apžvelgsiu.

  8.   Jose Jácome sakė

    Norėčiau, kad operacinė sistema būtų visiškai suderinama su AMD grafika: /

    1.    „IvanLinux“ sakė

      Windows

      1.    Jose Jácome sakė

        hahaha sistemoje „Windows Catalyst“ neturi „OpenGL“ palaikymo, nors sistemoje „Linux“ negaliu išnaudoti visos grafinės galios, kurios lauksiu, kol kas bus!

        1.    beny_hm sakė

          tiesiog palaukite, kol vožtuvas išnaikins rinką

  9.   KZKG ^ Gaara sakė

    Stebuklingas, tobulas, puikus indėlis, atrodo kaip puiki įrašų serija 🙂

  10.   O_Pixote_O sakė

    Buah, aš norėčiau žinoti, kaip programuoti, kad galėčiau jums padėti, paprasčiausiai kaip praktikuoti žinodamas, kad mokotės ir padedate. Kol kas palieku jums šūkį atkreipti dėmesį į projektą, kai jį baigsite: „Naudok„ NextDivel “, pornografija atrodo tokia pati (ar geresnė)“.

  11.   šis vardas klaidingas sakė

    Mooooooolaaa !!!!

  12.   nordi sakė

    Labai geras straipsnis, bet įdomu, kodėl nesekėte projekto „Linux From Scratch“?

    saludos

    1.    AdrianArroyo gatvė sakė

      Na, „Scratch“ „Linux“ yra puikus, ir jūs galite pasakyti, kad tai jūsų, bet jis tikrai yra labai mechaniškas:
      -Atsisiųskite šriftus
      -Plaki juos
      -Kompiliuokite
      -Diegti
      -Sekdami
      Net jei rezultatas galų gale yra prastesnis, galite sakyti, kad peržiūrėjote visus failus.

    2.    desikoderis sakė

      Kaip matyti iš mano ankstesnio komentaro, nes jis nėra vienodo sudėtingumo. Be to, „Linux“ nuo nulio nėra, priešingai nei jo pavadinime, sistemos kūrimas nuo nulio. Sistemos kūrimas nuo nulio - tai pats programavimas, rašant savo, o ne „Linux“ branduolio branduolį, jei įmanoma, net savo įkrovos įrankį vietoj „grub“ lilo, syslinux ir kt. Nors LFS nėra nemenkas žygdarbis ir yra gana sudėtingas, jis net nepriartėja prie savo branduolio programavimo ...

      Be to, sutinku su AdrianArroyo Calle, kad jis yra per daug mechaniškas, aš jį kažkada perskaičiau ir jūs galų gale atsisakote šeštojo puslapio, jie taip pat jums liepia naudoti kokias paketų versijas, nes kitaip instrukcijos neveikia (tai rodo lankstumo stoka, Mano nuomone). Manau, kad geriau turėti kažką savo idėjos, sudaryti norimus paketus, net užprogramuoti kai kuriuos, sukompiliuoti „Linux“ branduolį ir ramiai.

      Sveiki atvykę!

  13.   sausainis sakė

    uuuoooohh !! Niekada nesu užfiksavęs tiek įrašo, kiek šis.
    Prašau tęsti 😀

  14.   linux_user sakė

    Aš nežinau, kas negerai:

    klaida: nerasta kelių paleidimų antraštės.
    klaida, kurią pirmiausia turite įkelti branduolį

    1.    AdrianArroyo gatvė sakė

      Jei tai paguoda, padariau tą pačią klaidą. Pabandykite naudoti šaltinius, esančius „GitHub“, ten klaida jau išspręsta. Bet kokiu atveju, manau, jei pakeisite grub.cfg eilutę iš „multiboot /next/START.ELF“ į „branduolys /next/START.ELF“, tai gali veikti. Aš tiksliai nežinau.

      1.    Mcplatano sakė

        Visų pirma, puikus įėjimas 🙂
        Man kyla ta pati problema įkeliant branduolį iš „grub“. Net naudojant „GitHub“ šaltinius arba keičiant daugialypę įkrovą branduoliui ...

        klaida: nerasta kelių paleidimų antraštės.
        klaida: nėra įkelto branduolio

        1.    AdrianArroyo gatvė sakė

          Ar naudojate „Clang“ kaip kompiliatorių? Pakeiskite jį į gcc
          Ar nepamiršote naudoti susiejimo scenarijaus? Tai būtina, kad susiejiklis (mūsų atveju - ld) žinotų, kur faile jis įdės kiekvieną daiktą. Tokiu atveju kelių įkrovų antraštė turi būti pradžioje.
          Ar naudojate „CMake“ sistemą? Jei naudosite, manau, kad tai nepavyks.
          Jei jums tai netiks, pabandysiu rasti kitą sprendimą.

  15.   khourtas sakė

    [+100]
    Tiesiog puikus !!!

  16.   Invisible15 sakė

    Tai tikrai šaunu 🙂

  17.   tanrax sakė

    Nusiimu kepurę. Įspūdingas įrašas. Sveikiname.

  18.   vyras sakė

    Vau!
    Būtų puiku, jei galėtumėte atidaryti HTML5 ir „Javascript“ sukurtas programas nenaudodami naršyklės, ar tai įmanoma?
    Aš kalbu apie tai, kad jie yra tarsi vietinės programos.
    Taigi būtų lengva programuoti šią operacinę sistemą 😀

    1.    AdrianArroyo gatvė sakė

      Šiuo atveju aš to nedarysiu, nes tam reikia daug daugiau darbo, tačiau yra operacinė sistema, vadinama „yra“, kuri daro tai, ką jūs sakote. Iš tikrųjų komandinė eilutė yra „JavaScript“, o langai piešiami naudojant „JavaScript Canvas“ funkcijas. Tai padarė „Nintendo“ inžinieriai, o dabar jis yra atviro kodo.

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

      1.    vyras sakė

        Valla, ačiū už informaciją 😀
        Pasižiūrėsiu

  19.   patodxas sakė

    Kas gali susikurti savo OS, gali ramiai mirti, nes intelektinį lygį jis turi tuo pasiekti; Tai priverčia jus atsisakyti dangaus ar pragaro.
    Siuntimo gabalas.

    1.    miguel sakė

      iki šiol niekas nežinojo, kad padarė tik tai, ką galima pasakyti apie padorų operacinę sistemą, sukurtą nuo nulio, net ir „Linux Torvalds“, kaip sakote pradžioje, nes tai prasidėjo iš „Unix“ šaltinių, o visa kita yra būdingas daugiau nei vienam asmeniui, gyvenimas yra labai trumpas, o pradėti nuo nulio niekam neįsivaizduojamas, net jei norima priešingai, tai įrodo daugybė klaidų, padarytų kopijuojant ir įklijuojant „Linux Torvalds“

      1.    skarmiglione sakė

        Unix šaltiniai yra uždaryti, minix naudojimas ... kas yra kažkas kita.

      2.    Filipas Robaina sakė

        ir kas padarė QDOS?
        buvo kažkuo pagrįsti?

  20.   Tesla sakė

    Iš to, ką matau, kas neturi savo operacinės sistemos, yra todėl, kad jie to nenori, hahahaha.

    Dabar rimtai, labai įdomu! Daug kas viršija mano ribotas programavimo žinias, tačiau kitas šios serijos dalis perskaitysiu tikėdamasis.

    Ačiū už įrašą!

  21.   Manuelis R sakė

    Palikote mane O_O veidu ... neturėdamas tikslo nuvertinti niekieno indėlio, tai yra pats „pro“, kurį mačiau pastaruoju metu. Pagarbiai.

  22.   aitor_cz sakė

    Labai geras straipsnis, Adriánai. Prašome tęsti…

  23.   mj sakė

    Ar juokauji balandžio 0 dienos kvailystės dieną?, Nereikėtų pasakyti „Lino Torvaldo mėgdžiojimas: sukurkite savo operacinę sistemą nuo nulio“. Nemanau, kad sunku tiems, kurie siekia karjeros kokiame nors technologijos institute ar universitete; bet man aš esu pradedantysis lankininkas (yra tokių, kurie sako „Noob“, bet aš save laikau labiau naujoku, kiek tingiu), kuris skamba taip, lyg nežengčiau į žemę. Šiaip ar taip, šiame straipsnyje sukuriama daugybė smalsumo ir be abejonių susižavėjimo bei pagarbos savo redaktoriui, sveikiname; Pirmas dalykas, kurį padarysiu, tai pabandysiu suprasti bent šiek tiek šios vertingos medžiagos.
    AČIŪ Adrianui Arroyo Callei, puikų darbą ir kilnų žinių perdavimą.

  24.   Blaire'as pascalas sakė

    LEL Puikus įrašas, tęsk.

  25.   f3niX sakė

    Que Grandioso post, esto es lo que extrañaba de desde linux. Que maravilla.

  26.   rubinas sakė

    Puikus pranešimas, labai ačiū.
    Aš nesupratau, ką daro failas link.ld, ar kas nors gali man tai paaiškinti?

    1.    AdrianArroyo gatvė sakė

      Failas link.ld nurodo susiejėjui (šiuo atveju ld), kur kiekviena kodo dalis turėtų būti gautame faile. Mes taip pat apibrėžiame įėjimo tašką, nes kadangi neturime operacinės sistemos, pagrindinio negalime naudoti kaip įprastos programos, šiuo atveju pasirenkame pradžios funkciją.

  27.   Maxi sakė

    Puiku visas jūsų pranešimas! Laukia 7! Ką daryti, jei man kyla abejonių, pavyzdžiui, jei norėčiau paleisti tik algoritmą be OS, kaip sužinoti, ką galiu naudoti, o ko ne?

    1.    AdrianArroyo gatvė sakė

      Jei jį naudosite taip, negalėsite naudoti nieko iš „stdlib“, kurį praktiškai naudoja visi (be malloc, free, printf, scanf, strcmp ir kt.). Viskas turi būti įgyvendinta tiesiogiai iš atminties ar ASM. Gal aukštesniame skyriuje parodysiu, kaip įdiegti operacinės sistemos C biblioteką. Jei naudojate C ++, negalite naudoti išimčių ir naujų bei ištrinti operatorių (ir tikrai daugiau).

    2.    jungiklis sakė

      aš manau Esto tai gali geriau suprasti, kaip tai padaryti.

  28.   Esteban sakė

    Sveiki, maždaug prieš 5 metus aš stebėjau panašų leidinį ir sukūriau mikrokernelį, kuris paleidžiamas tokiu pačiu būdu, jame yra keletas aspektų, kuriuos reikia patobulinti, tačiau jis gali jus dominti, jis veikia saugiuoju režimu, vykdo daug užduočių ir atlieka atminties virtualizavimą, pastaruoju metu dirbau prie jo disko tvarkyklės ir kompaktinių diskų įrenginio, kad jį būtų galima įdiegti ir ne tik paleisti tiesioginiame kompaktiniame diske ... Sveikinimai.

  29.   Johanas sakė

    Gerbiamasis, vykdant komandą turiu klaidą:
    gcc -o START.ELF branduolys.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 sintaksės klaida
    collect2: error: ld grąžino 1 išėjimo būseną

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

    5 eilutėje nematau klaidos, ar kažkas tas pats?

    Aš dirbu su virtualizuotu debianu švokštimu „virtualbox“

    1.    Julian Reyes Escrigas vietos rezervavimo atvaizdas sakė

      pridėti „;“ * (. multiboot_header) pabaigoje

  30.   Erikas Orellana Romero sakė

    Puiki iniciatyva, tikrai laikysiuosi šio įrašo skyrių, ketindama iš jo daug ko išmokti. Labai ačiū, kad skyrėte laiko mus išmokyti. Šiuo atžvilgiu reikia pažymėti vieną detalę. Pažymėtina, kad Linusas Torvaldsas nėra jokios operacinės sistemos kūrėjas, jis sukūrė GNU / Linux sistemos branduolį (tą, kuris buvo naudojamas kitose OS), kuris vis dar yra vertas, tačiau svarbu įskaityti Richardą Stallmaną kuriant didžiąją dalį OS.

    Labai ačiū už indėlį ir tikiuosi, kad apsvarstysite mano pastebėjimą.

  31.   Julian Reyes Escrigas vietos rezervavimo atvaizdas sakė

    Kurį laiką šnekučiavausi su tema, susidomėjau vos perskaičiusi antraštę. bet žinia vis gaunama

    klaida: nerasta kelių paleidimų antraštės.
    klaida, kurią pirmiausia turite įkelti branduolį

    Aš įkėliau tai, ką imuosi, į „github“ atpirkimą https://github.com/rkmax/GenyOS

    1.    Martinas Villalba sakė

      Tas pats nutinka ir man. Ar radai sprendimą?

  32.   Carlos sakė

    klausimas, kurį pradėjau įvesti sintaksę, o meniu eilutė man sako, kad komandai nerasta, kas galėtų man pasakyti, kodėl
    tai aš darau

    JUODAS @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: komanda nerasta

    1.    AdrianArroyo gatvė sakė

      Šio turinio turinys turi būti įvestas ne į komandinę eilutę, o į jūsų sukurtą failą, pavadintą grub.cfg

  33.   Nodetin sakė

    Puikus straipsnis, ačiū!

  34.   Davidas sakė

    Įspūdinga ... !! tai visai kaip trūkstama grandis.

  35.   r.garciag sakė

    Man patinka jūsų mėgdžiojimo LInus Torvalds pamokos, bet yra vienas žingsnis, kurio aš nesuprantu:
    Dabar kopijuojame START.ELF į / kitą aplanke, kuris imituoja mūsų operacinės sistemos šaknį. Su konsole einame į naujos operacinės sistemos šakninį aplanką ir patikriname, ar yra du failai: vienas /boot/grub/grub.cfg ir kitas /next/START.ELF.

    Einame į viršutinį katalogą ir iškviečiame ISO sukūrimo įrankį su GRUB, vadinamą grub-mkrescue

    Ar kas nors galėtų man tai paaiškinti: p

    1.    AdrianArroyo gatvė sakė

      Tiesiog sugeneruodami minimalų ISO, kurį GRUB gali įkelti, mes nukopijuojame branduolį į (ISO / bet kurio aplanko / bet kurį aplanką) /next/START.ELF ir GRUB konfigūracijos failą į (/ ISO, bet kurį aplanką) / įkrovą /grub/grub.cfg. Tai padarę, mes dar neįdiegėme GRUB ISO ir yra įrankis, kuris generuoja ISO iš aplanko ir įdiegia GRUB, vadinamą grub-mkrescue. Tada mes galiausiai galų gale turėtume įkrovos ISO, kuriame įdiegtas GRUB, kuris gali perskaityti konfigūraciją, kad vėliau tinkamai įvykdytų START.ELF. Aš nežinau, ar aš pats paaiškinau, bet tai, ką mes darome, yra tam tikra klaidinga failų sistema, kuria mes sukuriame ISO.

  36.   migelis jose guevara atencio sakė

    Buenísimo

  37.   Michael Moreno sakė

    Na, iš tikrųjų pažvelkite į naują sistemą ne tiek, bet jei patobulinsite, pavyzdžiui, „Linux“, sukurkite „Linux exonucleus“ su serverio komponentu, kuris, jei norite, veikia kaip mikrobranduolys, tai yra „exo“ struktūra su mikrobranduolių elgsena, kuri būtų super ir „Linux“.

    Kitas dalykas yra tai, kad nesu programavimo ekspertas, tik keli sūrūs c ++ ir šiek tiek „Java“, man pakaktų duoti „Linux“ branduolio programai modulį, jį išdarinėjant, modifikuojant ir pan.

  38.   Žiemos kareivis53 sakė

    Be jokios abejonės, aš jau turiu tai daryti atostogų metu.

  39.   Ferminas sakė

    Šį gerą ir kokioje programoje jis suprojektuoja ir koduoja?
    prašau duok man tą atsakymą

  40.   „DarkMind“ sakė

    Renkant iš jūsų gito gaunu:

    [jmponce @ jar build] $ cmake ..
    - „NextRoot“ katalogo kūrimas
    - ISO scenarijaus generavimas
    make DESTDIR = kitas diegimas
    ./iso.sh
    - Rastas „Doxygen“: / usr / bin / doxygen (rasta „1.8.9“ versija)
    - Konfigūravimas atliktas
    - Generuojama padaryta
    - „Build“ failai buvo parašyti: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Nuskaitytos taikinio START.ELF priklausomybės
    [7%] ASM-ATT objekto src / CMakeFiles / START.ELF.dir / start / boot.asm.o kūrimas
    [14%] CXX objekto src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o kūrimas
    [21%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o kūrimas
    [28%] CXX objekto src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o kūrimas
    [35%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o kūrimas
    [42%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o kūrimas
    [50%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o kūrimas
    [57%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o kūrimas
    [64%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o kūrimas
    [71%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o kūrimas
    [78%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o kūrimas
    [85%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o kūrimas
    [92%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o kūrimas
    [100%] CXX objekto src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o kūrimas
    Susiejimas CXX vykdomojo failo START.ELF
    / usr / bin / ld: Nesuderinamas /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a praleidžiamas ieškant -lgcc
    / usr / bin / ld: negalite rasti -lgcc
    collect2: error: ld grąžino 1 išėjimo būseną
    src / CMakeFiles / START.ELF.dir / build.make: 402: Nepavyko instrukcijos tikslui „src / START.ELF“
    make [2]: *** [src / START.ELF] 1 klaida
    CMakeFiles / Makefile2: 106: nepavyko instrukcijos tikslui „src / CMakeFiles / START.ELF.dir / all“
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] 2 klaida
    „Makefile“: 117: gedimas instrukcijose, skirtose tikslui „visi“
    make: *** [all] 2 klaida

    1.    AdrianArroyo gatvė sakė

      Atrodo, kad klaida yra ta, kad ji negali rasti „llibgcc“, nes turite 64 bitų versiją, o šiuo metu kompiliavimo sistema yra priversta naudoti 32 bitų. Turėtumėte įdiegti suderinamumo paketą į savo platintoją arba geriau, naudokite 32 bitų sistemą.

      1.    Ronaldo Rodriguezas sakė

        Turiu 32 bitus ir pasirodo ta pati klaida, ar turite omenyje operacinę sistemą ar architektūrą? mano yra 64 bitų, bet aš naudoju 32 bitų „Ubuntu“, neklauskite, finansinių problemų, todėl viską pasakau.

  41.   Jorge sakė

    Puiki tema, laukianti didesnės apimties. Cheers

  42.   Jhon sakė

    Puiku, tikiuosi dar daugiau

  43.   Venkite perezo sakė

    Sveiki, esu jaunas ambasadorius, norintis sukurti operacinę sistemą, palaikančią visas programas ir platformas, kad kūrėjams nereikėtų turėti galingų mašinų ar programų ar programų kompiuteryje.
    Štai kodėl mane domina šis įrašas, bet kai atsisiunčiu jūsų „git“ arba bandau jį sukurti, viskas veikia tol, kol įvykdysiu komandą ./iso.sh arba grub-mkrescue -o nextdivel.iso nextroot, gausite šią klaidą

    "Grub-mkrescue: įspėjimas: Jūsų xorriso nepalaiko" –grub2-boot-info ". Kai kurios funkcijos buvo išjungtos. Naudokite „xorriso 1.2.9“ arba naujesnę versiją.
    grub-mkrescue: įspėjimas: Jūsų xorriso nepalaiko „–grub2-boot-info“. Jūsų branduolio vaizdas per didelis. Disko įkrovimas išjungtas. Naudokite „xorriso 1.2.9“ arba naujesnę versiją .. »
    Tikrai neįsivaizduoju, nes daug žinau apie programas ir tinklus, bet nieko nežinau apie „grub“

    1.    AdrianArroyo gatvė sakė

      Jums gali tekti atnaujinti xorriso programą savo platintuve. Kokią distro ir versiją naudojate?

      1.    Venkite perezo sakė

        Aš naudoju „xubuntu 14.04lts“ ir bandau paleisti „xorriso“, bet apvalkalas man sako, kad jis negali jo rasti, ir aš gaunu apt-get install xorriso, nors nuoširdžiai tikėjausi tam tikro atsakymo, nes turėjau blogos patirties diegiant dalykus, kurių aš nežinau „Linux hehe“ . Atnaujinsiu dabar ir pasakysiu, kas nutiko

      2.    AdrianArroyo gatvė sakė

        Tada įdiekite „xorriso“ iš programinės įrangos centro arba tiesiog iš terminalo atlikite „sudo apt-get install xorriso“

      3.    Venkite perezo sakė

        Aš jau padariau viską, ką man sakėte, ir su „git“, ir su mano gaunu šį xorriso 1.3.2: „RockRidge“ failų sistemos manipuliatorius, „libburnia“ projektas.

        Pavaros srovė: -outdev 'stdio: nextdivel.iso'
        Žiniasklaidos srovė: „stdio“ failas, perrašomas
        Medijos būsena: tuščia
        Medijos suvestinė: 0 seansų, 0 duomenų blokų, 0 duomenų, 1901 m nemokamai
        Pridėta prie ISO atvaizdo: katalogas '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 failai pridėti per 1 sekundę
        xorriso: FAILURE: Negalima nustatyti šaltinio failo „/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot“ atributų: tokio failo ar katalogo nėra
        xorriso: UPDATE: 546 failai pridėti per 1 sekundę
        xorriso: aborting: -abort_on 'FAILURE' rado 'FAILURE'
        ir velvetas, nesuprantu, kad mano struktūra yra /nextroot/boot/grub/grub.cfg ir nextroot / next / START.ELF

      4.    Venkite perezo sakė

        Ačiū, aš pasiruošęs judėti į priekį, draugas man padėjo ir pasakė, ką aš padariau neteisingai, buvo katalogo organizavimas, todėl aš jį sutvarkiau ir viskas.

      5.    erik sakė

        Atsiprašau, ar galite man pasakyti, kokią procedūrą atlikote, nes nieko neįkeliu į klaidą: nėra tokio failo ar katalogo

        nėra įkrovos įrenginio.

  44.   Jose sakė

    Cheers! Aš ketinau jūsų paprašyti malonės, jei galėtumėte man atsiųsti el. Laišką su tuo, ką jūs čia paaiškinate, aš šiek tiek sutrikau ir turiu palyginti tai, ką turiu, su tuo, ką jūs paaiškinate, galbūt man neaišku, ar kuriant grub. cfg atliekamas terminalo gcc arba kur tiksliai? labai ačiū draugei!

    1.    AdrianArroyo gatvė sakė

      Sukuriate failą grub.cfg naudodami bet kurį teksto rengyklę ir turite jį išsaugoti PROJECT_FOLDER / boot / grub / grub.cfg

  45.   Džuazanas sakė

    Sveiki, Adrianai, visų pirma, sveikinu jus ir dėkoju už jūsų indėlį.

    Jūs žinote, kad tai darau dėl praktikos, ir aš pradėjau ją derinti vadovaudamasis jūsų vadovavimu, tačiau pradėjęs radau pirmąją klaidą

    $ as -o branduolys.o -c branduolys.asm
    bash: as: komanda nerasta ...
    Panašios komandos yra:
    „sa“
    „ac“

    Dirbu „fedora 20“ ir negaliu rasti sprendimo šiuo klausimu. Būčiau dėkingas už jūsų patarimus, ar turėčiau ką nors pakeisti dėl gcc ar dujų

    Iš anksto ačiū

    1.    AdrianArroyo gatvė sakė

      Turite įdiegti GAS, kad galėčiau pamatyti klaidos kodą. Neturiu po ranka „Fedora“, bet teoriškai, jei įdiegsite „gcc-c ++“, įdiegsite visą GCC rinkinį ir „GNU“, kaip paprastai būna kartu.

  46.   Gastonas Ramirezas sakė

    Aš esu su jumis, aš ką nors žinau apie C ++, C # (nors šis paskutinis nėra labai naudingas šiuo klausimu) blogas dalykas yra tas, kad man vis dar trūksta patirties, aš niekada nesusitvarkau su C kalba, jūsų leidinys yra puikus, Neturiu daug ką pasakyti, jei turiu laiko, matau. Ačiū.

  47.   Teresita del jezus nah sanchez sakė

    Labai ačiū už didelę pagalbą ...

  48.   jky sakė

    Aš myliu Linux tai geriausias rajonas yra tiesa mano langai yra šiukšlės, kad aš žinau, kad Linux kūrėjas yra langų kūrėjas

  49.   Važiavo sakė

    Sveiki, gaunu klaidą grub sako
    klaida: failas /next/START.ELF nerastas
    klaida: pirmiausia turite įkelti branduolį

    Ar galėtumėte man padėti ir ieškoti „Google“, bet nerandu

  50.   Enrikė Avila sakė

    Prašau, kaip aš galiu priversti jį rodyti „HELLO WORLD“ pranešimą, aš esu pradedantysis ir vis dar nepakankamai žinau

  51.   CARLOS GUERRERO ALVAREZ sakė

    Man nutinka taip:
    gcc -o START.ELF branduolys.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: perkėlimas R_X86_64_32 su simboliu `stack 'negali būti naudojamas kuriant PIE objektą; perkompiliuokite su -fPIE
    / usr / bin / ld: paskutinė nuoroda nepavyko: neatstovaujama išvesties dalis
    collect2: error: ld grąžino 1 išėjimo būseną