Emulimi i Linus Torvalds: Krijoni sistemin tuaj operativ nga e para (I)

Para së gjithash, komentoni se ky është artikulli im i parë dhe që ju uroj të gjithë ju pëlqen.

Linus Torvalët i lumtur

Në këtë seri ne do të imitojmë Linus Torvalds, ne do të krijojmë sistemin tonë operativ nga 0. Në këtë episod të parë do të shohim boot-in dhe do të vendosim një tekst në ekran nga kerneli ynë.

Në rastin tim thirret sistemi operativ NextDivel. Vendimi i parë që duhet të marrim sa më shpejt që të shqyrtojmë sistemin operativ është cili do të jetë bootloader?

Këtu ka variante të shumta, dhe ne madje mund të krijojmë një vetë; megjithatë në këtë udhëzues do të përdor GRUB, sepse shumica dinë pak a shumë diçka për të. Ne krijojmë një dosje që do të jetë rrënja e sistemit tonë operativ dhe aty krijojmë dosjen / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Aty krijojmë skedarin grub.cfg si më poshtë:

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

Në këtë skedar kemi parë se si GRUB do të ngarkojë bërthamën tonë, në këtë rast, në /next/START.ELF. Tani ne duhet të krijojmë bërthamën tonë.

Për këtë do të na duhet GCC y GAS (montuesi i projektit GNU, zakonisht vjen me gcc). Kështu që ne do të krijojmë bërthamën.

Së pari bëjmë një skedar të quajtur kernel.asm. Kjo skedar do të përmbajë pikën fillestare të kernelit tonë dhe gjithashtu do të përcaktojë multiboot (një tipar i disa bootloaders si p.sh. GRUB) Përmbajtja e kernel.asm do të jetë:

.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

Gjithçka që lidhet me multiboot është thjesht të ndjekësh specifikimet asgjë më shumë. Gjithçka do të fillojë në fillim, do të thërrasë multiboot_entry, ne do të kemi përcaktuar kokën multiboot në 4k-në e parë dhe do ta vendosim atë (me movl).

Më vonë ne e quajmë NextKernel_Main që është funksioni ynë i kernelit C. Në lak, ne ndalet për të ndaluar kompjuterin. Kjo përpilohet me:

as -o kernel.o -c kernel.asm

Tani do të hyjmë në programim në C. Do të mendoni se tani gjithçka është një copë tortë, ne vendosim një printf en kryesor dhe kjo është e gjitha, ne e kemi bërë atë.

Epo jo, pasi printf y kryesor Këto janë funksione që përcaktohen nga sistemi operativ, por ne po i krijojmë ato! Ne mund të përdorim vetëm funksionet që i përcaktojmë vetë.

Në kapitujt e mëvonshëm do të flas se si të vendosim bibliotekën tonë C (glibc, bionic, newlibc) por kohë pas kohe. Ne kemi biseduar që duam të vendosim tekst në ekran, mirë do të shohim se si ta bëjmë atë.

Ka dy mundësi, njëra është të telefononi BIOS dhe një tjetër është menaxhimi i kujtesës në ekran direkt. Ne do të bëjmë këtë të fundit sepse është më i qartë nga C dhe gjithashtu do të na lejojë ta bëjmë kur të hyjmë në modalitetin e mbrojtur.

Ne krijojmë një skedar të quajtur NextKernel_Main.c me përmbajtjen vijuese:

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

Me këtë manipulojmë drejtpërdrejt me kujtesën VGA dhe karakter për karakter po e shkruajmë. Ne përpilojmë duke çaktivizuar stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Nëse e keni arritur deri më tani, do të dëshironi të provoni sistemin tuaj të ri operativ tani, por ne nuk kemi mbaruar ende. Ne kemi nevojë për një skedar të vogël që i tregon përpiluesit se ku në skedar të lërë secilin seksion. Kjo është bërë me një skenar lidhës. Ne krijojmë 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 = .;
}

Me këtë ne përcaktojmë pozicionin e secilit seksion dhe pikën e hyrjes, fillimin, që kemi përcaktuar në kernel.asm. Tani mund ta bashkojmë të gjithë këtë shpikje:

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

Tani ne kopjojmë START.ELF tek / tjetri brenda dosjes tonë që simulon rrënjën e sistemit tonë operativ. Ne shkojmë në dosjen rrënjë të sistemit tonë të ri operativ me tastierë dhe verifikojmë që ekzistojnë dy skedarë: një /boot/grub/grub.cfg dhe një tjetër /next/START.ELF.

Ne shkojmë në direktorinë e sipërme dhe thërrasim një vegël të krijimit ISO me GRUB të thirrur grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Pasi ta kemi bërë këtë do të kemi një ISO. Ky ISO mund të hapet në kompjuter x86 (64 bit gjithashtu) dhe makinat virtuale. Për ta provuar, do të përdor QEMU. Ne e quajmë QEMU nga rreshti i komandës:

qemu-system-i386 nextdivel.iso

Do të fillojë DetiBIOS dhe më vonë do të kemi GRUB. Më vonë nëse gjithçka është e saktë do të shohim frazën tonë.
Ju do të mendoni se kjo është e vështirë, unë ju përgjigjem, po është.

Realisht krijimi i një sistemi operativ është i vështirë dhe se ky këtu nuk bën ndonjë gjë të dobishme. Në kapitujt e ardhshëm do të shohim se si të trajtojmë ngjyrat në ekran, të rezervojmë kujtesën dhe nëse mundem, si të marr të dhëna nga tastiera.

Nëse dikush nuk dëshiron të kopjojë gjithçka këtu, unë kam një depo në GitHub (më i përpunuar) me sistemin operativ NextDivel. Nëse dëshironi të përpiloni NextDivel thjesht duhet të keni git dhe 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

Unë ju inkurajoj të bashkëpunoni në NextDivel nëse keni kohë dhe dëshirë për të krijuar një sistem operativ. Ndoshta edhe më superior se Linux ... koha do ta tregojë.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   i gjallë dijo

    :O

    1.    marianogaudix dijo

      Torvalds e çoi sistemin operativ Minix (rrjedh nga UNIX) te Andrew S. Tanenbaum dhe e përmirësoi atë.

      Tanenbaum ka pasur një luftë me Linus, ata fyen njëri-tjetrin. Tanenbaum thotë se Microkernel është e ardhmja (HURD, Minix kon i ri Microkernel).

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

  2.   eliotime3000 dijo

    Ky ka qenë postimi më i mirë që kam parë deri më tani në këtë blog. Unë tashmë dua të di se çfarë tjetër të bëj.

  3.   Carlos Gude dijo

    Bëni përshtypje

  4.   bosht dijo

    Me të vërtetë mbresëlënëse !!

  5.   rhoconlinux dijo

    FUUUUUUA!
    Postshtë postimi më i mirë që kam parë ndonjëherë. Urime Adrián, një artikull lavire! hiper interesante !!! 🙂

    1.    Joaquin dijo

      Pajtohem Unë e imagjinoj këtë situatë:
      Përdorues i GNU / Linux Power (me një fytyrë të lumtur):
      "Unë tashmë di si të përpiloj Gentoo tim"

      Nerd (me përbuzje): «pff, unë kam krijuar distro tim ...»

      1.    desikoder dijo

        Po, unë mund të krijoj distro tim linux. Në fakt në të po zhvilloj një initramf dhe një bërthamë për linux-in e ngulitur. Nuk është e njëjta gjë për të krijuar një sistem operativ sesa një distro linux. E para është shumë më e vështirë, pothuajse e pamundur, e dyta, siç keni thënë, mund të jetë gjithçka, madje edhe Ubuntu me logon xD të ndryshuar. Kështu që do ta lija kështu:

        Përdorues i Fuqisë GNU / Linux (me një fytyrë të lumtur)
        - Unë tashmë di si ta përpiloj Gentoo tim

        Gjysmë-Nerd
        - Pff, unë kam ndjekur një linux nga e para dhe kam bërë distro-n time

        Nerd (me qëndrim përbuzës)
        - pff, sepse kam programuar një bërthamë në montues dhe në C

        Përshëndetje!

  6.   Cronos dijo

    Kjo është interesante për mua, në pritje të kapitujve të mëposhtëm.

  7.   abimaelmartell dijo

    E pashë këtë udhëzues disa kohë më parë, është për C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Faleminderit për lidhjen, do ta hedh një vështrim.

  8.   Jose Jácome dijo

    Unë do të doja një sistem operativ 100% i pajtueshëm me grafikë AMD: /

    1.    ivanlinux dijo

      Dritaret

      1.    Jose Jácome dijo

        hahaha në Windows Catalyst nuk ka mbështetje OpenGL, megjithëse në Linux nuk mund të përdor të gjithë fuqinë grafike që do të pres të shoh se çfarë do të ndodhë!

        1.    Shpërndaj dijo

          thjesht prisni që valvula të zhdukë tregun

  9.   KZKG ^ Gaara dijo

    Kontribut i magjishëm, i përsosur, i shkëlqyeshëm, duket si një seri e shkëlqyer postimesh

  10.   O_Piksot_O dijo

    Buah Unë do të doja të dija si të programoja që të jem në gjendje t'ju ndihmoj, thjesht si një mënyrë praktikimi me njohuritë që po mësoni dhe një ndihmon. Tani për tani ju lë moton për të tërhequr vëmendjen e projektit sapo ta përfundoni atë "Përdorni NextDivel, pornografia duket e njëjtë (ose më mirë).", Ju do të fshini xD.

  11.   ky emër i rremë dijo

    Mooooooolaaa !!!!

  12.   nordi dijo

    Artikull shumë i mirë, por thjesht kurioz pse nuk e keni ndjekur projektin Linux From Scratch?

    të fala

    1.    AdrianArroyoStreet dijo

      Epo, Linux nga Scratch është mirë, dhe mund të thuash se është e jotja, por me të vërtetë është shumë mekanike:
      -Shkarkoni shkronjat
      -Patçini ato
      -Kompiloni
      -Instalo
      -Në vijim
      Këtu, edhe nëse rezultati është më i keq në fund, mund të thuash se i ke shqyrtuar të gjitha skedarët.

    2.    desikoder dijo

      Siç është e qartë nga komenti im i mëparshëm, sepse nuk ka të njëjtin nivel kompleksiteti. Për më tepër, linux nga e para nuk është në të vërtetë, në kundërshtim me emrin e tij, duke krijuar një sistem nga e para. Krijimi i një sistemi nga e para është programimi vetë, duke shkruar kernelin tuaj, jo kernelin linux, nëse është e mundur edhe bootloader tuaj në vend të grub, lilo, syslinux, etj. Megjithëse një AFP nuk është diçka e vogël dhe është mjaft komplekse, ai nuk i afrohet as programimit të bërthamës tuaj ...

      Për më tepër, unë pajtohem me AdrianArroyo Calle që është shumë mekanike, e kam lexuar diku dhe përfundon të heqësh dorë në faqen e gjashtë, ata gjithashtu të thonë që të përdorësh versionet e paketave sepse përndryshe udhëzimet nuk funksionojnë (kjo tregon mungesën e fleksibilitetit , Per mendimin tim ). Mendoj se është më mirë të kesh diçka nga ideja jote, përpilo ​​paketat që dëshiron, madje programon disa, përpilo ​​një bërthamë linux dhe në paqe.

      Përshëndetje!

  13.   biskotë dijo

    uuuoooohh !! Unë kurrë nuk kam kapur një postim aq sa ka bërë ky.
    Ju lutemi vazhdoni

  14.   linux_user dijo

    Unë nuk e di se çfarë është e gabuar:

    gabim: nuk u gjet asnjë titull multiboot.
    gabim ju duhet të ngarkoni më parë kernelin

    1.    AdrianArroyoStreet dijo

      Nëse është ndonjë ngushëllim, kam bërë të njëjtin gabim. Mundohuni të përdorni burimet që janë në GitHub, atje gabimi është zgjidhur tashmë. Gjithsesi mendoj se nëse ndryshoni vijën grub.cfg nga "multiboot /next/START.ELF" në "kernel /next/START.ELF" mund të funksionojë. Unë nuk e di saktësisht.

      1.    mcbanane dijo

        Para së gjithash, hyrja madhështore
        Unë kam të njëjtin problem duke ngarkuar kernelin nga grub. Edhe përdorimi i burimeve të GitHub ose ndryshimi i multiboot për kernel ...

        gabim: nuk u gjet asnjë titull multiboot.
        gabim: nuk ka bërthamë të ngarkuar

        1.    AdrianArroyoStreet dijo

          A jeni duke përdorur zhargonin si përpilues? Ndryshojeni atë për gcc
          A keni kujtuar të përdorni skenarin e lidhësit? Shtë e nevojshme që lidhësi (ld në rastin tonë) të dijë se ku në skedar do të vendosë çdo gjë. Në këtë rast, header multiboot duhet të jetë në fillim.
          A jeni duke përdorur sistemin CMake? Nëse e përdorni mendoj se nuk dështon.
          Nëse nuk funksionon për ju, do të përpiqem të gjej një zgjidhje tjetër.

  15.   xhurat dijo

    [+100]
    Thjesht fantastike !!!

  16.   invisible15 dijo

    Reallyshtë vërtet bukur cool

  17.   tanrax dijo

    Heq kapelën. Post mbresëlënës. Urime

  18.   njeri dijo

    Uau!
    Do të ishte mirë nëse mund të hapni aplikacione të bëra në HTML5 dhe Javascript pa pasur nevojë të përdorni një shfletues, është e mundur?
    Unë jam duke folur në lidhje me ata që janë si aplikacionet vendase.
    Kështu që do të ishte e lehtë të programohej për këtë sistem operativ

    1.    AdrianArroyoStreet dijo

      Në këtë rast unë nuk do ta bëj atë sepse kërkon shumë më shumë punë pas tij, por ekziston një sistem operativ i quajtur "është" që bën atë që thua ti. Në fakt rreshti i komandës është JavaScript dhe dritaret vizatohen duke përdorur funksionet JavaScript Canvas. Inxhinierët e Nintendo e bënë atë dhe tani është me burim të hapur.

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

      1.    njeri dijo

        Valla, faleminderit për informacionin
        Do të hedh një vështrim

  19.   patodx dijo

    Kushdo që mund të krijojë një OS të vet mund të vdesë i qetë, pasi niveli intelektual duhet të arrijë me të; Kjo e bën atë të largohet nga parajsa ose ferri.
    Pjesë e postimit.

    1.    Miguel dijo

      deri më tani askush nuk dihet të ketë bërë vetëm diçka që mund të thuhet se është një sistem i mirë operativ i bërë nga e para, madje as Linux Torvalds siç thoni ju në fillim, pasi kjo filloi nga burimet e Unix dhe gjithçka tjetër është autore në e zakonshme për më shumë se një person, jeta është shumë e shkurtër dhe duke filluar nga e para është e paimagjinueshme për këdo, edhe nëse kërkohet e kundërta, është e demonstrueshme në shumë gabime të bëra në kopjimin dhe ngjitjen nga Linux Torvalds

      1.    skarmiglione dijo

        Burimet e unix janë të mbyllura, përdorimi i minix ... që është diçka tjetër.

      2.    Philip Robaina dijo

        dhe ata që bënë QDOS çfarë?
        ishin bazuar ne dicka?

  20.   Tesla dijo

    Nga sa shoh unë, kush nuk ka sistemin e vet operativ është sepse nuk dëshiron, hahahaha.

    Tani seriozisht, shumë interesante! Shumë është përtej njohurive të mia të kufizuara programore, por unë do të lexoj pjesët e tjera të kësaj serie me pritje.

    Faleminderit për postimin!

  21.   Manuel R. dijo

    Më la me një fytyrë O_O ... pa synimin për të nënvlerësuar kontributet e askujt, është më "pro" që kam parë kohët e fundit. Të fala.

  22.   aitor_cz dijo

    Artikull shumë i mirë, Adrián. Ju lutem vazhdoni…

  23.   mj dijo

    A po bëni shaka në Ditën e Gënjeshtrave të Prillit?, Mos jini mesatar "Të imitoni Linus Torvalds: Krijoni sistemin tuaj operativ nga e para". Nuk mendoj se është e vështirë për ata që po ndjekin karrierën në ndonjë institut të teknologjisë ose universitet; por për mua unë jam një shigjetar fillestar (ka nga ata që thonë "Noob" por unë e konsideroj veten më Newbie disi dembel) që tingëllon si të mos shkelësh në tokë. Gjithsesi, ky artikull krijon shumë kuriozitet dhe pa një admirim dhe dyshim të dyshimtë për redaktorin e saj, urime; Gjëja e parë që do të bëj është të përpiqem të kuptoj të paktën pak nga ky material i vlefshëm.
    FALEMINDERIT Adrian Arroyo Calle, punë e shkëlqyeshme dhe ofrim fisnik i njohurive.

  24.   Bler Paskal dijo

    LEL Postim i shkëlqyeshëm, vazhdo kështu.

  25.   f3niX dijo

    Çfarë postimi i mrekullueshëm, kjo është ajo që më ka marrë malli desde linux. E mrekullueshme.

  26.   rubin dijo

    Post i shkëlqyeshëm, faleminderit shumë.
    Nuk e kuptova se çfarë bën skedari link.ld, a mund të ma shpjegojë dikush?

    1.    AdrianArroyoStreet dijo

      Skedari link.ld i tregon lidhësit (në këtë rast ld) ku secila pjesë e kodit duhet të jetë në skedarin që rezulton. Ne gjithashtu përcaktojmë pikën hyrëse pasi që pasi nuk kemi një sistem operativ nuk mund ta përdorim main si një program normal, në këtë rast zgjedhim funksionin start.

  27.   Maxi dijo

    E shkëlqyeshme gjithë postimi juaj! Në pritje të 7! Po sikur të kisha një dyshim, për shembull, nëse do të doja të ekzekutoja vetëm një algoritëm, pa OS, si mund ta di se çfarë mund të përdor dhe çfarë jo C?

    1.    AdrianArroyoStreet dijo

      Nëse e përdorni kështu, nuk do të ishit në gjendje të përdorni asgjë nga stdlib, e cila është praktikisht ajo që përdor të gjithë (pa malloc, free, printf, scanf, strcmp, etj). Gjithçka duhet të implementohet drejtpërdrejt nga memoria ose ASM. Ndoshta në një kapitull më të lartë unë do t'ju tregoj se si të instaloni një bibliotekë C për sistemin operativ. Nëse përdorni C ++ nuk mund të përdorni përjashtime dhe operatorët e rinj dhe të fshini (dhe sigurisht më shumë).

    2.    Më e zezë dijo

      Unë mendoj kjo mund t'ju japë një ide më të mirë se si ta bëni.

  28.   Esteban dijo

    Përshëndetje, rreth 5 vjet më parë ndoqa një botim të ngjashëm dhe zhvillova një mikrokernel që fillon në të njëjtën mënyrë, ka disa aspekte për tu përmirësuar, por mund t'ju interesojë, funksionon në mënyrë të mbrojtur, ekzekuton shumë detyra dhe kryen virtualizimin e kujtesës, kohët e fundit kam punuar në të shoferi i diskut dhe cd për ta bërë të instalueshëm dhe jo vetëm të funksionojë në cd drejtpërdrejt ... Përshëndetje.

  29.   Johan dijo

    I dashur, unë kam një gabim gjatë ekzekutimit të komandës:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 gabim sintakse
    Collect2: gabim: ld ktheu 1 statusin e daljes

    lidhje.ld
    Me = 0x00100000;
    .motoboot_header: {
    * (. kokë multiboot)
    }

    Në rreshtin 5 nuk e shoh gabimin, a ka dikush të njëjtën gjë?

    Po punoj me një debian të virtualizuar në virtualbox

    1.    Julian Reyes Escrigas imazhi i mbajtësit të vendit dijo

      shtoni ";" në fund të * (. multiboot_header)

  30.   Eric Orellana Romero dijo

    Nismë e shkëlqyeshme, unë patjetër do të ndjek kapitujt e këtij postimi, duke synuar të mësoj shumë prej tij. Faleminderit shumë që morët kohë të na mësoni. Një detaj i vetëm në lidhje me këtë, duhet të theksohet se Linus Torvalds nuk është krijuesi i ndonjë sistemi operativ, ai krijoi Kernelin e sistemit GNU / Linux (ai që është përdorur në sistemin tjetër operativ), i cili është ende i vlefshëm, por është Importantshtë e rëndësishme të kreditosh Richard Stallman për krijimin e shumicës së sistemit operativ.

    Faleminderit shumë për kontributin dhe shpresoj të merrni parasysh vëzhgimin tim.

  31.   Julian Reyes Escrigas imazhi i mbajtësit të vendit dijo

    Kam kohë që jam ngatërruar me këtë temë, u interesova sapo lexova titullin. por mesazhi vazhdon të marrë

    gabim: nuk u gjet asnjë titull multiboot.
    gabim ju duhet të ngarkoni më parë kernelin

    Unë kam ngarkuar atë që marr në një repo në github https://github.com/rkmax/GenyOS

    1.    martin villalba dijo

      E njëjta gjë më ndodh. A e gjetët zgjidhjen?

  32.   Carlos dijo

    një pyetje që fillova të prezantoj sintaksën dhe linja e menuve më tregon komandën nuk u gjet kush mund të më tregonte pse
    kjo është ajo që bëj unë

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: komanda nuk u gjet

    1.    AdrianArroyoStreet dijo

      Përmbajtja e kësaj përmbajtje nuk duhet të futet në rreshtin e komandës, por në skedarin që krijoni të quajtur grub.cfg

  33.   Nodetin dijo

    Artikull i shkëlqyeshëm, faleminderit!

  34.   David dijo

    Spektakolare… !! është tamam si hallka që mungon.

  35.   r.garciag dijo

    Unë i dua udhëzimet e tua Emulated LInus Torvalds, por ekziston një hap që nuk e kuptoj, si më poshtë:
    Tani ne kopjojmë START.ELF tek / tjetri brenda dosjes tonë që simulon rrënjën e sistemit tonë operativ. Ne shkojmë në dosjen rrënjë të sistemit tonë të ri operativ me tastierë dhe verifikojmë që ekzistojnë dy skedarë: një /boot/grub/grub.cfg dhe një tjetër /next/START.ELF.

    Ne shkojmë në direktorinë e sipërme dhe thërrasim një mjet krijimi ISO me GRUB të quajtur grub-mkrescue

    A mund të ma shpjegojë dikush: f

    1.    AdrianArroyoStreet dijo

      Thjesht për të gjeneruar një ISO minimale që GRUB mund të ngarkojë, ne kopjojmë bërthamën në (/ e ISO, çdo dosje) /next/START.ELF dhe skedarin e konfigurimit GRUB në (/ të ISO, çdo dosje) / boot /grub/grub.cfg. Pasi të jetë bërë, ne ende nuk e kemi instaluar GRUB në ISO dhe ekziston një vegël që gjeneron ISO nga një dosje dhe instalon GRUB të quajtur grub-mkrescue. Atëherë më në fund do të përfundonim me një ISO bootable që ka të instaluar GRUB, i cili mund të lexojë konfigurimin për të ekzekutuar më vonë START.ELF saktë. Nuk e di nëse e kam shpjeguar veten, por ajo që bëjmë është një lloj sistemi i rremë i skedarëve me të cilin gjenerojmë një ISO.

  36.   Miguel Jose Guevara atencio dijo

    Madhe

  37.   Michael Moreno dijo

    Epo, shikoni me të vërtetë në një sistem të ri jo aq shumë, por nëse përmirësoni linux, për shembull, krijoni një eksonukleus linux me një komponent serveri që vepron si mikronukleus nëse dëshironi, domethënë një strukturë exo me sjellje mikronukleus që do të ishte super dhe linux.

    Gjëja tjetër është se unë nuk jam një ekspert në programim, vetëm disa c ++ me djathë dhe disa java, do të ishte e mjaftueshme për mua t'i jepja programit të kernel linux një modul, duke e gutting, modifikuar atë etj.

  38.   Ushtari i Dimrit53 dijo

    Pa dyshim që tashmë duhet të bëj me pushime.

  39.   Fermin dijo

    Ky i mirë dhe në cilin program e harton dhe e kodon atë?
    te lutem me jep ate pergjigje

  40.   Mendje e errët dijo

    Kur përpiloj nga programi juaj marr:

    [jmponce @ jar build] $ cmake ..
    - Krijimi i direktorisë NextRoot
    - Gjenerimi i skriptit ISO
    bëj DESTDIR = instalimi tjetër
    ./iso.sh
    - Gjetur oksigjen: / usr / bin / dooksigjen (versioni i gjetur "1.8.9")
    - Konfigurimi u krye
    - Gjenerimi u bë
    - Skedarët e ndërtimit janë shkruar në: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ bëjë
    Varësia e skanimit të synuar START.ELF
    [7%] Ndërtimi i objektit ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Ndërtimi i objektit CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Lidhja e fillimit të ekzekutueshëm të CXX. VETF
    / usr / bin / ld: E papajtueshme /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a kapërcehet ndërsa kërkon -lgcc
    / usr / bin / ld: nuk mund ta gjej -lgcc
    mbledhje2: gabim: ld kthehet statusi i daljes 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Udhëzime të dështuara për target 'src / START.ELF'
    bëj [2]: *** [src / START.ELF] Gabimi 1
    CMakeFiles / Makefile2: 106: Udhëzime të dështuara për target 'src / CMakeFiles / START.ELF.dir / all'
    bëj [1]: *** [src / CMakeFiles / START.ELF.dir / të gjitha] Gabimi 2
    Makefile: 117: Dështimi në udhëzimet për 'të gjithë' të synuar
    bëj: *** [të gjitha] Gabimi 2

    1.    AdrianArroyoStreet dijo

      Gabimi duket se është se nuk mund të gjejë llibgcc pasi që ju keni versionin 64-bit dhe aktualisht sistemi i ndërtimit është i detyruar të përdor 32-bit. Ju duhet të instaloni një paketë pajtueshmërie në distro ose më mirë, të përdorni një sistem 32-bit.

      1.    Ronaldo Rodríguez dijo

        Unë kam 32 bit dhe shfaqet i njëjti gabim, a keni parasysh sistemin operativ apo arkitekturën? imi është 64 bit, por unë jam duke përdorur 32 bit Ubuntu, mos pyet, probleme financiare, me këtë i them të gjitha.

  41.   Jorge dijo

    Tema e shkëlqyeshme, duke pritur një shtrirje më të madhe. Brohoritje

  42.   Jhon dijo

    E madhe shpresoj për më shumë

  43.   Soid perez dijo

    Përshëndetje, unë jam një ambasador i ri që dëshiroj të krijoj një sistem operativ që mbështet të gjitha programet dhe platformat në mënyrë që zhvilluesit të mos duhet të kenë makina të fuqishme ose aplikacione ose programe në një kompjuter.
    kjo është arsyeja pse unë jam i interesuar për këtë post, por kur unë shkarkoj git tuaj ose përpiqem ta krijoj atë, gjithçka shkon mirë derisa të ekzekutoj komandën.

    "Grub-mkrescue: paralajmërim: xorriso juaj nuk mbështet" –grub2-boot-info ". Disa karakteristika janë çaktivizuar. Përdorni xorriso 1.2.9 ose më vonë ..
    grub-mkrescue: paralajmërim: xorriso juaj nuk mbështet "–grub2-boot-info". Imazhi juaj i kernelit është shumë i madh. Nisja e diskut është çaktivizuar. Përdorni xorriso 1.2.9 ose më vonë .. »
    Unë me të vërtetë nuk kam asnjë ide pasi që di shumë për aplikacionet dhe rrjetat, por nuk di asgjë për grub

    1.    AdrianArroyoStreet dijo

      Ju mund të duhet të azhurnoni programin xorriso në distro. Çfarë distro dhe versioni përdorni?

      1.    Soid perez dijo

        Unë përdor xubuntu 14.04lts dhe përpiqem të ekzekutoj xorriso por guaska më thotë se nuk mund ta gjejë atë dhe unë marr apt-get install xorriso edhe pse sinqerisht prisja ndonjë përgjigje sepse kisha një përvojë të keqe duke instaluar gjëra që nuk i di në linux hehe. Do ta azhurnoj tani dhe do të tregoj se çfarë ka ndodhur

      2.    AdrianArroyoStreet dijo

        Pastaj instaloni xorriso nga qendra e softuerit ose thjesht nga terminali bëni "sudo apt-get install xorriso"

      3.    Soid perez dijo

        Unë tashmë bëra gjithçka që më thatë dhe si me git ashtu edhe me timen e marr këtë xorriso 1.3.2: manipuluesin e sistemit të skedarëve RockRidge, projektin libburnia.

        Drejtoni rrymën: -outdev 'stdio: nextdivel.iso'
        Rryma e medias: skedari stdio, i mbishkrueshëm
        Statusi i medias: është bosh
        Përmbledhje mediatike: 0 seanca, 0 blloqe të dhënash, 0 të dhëna, 1901 milion falas
        Shtuar në imazhin ISO: direktoria '/'='/tmp/grub.OEqSzV'
        xorriso: UPDATE: 546 skedarë të shtuar në 1 sekonda
        xorriso: DILSHTIM: Nuk mund të përcaktohen atributet e skedarit burimor '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Asnjë skedar apo direktori e tillë
        xorriso: UPDATE: 546 skedarë të shtuar në 1 sekonda
        xorriso: aborting: -abort_on 'FAILURE' has 'FAILURE'
        Dhe pantallona kadifeje nuk e kuptoj strukturën time është /nextroot/boot/grub/grub.cfg dhe nextroot / next / START.ELF

      4.    Soid perez dijo

        Faleminderit, unë jam gati të shkoj përpara, një mik më ndihmoi dhe më tha atë që bëra gabim ishte organizimi i drejtorisë, kështu që unë e zgjidha atë dhe kaq

      5.    erik dijo

        Më falni, a mund të më tregoni se çfarë procedure keni kryer pasi nuk kam asnjë gabim për të nisur: asnjë skedar apo direktori të tillë

        pa pajisje bootable.

  44.   jose dijo

    Gëzuar! Unë do të të kërkoja favor nëse mund të më dërgosh një email me atë që shpjegon këtu, unë jam hutuar pak dhe duhet të krahasoj atë që kam me atë që shpjegon, ndoshta ajo që nuk është e qartë për mua është nëse krijimi i grub. cfg bëhet në terminalin gcc apo ku saktësisht? faleminderit shume mik!

    1.    AdrianArroyoStreet dijo

      Ju krijoni skedarin grub.cfg me ndonjë redaktues teksti dhe duhet ta ruani në PROJECT_FOLDER / boot / grub / grub.cfg

  45.   Xhuazano dijo

    Përshëndetje Adrian, së pari, ju përgëzoj dhe faleminderit për kontributin tuaj.

    Ju e dini që unë po e bëj këtë për një praktikë dhe fillova ta bashkoj duke ndjekur tutorin tuaj, megjithatë pasi fillova gjeta gabimin e parë

    $ si -o kernel.o -c kernel.asm
    bash: si: komanda nuk u gjet ...
    Komanda të ngjashme janë:
    'sa'
    'ac'

    Unë jam duke punuar në fedora 20, dhe nuk mund të gjej një zgjidhje në këtë drejtim, unë do të vlerësoja udhëzimet tuaja nëse duhet të ndryshoj diçka në gcc ose gaz

    paraprakisht faleminderit

    1.    AdrianArroyoStreet dijo

      Ju duhet të instaloni GAS në mënyrë që të shoh kodin e gabimit. Unë nuk kam Fedora në dorë, por në teori nëse instaloni gcc-c ++ ju do të instaloni të gjithë kompletin GCC dhe GNU Siç vjen zakonisht me të.

  46.   Gaston Ramirez dijo

    Unë jam me ju, di diçka për C ++, C # (megjithëse kjo e fundit nuk është shumë e dobishme në këtë çështje) e keqja është se unë ende nuk kam përvojë, kurrë nuk merrem me gjuhën C, botimi juaj është i shkëlqyeshëm, nuk kam shumë për të thënë nëse kam kohë e shoh. Faleminderit.

  47.   Teresita e Jesus Nah Sanchez dijo

    Faleminderit shumë për ndihmën e madhe.

  48.   jky dijo

    Unë e dua linux-in është rrethi më i mirë që ekziston, e vërteta për dritaret e mia është hedhurina për një që unë e di që krijuesi i linux-it është krijuesi i dritareve

  49.   Hipur dijo

    Përshëndetje Kam një gabim në grub thotë
    gabim: skedari / tjetër / START.ELF Nuk u gjet
    gabim: së pari duhet të ngarkoni bërthamën

    A mund të më ndihmoni dhe të bëni google por nuk mund ta gjej

  50.   Henri Avila dijo

    Ju lutem, si mund ta bëj atë të tregojë mesazhin HELLO WORLD? Unë jam një fillestar dhe ende nuk di sa duhet

  51.   CARLOS GUERRERO ALVAREZ dijo

    Më ndodh më poshtë:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: zhvendosja R_X86_64_32 kundër simbolit "pirg" nuk mund të përdoret kur bën një objekt PIE; rikompiloni me -fPIE
    / usr / bin / ld: lidhja përfundimtare dështoi: seksioni që nuk përfaqësohet për prodhimin
    Collect2: gabim: ld ktheu 1 statusin e daljes