Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Käyttiksen kääntäminen

Sivun loppuun

ErroR++ [04.05.2012 16:27:45]

#

Moi!

Olen väsännyt pienen C-käyttöjärjestelmän (tällä hetkellä 4 filua). Milläs tavalla tuon saa käännettyä? Sain jonkin bin-höskän mutta sehän on tietenkin linux-ohjelma. Millä tavalla esim. make-ohjelma kääntää Linuxin ytimen? Sain kuitenkin objektitiedoston koodista.

Ymmärrän mitä koodini tekee ja tällä hetkellä koko höskän pitäisi tulostaa joku "Loading"-teksti ja "Error", ja sitten hangata (tyhjäkäynti).

Itse olen ymmärtänyt, että esim. Linuxin starttikoodi on jossain c-filussa (komentorivillä linuxin sourcefolderissa "whereis main.c":llä saa selville), ja siellä on vain kasa voideja, jotka starttaa systeemin.

Käytän käynnistyslataimena GRUBia.

Tukki [04.05.2012 17:16:48]

#

Ymmärsinkö oikein että olet itse ohjelmoinut c-kielisen käyttöjärjestelmän, mutta et ole koskaan kääntänyt sitä?

Make-ohjelma ei käännä ohjelmakoodia vaan käyttää siihen erillistä kääntäjää. C:lle tällainen on esim. gcc ja sitä voi käyttää ilmankin make-ohjelmaa.

ErroR++ [04.05.2012 17:24:54]

#

No siis olen kääntänyt ja saanut linux-binäärin, mutta sitähän ei voi suorittaa suoraan (se vaatii sen linuxin). gcc:llä olen tehnyt objektitiedostot, mutta en osaa linkittää niitä binääriksi. Makella olen pari kertaa Linuxinkin (3.2.1-version) konffannut ja kääntänyt. Ilmeisesti moduulit eivät asentuneet, koska se herjasi Kernel Panic:ia heti alussa. Tietysti parametrit olivat myös väärät.

Palaan tänne illemmalla, koittakaa vastailla! :D

nörtti [04.05.2012 17:26:02]

#

Voisitko laittaa koodit ja makefilen jonnekkin saataville? Sattaisin saada selville ongelman.

Metabolix [04.05.2012 18:22:31]

#

Uskallan epäillä, että tässä "käyttöjärjestelmässä" ei ole mitään järkeä. Jos et osaa kääntää ja ladata sitä (tai selvittää asiaa netistä), tuskin olet myöskään perehtynyt asioihin muuten tarpeeksi, että osaisit tehdä käyttöjärjestelmän edes alkuun. Alku on nimittäin se osa, joka on vaikein keksiä tyhjästä itse.

Katso mallia vaikka PutkaOS:n tiedostoista. Ydin voi olla tavallinen ELF-tiedosto, jossa on kelvollinen multiboot-otsikko, jolloin GRUB pystyy lataamaan sen.

Toinen vaihtoehto on tallentaa koodi suoraan levyn (mielellään tietysti virtuaalikoneen levykuvan) ensimmäiselle sektorille, nimittäin BIOS aloittaa käynnistyksen lataamalla ajettavaksi tuon yhden sektorin (512 tavua). Tämä on vaikeampi lähestymistapa, koska ensimmäiseksi täytyy osata itse ladata loput käyttöjärjestelmästä.

ErroR++ [04.05.2012 20:12:31]

#

Metabolix kirjoitti:

Uskallan epäillä, että tässä "käyttöjärjestelmässä" ei ole mitään järkeä.

No paremmin sanottuna se on boottihärpäke. :)

Olen perehtynyt juuri näihin laitteisto- ja käyttöjärjestelmäasioihin aika hyvin. Tässä se ongelma on juuri siinä, kun en vain osaa tehdä ytimestä kunnon binarya.

Tuosta PutkaOSin lähdekoodista sainkin idean tuohon start- ja main-höskään.

EDIT:

nörtti kirjoitti:

Voisitko laittaa koodit ja makefilen jonnekkin saataville? Sattaisin saada selville ongelman.

Ei ole makefileä. Pitääpi heti värkätä kunnollinen systeemi.

Metabolix [04.05.2012 21:29:26]

#

Jos kiinnostaa tehdä "boottihärpäke" eli boot loader, ei varmaan kannata puhua ollenkaan käyttöjärjestelmästä.

ErroR++ [05.05.2012 11:36:21]

#

Ei bootloaderkaan. Ehkä paremminkin se käyttöjärjestelmä. Mutta ei siitä suurikokoinen tule.

Jos joku antaa ohjeet kääntämiseen, niin saisin projektiani eteenpäin. Itse en ole Linuxin käännösjutskiin perehtynyt paljoakaan, pari C-ohjelmaa olen gcc:llä kääntänyt.

Metabolix [05.05.2012 17:42:31]

#

Lataa ja pura tämä pieni esimerkki. Mene kyseiseen hakemistoon ja kirjoita komento make. Asenna testausta varten QEMU ja käynnistä ydin komennolla qemu-system-i386 -kernel kernel tai vastaavalla. Kun saat tämän toimimaan, voit yrittää lisätä mukaan omia koodejasi hakemistoon src.

ErroR++ [05.05.2012 19:37:03]

#

Pukkas erroria, mutta sain siitä jokseenkin toimivan. QEMUa en asentanut. Kopsasin Makefilun ja linkkeriskriptin, ja muoksin niitä omiin tarpeisiini sopivaksi. Suurkiitos!

EDIT: Nyt kun minulla on kaksi eri hakemistoa, missä on koodeja, niin haluaisin tehdä rekursiivisen makefilun joka siis käy kaikki hakemistotkin läpi. Mitenköhän tuon voisi jollain for-loopilla toteuttaa? En löytänyt Googlellakaan paljoa apua.

Metabolix [06.05.2012 00:33:03]

#

ErroR++ kirjoitti:

QEMUa en asentanut.

Kai sentään käytät jotain muuta emulaattoria, vai tuhlaatko todella aikaasi jonkin oikean koneen käynnistelyyn?

ErroR++ kirjoitti:

haluaisin tehdä rekursiivisen makefilun

Makefile on teknisesti hieman rajoittunut, mutta voit käyttää useampaa wildcard-kutsua tai ulkoista find-ohjelmaa:

FILES_C := $(wildcard src/*.c) $(wildcard src/*/*.c) $(wildcard src/*/*/*.c)
FILES_C := $(shell find src -name "*.c")

punppis [06.05.2012 04:02:47]

#

ErroR++ kirjoitti:

Ei bootloaderkaan. Ehkä paremminkin se käyttöjärjestelmä. Mutta ei siitä suurikokoinen tule.

Jos joku antaa ohjeet kääntämiseen, niin saisin projektiani eteenpäin. Itse en ole Linuxin käännösjutskiin perehtynyt paljoakaan, pari C-ohjelmaa olen gcc:llä kääntänyt.

"Pari ohjelmaa kääntänyt" ja oman käyttöjärjestelmän tekeminen (edes pelkkä hello world) ei oikeen sovi yhteen.

nörtti [06.05.2012 12:49:45]

#

ErroR++ kirjoitti:

Ei bootloaderkaan. Ehkä paremminkin se käyttöjärjestelmä. Mutta ei siitä suurikokoinen tule.

Jos joku antaa ohjeet kääntämiseen, niin saisin projektiani eteenpäin. Itse en ole Linuxin käännösjutskiin perehtynyt paljoakaan, pari C-ohjelmaa olen gcc:llä kääntänyt.

http://wiki.osdev.org/Introduction
http://wiki.osdev.org/Required_Knowledge
http://wiki.osdev.org/Beginner_Mistakes
http://wiki.osdev.org/Getting_Started
http://wiki.osdev.org/How_To_Ask_Questions
http://wiki.osdev.org/Category:FAQ

Lue nuo ja viisastu. Tule vasta sen jälkeen kyselemään udestaan.

ErroR++ [06.05.2012 20:12:32]

#

Metabolix kirjoitti:

Makefile on teknisesti hieman rajoittunut, mutta voit käyttää useampaa wildcard-kutsua tai ulkoista find-ohjelmaa: ...

Kiitos taas!

nörtti kirjoitti:

(linkkejä)
Lue nuo ja viisastu. Tule vasta sen jälkeen kyselemään udestaan.

Vain viimeisestä linkistäsi oli jonkin verran apua. Suurimman osan muista olen jo jostain lukenut.

kaviaari [06.05.2012 20:23:42]

#

John Woodenin sanoin "Never mistake activity for achievement". Kannattaa lukemisen ohessa panostaa myös ymmärtämiseen ja testailuun. Käyttöjärjestelmäprojekti voi kuulostaa hienolta ja hurjalta, mutta siitä ei saa juuri mitään irti ellei ymmärrä mitä on tekemässä ja miksi.

ErroR++ [07.05.2012 10:23:58]

#

Niin juuri. Opettelen ja yritän ymmärtääkin koko ajan. Kiitos vinkeistä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta