Paggaya sa Linus Torvalds: Lumikha ng iyong sariling operating system mula sa simula (I)

Una sa lahat, magbigay ng puna na ito ang aking unang artikulo at sana magustuhan ninyong lahat.

Linus Torvals masaya

Sa seryeng ito ay tutularan natin Linus Torvalds, lilikha namin ang aming operating system mula sa 0. Sa unang yugto na ito makikita namin ang boot at maglalagay kami ng isang teksto sa screen mula sa aming kernel.

Sa aking kaso ang operating system ay tinawag SusunodDivel. Ang unang desisyon na dapat nating gawin sa lalong madaling isaalang-alang natin ang operating system ay ano ang magiging bootloader?

Dito maraming mga pagkakaiba-iba, at maaari pa kaming lumikha ng isa sa aming sarili; gayunpaman sa tutorial na ito ay gagamitin ko GRUB, dahil ang karamihan ay may nalalaman tungkol sa kanya tungkol sa higit pa. Lumilikha kami ng isang folder na magiging ugat ng aming operating system at doon namin nilikha ang folder na / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Doon nilikha namin ang grub.cfg file tulad ng sumusunod:

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

Sa file na ito nakita natin kung paano GRUB mai-load ang aming kernel, sa kasong ito, sa / sunod /START.ELF. Ngayon dapat nating likhain ang aming kernel.

Para dito kakailanganin natin ang GCC y GAS (ang nagtitipon ng proyekto GNU, karaniwang kasama ng gcc). Kaya't lilikha kami ng kernel.

Una naming gumawa ng isang file na tinatawag na kernel.asm. Maglalaman ang file na ito ng panimulang punto ng aming kernel at tatukoyin din ang multiboot (isang tampok ng ilang mga bootloader tulad ng GRUB). Ang nilalaman ng kernel.asm ay magiging:

.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

Lahat ng nauugnay sa multiboot ay sundin lamang ang detalye na wala nang iba. Magsisimula ang lahat sa simula, tatawag ito sa multiboot_entry, matutukoy namin ang multiboot header sa unang 4k at ilalagay namin ito (na may Movl).

Mamaya tawagan namin ang NextKernel_Main na kung saan ay ang aming kernel C function. Huminto kami sa loop upang ihinto ang computer. Pinagsasama ito sa:

as -o kernel.o -c kernel.asm

Ngayon ay papasok kami sa programa sa C. Sa tingin mo na ngayon ang lahat ay isang piraso ng cake, naglagay kami ng printf en pangunahin at yun lang, nagawa na natin.

Well hindi, simula noon printf y pangunahin ang mga ito ay mga pagpapaandar na tinukoy ng operating system, ngunit nilikha namin sila! Magagamit lamang namin ang mga pagpapaandar na tinukoy namin sa aming sarili.

Sa mga susunod na kabanata ay pag-uusapan ko kung paano maglagay ng aming sariling C library (glibc, bionic, newlibc) ngunit oras-oras. Pinag-usapan namin na nais naming maglagay ng teksto sa screen, makikita namin kung paano namin ito ginagawa.

Mayroong dalawang mga pagpipilian, ang isa ay upang tawagan ang BIOS at isa pa ay upang pamahalaan ang memorya ng screen nang direkta. Gagawin namin ang huli dahil mas malinaw ito mula sa C at papayagan din kaming gawin ito kapag pumasok kami sa protektadong mode.

Lumilikha kami ng isang file na tinatawag na NextKernel_Main.c na may sumusunod na nilalaman:

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

Sa pamamagitan nito direkta naming manipulahin ang memorya VGA at tauhan ayon sa karakter isinusulat namin ito. Nag-iipon kami sa pamamagitan ng hindi pagpapagana ng stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Kung nagawa mo ito hanggang ngayon, gugustuhin mong subukan ang iyong bagong-bagong operating system ngayon, ngunit hindi pa kami tapos. Kailangan namin ng isang maliit na file na nagsasabi sa tagatala kung saan sa file na iwanan ang bawat seksyon. Ginagawa ito sa isang script ng linker. Lumilikha kami ng 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 = .;
}

Sa pamamagitan nito tinukoy namin ang posisyon ng bawat seksyon at ang entry point, simula, na tinukoy namin sa kernel.asm. Ngayon ay maaari nating pagsamahin ang lahat ng concoction na ito:

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

Ngayon kinokopya namin ang Start.ELF sa / susunod sa loob ng aming folder na tumutulad sa ugat ng aming operating system. Pumunta kami sa root folder ng aming bagong operating system gamit ang console at i-verify na mayroong dalawang mga file: isa /boot/grub/grub.cfg at isa pang / sunod /START.ELF.

Pumunta kami sa itaas na direktoryo at tumawag sa isang utility ng paglikha ng ISO na tinatawag na GRUB grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Kapag nagawa na natin ito magkakaroon tayo ng ISO. Ang ISO na ito ay maaaring buksan sa mga computer x86 (64 bit din) at virtual machine. Upang subukan ito, gagamitin ko QEMU. Tinatawag namin QEMU mula sa linya ng utos:

qemu-system-i386 nextdivel.iso

Magsisimula na SeaBIOS at sa paglaon magkakaroon tayo GRUB. Mamaya kung ang lahat ay tama makikita natin ang aming parirala.
Aakalain mong mahirap ito, sasagutin kita, oo ito.

Ang tunay na paglikha ng isang operating system ay mahirap at ang isang ito dito ay hindi gumawa ng anumang kapaki-pakinabang. Sa hinaharap na mga kabanata makikita natin kung paano hawakan ang mga kulay sa screen, magreserba ng memorya at kung maaari ko, kung paano makakuha ng data mula sa keyboard.

Kung ang isang tao ay hindi nais na kopyahin ang lahat dito, mayroon akong isang imbakan sa GitHub (mas detalyado) sa operating system SusunodDivel. Kung nais mong mag-ipon SusunodDivel kailangan mo lang magkaroon ng git at 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

Hinihimok kita na makipagtulungan sa NextDivel kung mayroon kang oras at pagnanais na lumikha ng isang operating system. Marahil kahit na higit sa Linux ... sasabihin ng oras.


85 na puna, iwan mo na ang iyo

Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   masigla dijo

    :O

    1.    marianogaudix dijo

      Kinuha ng Torvalds ang Minix operating system (nagmula sa UNIX) kay Andrew S. Tanenbaum at pinahusay ito.

      Si Tanenbaum ay nakipaglaban kay Linus, ininsulto nila ang bawat isa. Sinabi ni Tanenbaum na ang Microkernel ay ang hinaharap (HURD, Minix new cone Microkernel).

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

  2.   eliotime3000 dijo

    Ito ang naging pinakamahusay na post na nakita ko sa blog na ito. Gusto ko nang malaman kung ano pa ang gagawin.

  3.   Carlos Gude dijo

    Humanga ka

  4.   palakol dijo

    Nakakahanga talaga !!

  5.   rhoconlinux dijo

    FUUUUUUA!
    ito ang geekiest na post na nakita ko hehe. Binabati kita Adrián, isang artikulo ng kalapating mababa ang lipad! sobrang nakakainteres !!! 🙂

    1.    Joaquin dijo

      Sumasang-ayon ako. Naiisip ko ang sitwasyong ito:
      Gumagamit ng GNU / Linux Power (na may masayang mukha):
      "Alam ko na kung paano mag-compile ng aking Gentoo"

      Nerd (na may isang mapang-akit na pag-uugali): «pff, lumikha ako ng aking sariling distro ...»

      1.    deskoder dijo

        Oo, makakalikha ako ng sarili kong distro ng linux. Sa katunayan dito ay bumubuo ako ng isang initramfs at isang kernel para sa naka-embed na linux. Hindi ito pareho upang lumikha ng isang operating system kaysa sa isang linux distro. Ang una ay mas mahirap, halos imposible, ang pangalawa, tulad ng sinabi mo, ay maaaring maging kahit ano, kahit na ang Ubuntu na may logo ng xD ay nabago. Kaya't iiwan ko ito ng ganito:

        Gumagamit ng GNU / Linux Power (na may masayang mukha)
        - Alam ko na kung paano mag-compile ng aking Gentoo

        Semi Nerd
        - Pff, Sinundan ko ang isang linux mula sa simula at gumawa ako ng sarili kong distro

        Nerd (na may kasuklam-suklam na pag-uugali)
        - pff, dahil na-program ko ang isang kernel sa assembler at sa C

        Pagbati!

  6.   mga cronos dijo

    Ito ay kagiliw-giliw sa akin, habang hinihintay ang mga sumusunod na kabanata.

  7.   abimaelmartell dijo

    Nakita ko ang tutorial na ito noong nakaraan, ito ay para sa C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Salamat sa link, titingnan ko ito.

  8.   Jose Jácome dijo

    Gusto ko ng isang Operating System na 100% na katugma sa AMD graphics: /

    1.    ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        hahaha sa Windows Catalyst ay walang suporta sa OpenGL, kahit na sa Linux hindi ko magagamit ang lahat ng graphic power ay patuloy akong maghihintay upang makita kung ano ang mangyayari!

        1.    beny_hm dijo

          hintayin mo lang ang balbula upang mabura ang merkado

  9.   KZKG ^ Gaara dijo

    Magical, perpekto, mahusay na kontribusyon, mukhang isang mahusay na serye ng mga post 🙂

  10.   O_Pixote_O dijo

    Buah Nais kong malaman kung paano mag-program upang matulungan ka, simpleng paraan lamang ng pagsasanay sa kaalamang iyong natutunan at makakatulong ang isa. Sa ngayon ay iniiwan ko sa iyo ang motto upang maakit ang pansin sa proyekto sa sandaling natapos mo ito "Gumamit ng NextDivel, ang porn ay mukhang pareho (o mas mahusay).", Ikaw ay walisin xD

  11.   mali ang pangalang ito dijo

    Mooooooolaaa !!!!

  12.   nodri dijo

    Napakagandang artikulo, ngunit kakaiba lang kung bakit hindi mo nasunod ang proyekto mula sa Linux Mula sa Scratch?

    Regards

    1.    AdrianArroyoStreet dijo

      Sa gayon, ang Linux mula sa Scratch ay mabuti, at masasabi mong iyo ito, ngunit talagang mekanikal ito:
      -Download ang mga font
      -Patch ang mga ito
      -Pagsama-sama
      -Install
      -Sunundan
      Dito, kahit na ang resulta ay mas masahol sa huli, maaari mong sabihin na nasuri mo ang lahat ng mga file.

    2.    deskoder dijo

      Tulad ng malinaw sa aking nakaraang puna, sapagkat wala itong parehong antas ng pagiging kumplikado. Bukod dito, ang linux mula sa simula ay hindi talaga, salungat sa pangalan nito, lumilikha ng isang sistema mula sa simula. Ang paglikha ng isang sistema mula sa simula ay ang pag-program nito mismo, pagsulat ng iyong sariling kernel, hindi ang linux kernel, kung maaari kahit ang iyong sariling bootloader sa halip na grub, lilo, syslinux, atbp. Bagaman ang isang LFS ay hindi maliit na gawa at medyo kumplikado, hindi ito lumapit sa pagprogram ng iyong sariling kernel ...

      Bilang karagdagan, sumasang-ayon ako sa AdrianArroyo Calle na ito ay masyadong mekanikal, nabasa ko ito minsan at nagtatapos ka sa ika-anim na pahina, sasabihin din sa iyo na gamitin kung anong mga bersyon ng mga pakete sapagkat kung hindi man gumana ang mga tagubilin (na nagpapakita ng kawalan ng kakayahang umangkop , Sa aking opinyon ). Sa palagay ko mas mahusay na magkaroon ng isang bagay ng iyong sariling ideya, ipunin ang mga pakete na nais mo, kahit na ang programa ng ilan, magtipon ng isang linux kernel at sa kapayapaan.

      Pagbati!

  13.   cookie dijo

    uuuoooohh !! Hindi pa ako nakakuha ng post na kasing dami ng ginawa ng isang ito.
    Mangyaring magpatuloy 😀

  14.   linux_user dijo

    Hindi ko alam kung ano ang mali:

    error: walang nahanap na multiboot header.
    error kailangan mo munang i-load ang kernel

    1.    AdrianArroyoStreet dijo

      Kung ito ay anumang aliw, gumawa ako ng parehong pagkakamali. Subukang gamitin ang mga mapagkukunan na nasa GitHub, doon ay nalutas na ang error. Gayunpaman sa palagay ko kung babaguhin mo ang linya ng grub.cfg mula sa "multiboot /next/START.ELF" sa "kernel /next/START.ELF" maaari itong gumana. Hindi ko gaanong alam.

      1.    mcbanana dijo

        Una sa lahat, nakamamanghang pasukan 🙂
        Nagkakaproblema ako sa paglo-load ng kernel mula sa grub. Kahit na gumagamit ng mga mapagkukunan ng GitHub o binabago ang multiboot para sa kernel ...

        error: walang nahanap na multiboot header.
        error: walang naka-load na kernel

        1.    AdrianArroyoStreet dijo

          Gumagamit ka ba ng clang bilang isang tagatala? Palitan ito para sa gcc
          Naalala mo bang gamitin ang script ng linker? Kinakailangan upang malaman ng linker (ld sa aming kaso) kung saan sa file ilalagay ang bawat bagay. Sa kasong ito ang multiboot header ay dapat na nasa simula.
          Gumagamit ka ba ng CMake system? Kung gagamitin mo ito sa palagay ko hindi ito nabibigo.
          Kung hindi ito gagana para sa iyo, susubukan kong makahanap ng iba pang solusyon.

  15.   khourt dijo

    [+100]
    Magaling lang !!!

  16.   invisible15 dijo

    Ang cool talaga 🙂

  17.   tanrax dijo

    Inaalis ko ang sumbrero ko. Kahanga-hangang post. Binabati kita

  18.   lalaki dijo

    Wow!
    Magaling kung mabubuksan mo ang mga application na ginawa sa HTML5 at Javascript nang hindi kinakailangang gumamit ng isang browser, posible ba iyon?
    Pinag-uusapan ko ang tungkol sa pagiging tulad ng mga katutubong application.
    Kaya magiging madali ang programa para sa operating system na ito 😀

    1.    AdrianArroyoStreet dijo

      Sa kasong ito ay hindi ko ito gagawin sapagkat mas tumatagal ng mas maraming gawain sa likuran nito ngunit mayroong isang operating system na tinatawag na "ay" na ginagawa ang sinasabi mo. Sa katunayan ang linya ng utos ay JavaScript at ang mga bintana ay iginuhit gamit ang mga pag-andar ng JavaScript Canvas. Ginawa ito ng mga inhinyero ng Nintendo at ngayon ito ay bukas na mapagkukunan.

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

      1.    lalaki dijo

        Valla, salamat sa impormasyon 😀
        Titingnan ko

  19.   patodx dijo

    Sinumang maaaring gumawa ng kanyang sariling OS ay maaaring mamatay nang payapa, dahil sa antas ng intelektwal na kailangan niyang makamit kasama nito; Ginagawa kang magtapon sa langit o impiyerno.
    Piraso ng pag-post.

    1.    Miguel dijo

      Hanggang sa ngayon wala pang nalalaman na gumawa lamang ng isang bagay na masasabing isang disenteng operating system na ginawa mula sa simula, kahit na ang Linux Torvalds na sinasabi mo sa simula, dahil nagsimula ito mula sa mga mapagkukunan ng Unix at lahat ng iba pa ay nakasulat. karaniwan sa higit sa isang tao, ang buhay ay napaka-ikli at talagang simula sa simula ay hindi maiisip para sa sinuman, kahit na ang kabaligtaran ay nais, ito ay maipapakita sa maraming mga pagkakamali na ginawa sa pagkopya at pag-paste ng Linux Torvalds

      1.    skarmiglione dijo

        Ang mga mapagkukunan ng unix ay sarado, ang paggamit ng minix ... na kung saan ay iba pa.

      2.    Philip Robaina dijo

        at ang mga gumawa ng QDOS ano?
        ay batay sa isang bagay?

  20.   Tesla dijo

    Sa nakikita ko, kung sino ang walang sariling operating system ay dahil ayaw nila, hahahaha.

    Ngayon seryoso, napaka-interesante! Karamihan ay lampas sa aking limitadong kaalaman sa pagprogram, ngunit babasahin ko ang iba pang mga bahagi ng seryeng ito na may pag-asam.

    Salamat sa post!

  21.   Si Manuel R dijo

    Iniwan mo ako ng O_O na mukha ... nang walang balak na maliitin ang mga kontribusyon ng sinuman, ito ang pinaka "pro" na nakita ko kani-kanina lang. Pagbati.

  22.   aitor_cz dijo

    Napakagandang artikulo, Adrián. Mangyaring magpatuloy…

  23.   mj dijo

    Nagbibiro ka ba sa Abril Fools Day?, Huwag maging masama "Gumaya ng Linus Torvalds: Lumikha ng iyong sariling operating system mula sa simula." Sa palagay ko hindi mahirap para sa mga naghahanap ng karera sa ilang instituto ng teknolohiya o unibersidad; ngunit para sa akin ako ay isang novice archer (may mga tumatawag sa amin na "Noob" ngunit itinuturing ko na mas Newbie ako na medyo tamad) na parang hindi tumatapak sa lupa. Gayunpaman, ANG ARTIKULONG ITO AY NAKIKIKITA NG MARAMING CURIOSITY AT WALANG Dobleng ADMIRATION AT RESPETO PARA SA EDITOR NITO, CONGRATULATIONS; Ang unang bagay na gagawin ko ay subukang unawain kahit kaunti ang mahalagang materyal na ito.
    SALAMAT Adrian Arroyo Calle, mahusay na trabaho at marangal na paghahatid ng kaalaman.

  24.   Blaire pascal dijo

    LEL Mahusay na post, panatilihin ito.

  25.   f3niX dijo

    Napakagandang post, ito ang na-miss ko desde linux. Kahanga-hanga.

  26.   Mapula dijo

    Mahusay na post, maraming salamat.
    Hindi ko maintindihan kung ano ang ginagawa ng link.ld file, maaari bang ipaliwanag ito sa akin ng isang tao?

    1.    AdrianArroyoStreet dijo

      Sinasabi ng link.ld file ang linker (sa kasong ito ld) kung aling posisyon sa loob ng nagresultang file ang bawat bahagi ng code ay dapat. Tinutukoy din namin ang punto ng pagpasok dahil wala kaming isang operating system na hindi namin maaaring gamitin ang pangunahing bilang isang normal na programa, sa kasong ito pinili namin ang pagsisimula ng pag-andar.

  27.   Maxi dijo

    Mahusay ang lahat ng iyong post! Naghihintay para sa 7! Paano kung may pagdududa ako, halimbawa, kung nais ko lamang magpatakbo ng isang algorithm, nang walang OS, paano ko malalaman kung ano ang maaari kong gamitin at kung ano ang hindi C?

    1.    AdrianArroyoStreet dijo

      Kung gagamitin mo ito tulad nito, hindi ka makakagamit ng anumang mula sa stdlib, na praktikal na ginagamit ng lahat (walang malloc, libre, printf, scanf, strcmp, atbp). Ang lahat ay dapat na ipatupad nang direkta mula sa memorya o ASM. Marahil sa isang mas mataas na kabanata ipapakita ko sa iyo kung paano mag-install ng isang C library para sa operating system. Kung gumagamit ka ng C ++ hindi ka maaaring gumamit ng mga pagbubukod at ang bago at tanggalin ang mga operator (at tiyak na higit pa).

    2.    Switcher dijo

      Sa tingin ko esto maaari itong bigyan ka ng isang mas mahusay na ideya kung paano ito gawin.

  28.   Esteban dijo

    Kumusta, mga 5 taon na ang nakalilipas sinundan ko ang isang katulad na publikasyon at bumuo ng isang microkernel na nagsisimula sa parehong paraan, mayroon itong ilang mga aspeto upang mapabuti, ngunit maaaring interesado ka, tumatakbo ito sa protektadong mode, nagsasagawa ng multitasking at nagsasagawa ng virtualization ng memorya, nitong huli ay nagtrabaho ako rito disk driver at cd drive upang mai-install ito at hindi lamang tatakbo sa live cd ... Pagbati.

  29.   Johan dijo

    Mahal, mayroon akong isang error kapag isinasagawa ang utos:
    gcc -o Start.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: 5 error sa syntax
    collect2: error: ld nagbalik ng 1 exit status

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

    Sa linya 5 hindi ko nakikita ang error, may pareho ba?

    Nagtatrabaho ako sa isang virtualized na debian wheezy sa virtualbox

    1.    Julian Reyes Escrigas placeholder na imahe dijo

      Idagdag ang ";" sa pagtatapos ng * (. multiboot_header)

  30.   Eric Orellana Romero dijo

    Mahusay na pagkukusa, tiyak na susundin ko ang mga kabanata ng post na ito, na balak na matuto ng maraming mula rito. Maraming salamat sa paglalaan ng oras upang turuan kami. Isang solong detalye tungkol dito, dapat pansinin na si Linus Torvalds ay hindi tagalikha ng anumang operating system, nilikha niya ang Kernel ng GNU / Linux system (ang isa na ginamit sa iba pang OS), na karapat-dapat pa rin, ngunit ito ay Mahalagang kredito si Richard Stallman para sa paglikha ng karamihan sa OS.

    Maraming salamat sa kontribusyon at sana ay isaalang-alang mo ang aking obserbasyon.

  31.   Julian Reyes Escrigas placeholder na imahe dijo

    Kanina ko pa ginugulo ang paksa, naging interesado ako kaagad pagkabasa ko ng headline. ngunit ang mensahe ay patuloy na nakakakuha

    error: walang nahanap na multiboot header.
    error kailangan mo munang i-load ang kernel

    Na-upload ko ang kinukuha ko sa isang repo sa github https://github.com/rkmax/GenyOS

    1.    martin villalba dijo

      Ang parehong bagay ang nangyayari sa akin. Nakita mo ba ang solusyon?

  32.   Carlos dijo

    isang tanong na sinimulan kong ipakilala ang syntax at ang linya ng menuentry ay nagsasabi sa akin ng utos na hindi natagpuan kung sino ang maaaring sabihin sa akin kung bakit
    ito ang ginagawa ko

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: hindi nahanap ang utos

    1.    AdrianArroyoStreet dijo

      Ang nilalaman ng nilalamang ito ay hindi mailalagay sa linya ng utos, ngunit sa file na iyong nilikha na tinatawag na grub.cfg

  33.   Nodetin dijo

    Mahusay na artikulo, salamat!

  34.   David dijo

    Kamangha-manghang… !! ito ay tulad ng nawawalang link.

  35.   r.garciag dijo

    Gustung-gusto ko ang iyong mga tutorial na Emulate LInus Torvalds, ngunit may isang hakbang na hindi ko maintindihan, ang sumusunod:
    Ngayon kinokopya namin ang Start.ELF sa / susunod sa loob ng aming folder na tumutulad sa ugat ng aming operating system. Pumunta kami sa root folder ng aming bagong operating system gamit ang console at i-verify na mayroong dalawang mga file: isa /boot/grub/grub.cfg at isa pang / sunod /START.ELF.

    Pumunta kami sa itaas na direktoryo at tumawag sa isang utility ng paglikha ng ISO na may GRUB na tinatawag na grub-mkrescue

    Maaari bang ipaliwanag ito sa akin ng isang tao: p

    1.    AdrianArroyoStreet dijo

      Upang makabuo lamang ng isang minimum na ISO na maaaring mai-load ng GRUB kinokopya namin ang kernel sa (ang / ng ISO, anumang folder) / sunod /START.ELF at ang file ng pagsasaayos ng GRUB sa (ang / ng ISO, anumang folder) / boot /grub/grub.cfg. Kapag tapos na iyon, hindi pa namin nai-install ang GRUB sa ISO at mayroong isang utility na bumubuo ng ISO mula sa isang folder at mai-install ang GRUB na tinatawag na grub-mkrescue. Pagkatapos ay magtatapos tayo sa wakas ng isang bootable ISO na na-install ang GRUB, na maaaring basahin ang pagsasaayos upang maipatupad sa paglaon ang PAGSUSULI. Hindi ko alam kung naipaliwanag ko ang aking sarili, ngunit ang ginagawa namin ay isang uri ng maling file system na bumubuo kami ng isang ISO.

  36.   pansin ni miguel jose guevara dijo

    Buenísimo

  37.   michael moreno dijo

    Sa gayon, talagang tumingin sa isang bagong system na hindi gaanong malaki ngunit kung pinahusay mo ang linux, halimbawa, lumikha ng isang linux exonucleus na may isang bahagi ng server na kumikilos bilang isang micronucleus kung nais mo, iyon ay, isang istrakturang exo na may pag-uugali ng micronucleus na magiging super at linux.

    Ang iba pang bagay ay hindi ako dalubhasa sa pagprograma, ilang cheesy c ++ at ilang java lamang, sapat na sa akin na bigyan ang linux kernel program ng isang module, pinupuksa ito, binago ito atbp

  38.   Kawal sa Taglamig53 dijo

    Nang walang alinlangan kailangan ko na gawin sa bakasyon.

  39.   Fermin dijo

    Ang mabuting ito at sa anong programa mo idinisenyo at nai-code ito
    mangyaring bigyan mo ako ng sagot

  40.   Darkmind dijo

    Kapag nag-iipon mula sa iyong git nakukuha ko:

    [jmponce @ jar build] $ cmake ..
    - Lumilikha ng direktoryo ng NextRoot
    - Bumubuo ng script ng ISO
    gumawa ng DESTDIR = susunod na pag-install
    ./iso.sh
    - Natagpuan Doxygen: / usr / bin / doxygen (nahanap na bersyon "1.8.9")
    - Tapos na ang pag-configure
    - Natapos na ang pagbuo
    - Ang mga file ng build ay naisulat sa: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Ang pag-scan ng mga dependency ng target na SIMULA
    [7%] Pagbuo ng object ng ASM-ATT src / CMakeFiles / Start.ELF.dir / start / boot.asm.o
    [14%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / NextShellLite.cpp.o
    [21%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Screen.cpp.o
    [28%] Pagbuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Panic.cpp.o
    [42%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Timer.cpp.o
    [50%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Memory.cpp.o
    [57%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Ports.cpp.o
    [64%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_GDT.cpp.o
    [71%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_ISR.cpp.o
    [78%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_String.cpp.o
    [85%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_IDT.cpp.o
    [100%] Bumuo ng CXX object src / CMakeFiles / Start.ELF.dir / start / ND_Keyboard.cpp.o
    Pagli-link ng CXX na maipapatupad na SIMULA.ELF
    / usr / bin / ld: Hindi tugma /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a ay nilaktawan habang hinahanap ang -lgcc
    / usr / bin / ld: hindi mahanap -lgcc
    collect2: error: ld nagbalik ng katayuan sa exit 1
    src / CMakeFiles / Start.ELF.dir / build.make: 402: Nabigong mga tagubilin para sa target na 'src / Start.ELF'
    gumawa ng [2]: *** [src / Start.ELF] Error 1
    CMakeFiles / Makefile2: 106: Nabigong mga tagubilin para sa target na 'src / CMakeFiles / Start.ELF.dir / lahat'
    gumawa ng [1]: *** [src / CMakeFiles / Start.ELF.dir / lahat] Error 2
    Makefile: 117: pagkabigo sa mga tagubilin para sa target na 'lahat'
    gumawa: *** [lahat] Error 2

    1.    AdrianArroyoStreet dijo

      Ang error ay tila hindi ito makahanap ng llibgcc dahil mayroon kang bersyon na 64-bit at kasalukuyang pinipilit na gamitin ang 32-bit na sistema ng pagtitipon. Dapat kang mag-install ng isang kompatibilitas pack sa iyong distro o mas mahusay, gumamit ng isang 32-bit na system.

      1.    Ronaldo Rodríguez dijo

        Mayroon akong 32 bits at lumilitaw ang parehong error, ibig mong sabihin ang operating system o ang arkitektura? ang sa akin ay 64 Bit, ngunit gumagamit ako ng 32 bit Ubuntu, huwag magtanong, mga problemang pampinansyal, na sinasabi ko ang lahat.

  41.   Jorge dijo

    Mahusay na paksa, naghihintay para sa mas malawak na saklaw. Cheers

  42.   Jhon dijo

    Mahusay na umaasa ako para sa higit pa

  43.   Soid perez dijo

    Kumusta, ako ay isang batang embahador na nais lumikha ng isang operating system na sumusuporta sa lahat ng mga programa at platform upang ang mga developer ay hindi kailangang magkaroon ng mga makapangyarihang makina o aplikasyon o programa sa isang pc.
    Iyon ang dahilan kung bakit interesado ako sa post na ito ngunit kapag na-download ko ang iyong git o subukang likhain ito, gumagana ang lahat hanggang sa maipatupad ko ang utos ./iso.sh o grub-mkrescue -o nextdivel.iso nextroot nakuha mo ang error na ito

    "Grub-mkrescue: babala: Hindi sinusuportahan ng iyong xorriso ang" –grub2-boot-info ". Ang ilang mga tampok ay hindi pinagana. Gumamit ng xorriso 1.2.9 o mas bago ..
    grub-mkrescue: babala: Hindi sinusuportahan ng iyong xorriso ang "–grub2-boot-info". Masyadong malaki ang iyong imahe ng kernel. Hindi pinagana ang disk ng disk. Gumamit ng xorriso 1.2.9 o mas bago .. »
    Wala talaga akong ideya dahil marami akong nalalaman tungkol sa mga application at web ngunit wala akong alam tungkol sa grub

    1.    AdrianArroyoStreet dijo

      Maaaring kailanganin mong i-update ang xorriso program sa iyong distro. Anong distro at bersyon ang ginagamit mo?

      1.    Soid perez dijo

        Gumagamit ako ng xubuntu 14.04lts at subukang patakbuhin ang xorriso ngunit sinasabi sa akin ng shell na hindi ito mahahanap at nakakakuha ako ng apt-get install xorriso bagaman taos-puso akong inaasahan ang ilang tugon sapagkat mayroon akong masamang karanasan sa pag-install ng mga bagay na hindi ko alam sa linux hehe. I-update ko ito ngayon at sasabihin sa iyo kung ano ang nangyari

      2.    AdrianArroyoStreet dijo

        Pagkatapos i-install ang xorriso mula sa sentro ng software o simpleng mula sa terminal gawin ang "sudo apt-get install xorriso"

      3.    Soid perez dijo

        Ginawa ko na ang lahat ng sinabi mo sa akin at sa parehong git at mine nakukuha ko ang xorriso 1.3.2 na ito: RockRidge filesystem manipulator, libburnia project.

        Kasalukuyang pagmamaneho: -outdev 'stdio: nextdivel.iso'
        Kasalukuyang media: stdio file, maaaring mai-overlap
        Status ng media: blangko
        Buod ng media: 0 session, 0 bloke ng data, 0 data, 1901m libre
        Idinagdag sa ISO imahe: direktoryo '/'='/tmp/grub.OEqSzV'
        xorriso: I-UPDATE: 546 na mga file ang naidagdag sa 1 segundo
        xorriso: FAILURE: Hindi matukoy ang mga katangian ng source file '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Walang ganoong file o direktoryo
        xorriso: I-UPDATE: 546 na mga file ang naidagdag sa 1 segundo
        xorriso: aborting: -abort_on 'FAILURE' nakaranas ng 'FAILURE'
        at corduroy Hindi ko maintindihan ang aking istraktura ay /nextroot/boot/grub/grub.cfg at nextroot / susunod / SIMULA.

      4.    Soid perez dijo

        Salamat, handa akong sumulong, isang kaibigan ang tumulong sa akin at sinabi sa akin kung ano ang nagawa kong mali ay ang samahan ng direktoryo, kaya naayos ko ito at iyon na.

      5.    Erik dijo

        Paumanhin, maaari mo bang sabihin sa akin kung anong pamamaraan ang iyong nagawa mula nang makuha ko ang error na walang mag-boot: walang ganoong file o direktoryo

        walang bootable na aparato.

  44.   jose dijo

    Cheers! Hihilingin ko sa iyo ang pabor kung maaari kang magpadala sa akin ng isang email sa iyong ipinapaliwanag dito, medyo nalito ako at kailangan kong ihambing ang mayroon ako sa ipinapaliwanag mo, marahil kung ano ang hindi malinaw sa akin ay kung ang paglikha ng grub. Ang CFg ay tapos na sa terminal gcc o saan eksakto? Salamat sa inyo kaibigan!

    1.    AdrianArroyoStreet dijo

      Lumilikha ka ng file grub.cfg sa anumang text editor at dapat mo itong i-save sa PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano dijo

    Kumusta Adrian, una sa lahat, bati kita at salamat sa iyong kontribusyon.

    Alam mong ginagawa ko ito para sa isang kasanayan at sinimulan kong pagsama-sama ito sa pagsunod sa iyong pagtuturo, subalit pagkatapos simulan ay nakita ko ang unang error

    $ bilang -o kernel.o -c kernel.asm
    bash: as: hindi nahanap ang utos ...
    Ang mga katulad na utos ay:
    'sa'
    'ac'

    Nagtatrabaho ako sa fedora 20, at hindi ako makahanap ng solusyon sa bagay na ito, pinahahalagahan ko ang iyong patnubay sa kung dapat kong baguhin ang ilang gcc o gas

    in advance salamat sa iyo

    1.    AdrianArroyoStreet dijo

      Dapat mong i-install ang GAS upang makita ko ang error code. Wala akong kamay na Fedora ngunit sa teorya kung gagawin mong i-install ang gcc-c ++ i-install mo ang buong suite ng GCC at karaniwang kasama nito ang GNU As.

  46.   Gaston Ramirez dijo

    Kasama kita, may alam ako tungkol sa C ++, C # (bagaman ang huling ito ay hindi masyadong kapaki-pakinabang sa bagay na ito) ang masamang bagay ay kulang pa rin ako ng karanasan, hindi ko hinawakan ang wikang C, mahusay ang iyong publication, wala akong masabi, kung may oras ako nakikita ko. Salamat.

  47.   Teresita ni Jesus Nah Sanchez dijo

    Maraming salamat sa malaking tulong ....

  48.   si jky dijo

    Gustung-gusto ko ang linux ito ang pinakamahusay na distrito na mayroong, ang katotohanan para sa aking windows ay basura sa isang alam ko na ang lumikha ng linux ay ang tagalikha ng windows

  49.   Rode dijo

    Kumusta Nakakuha ako ng isang Error sa grub sabi
    error: file /next/START.ELF Hindi nahanap
    error: kailangan mo munang i-load ang kernel

    Maaari mo ba akong tulungan at mag-google ngunit hindi ko makita

  50.   Henry Avila dijo

    Mangyaring, paano ko ito maipapakita ang mensahe na HELLO WORLD? Nagsisimula ako at hindi ko pa alam ang sapat

  51.   CARLOS GUERRERO ALVAREZ dijo

    Ang sumusunod ay nangyari sa akin:
    gcc -o Start.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: relocation R_X86_64_32 laban sa simbolong `stack 'ay hindi maaaring gamitin kapag gumagawa ng isang PIE object; muling magkumpuni sa -fPIE
    / usr / bin / ld: Nabigo ang panghuling link: hindi mailarawan ang seksyon sa output
    collect2: error: ld nagbalik ng 1 exit status