Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: BootLoaderi C/C++

Sivun loppuun

kayttaja-3842 [24.09.2008 09:37:43]

#

Terve vaan kaikille...

Elikkäs, olisin kiinnostunut miten saisi C/C++:lla koodattua oman "käyttöjärjestelmän" boot loaderin. En ole tässä nyt mitään ihmeitä tekemässä, vaan ihan koe mielessä yrittämässä tehdä consoli pohjaista käyttöjärjestelmää.

Tutkiskelin jo Linux v0.01 eli ensimmäisen version boot loaderi kodia, mutta tämä oli kirjoitettu assemblyllä ja tästä kielestä en ole niin paljoo perillä kuin C/C++:ta.

Eli millä periaatteella tämä boottaaminen toimii. Eli mitä tietoja koneelle pitää antaa, että se osaa boottia minun kirjoittamani ohjelman.

Viitapiru [24.09.2008 09:58:55]

#

Kuulostaa varsin mielenkiintoiselta.
Googlesta löysin äkkisilmäyksellä tämmöisen

http://linuxgazette.net/issue85/mahoney.html

Päärynämies [24.09.2008 10:28:09]

#

http://www.osdev.org/

Tuolta kannattanee vinkkiä katsella. Jotenkin olisi itsellä sellainen muistikuva, että bootloaderista se ensimmäiseksi suoritettava koodi on pakko kirjoittaa assemblyllä, koska C ei siihen taipuisi.

Suosittelisin kuitenkin katsomaana vaikka Grubia ja miten saat sillä boottaamaan käyttiksesi. Se hoitaa asiansa hyvin. Tietty tee itse tai katso koodia, jos haluat oppia kunnolla miten se bootloaderi toimii.

Yleisestihän boottaaminen toimii niin, että BIOS lukee bootattavalta laitteelta (cd-levy, kiintolevy, jne.) ensimmäiset 512 tavua ja rupeaa suorittamaan sitä. Tuossa sitten joko ladataan se ydin tai sitten loput bootloaderista (näin Grub tekee), joka sitten myöhemmin sen ytimen lataa. Kovin monimutkaista tai osaavaa bootloaderiahan tuohon 512 tavuun ei saa mahtumaan.

Näin vinkkinä, että kannattaa sitä assemblyä opetella, siitä on hyötyä. Tuut tartteen sitä myöhemmin, jos kerta käyttiksen aiot tehdä.

kayttaja-3842 [27.09.2008 01:29:05]

#

Kiitos paljon teille... Olen jo päässyt himen liikeellekin, eli saan jo bootattua tekemäni C kernelin ja tyhjennettyä ruudun ja tulostettua dataa ruutuun. Ajattelin tosin, että voisin tähän väliin opetella sitä Assemblyä, joten lainasin kirjastosta Assemblyä käsittelevän kirjan. Tosin kirja käsittelee Microsoftan Macro Assemblyä eli MASMia ja kirja on muutenki aika vanha (vuodelta 99).

Eihän se tieto siitä mihinkään muutua (tietääkseni), mutta kyllähän on paljon uutta varmaan tuohon MASM:iinkin tullut. Minua vain kiinostaisi, että onko MASM:i miten hyvä vaihto etho jos väsää omaa ns. OS:ää ja onnistuuko tuon MASM:in kääntö Linux:ta käsin esim GCC:n avulla???

Deffi [27.09.2008 05:25:27]

#

Aijai :( En kyllä MASMia suosittelisi, jos tarkoituksesi on koodailla käyttiksiä ja käytät vieläpä linuxia. MASM on pääasiassa suunnattu korkeamman tason hommiin, kuten Win32-sovellusten koodaamiseen, vaikka ehkä muuhun taipuukin. MASMia ei myöskään taida saada linuxille, ellei sitten winen kanssa säädä. Suosittelin että käyttäisit mielummin FASMia tai NASMia, joista NASM lienee mukavampi linuxistille ja pienellä tuurilla se voi löytyä vieläpä valmiiksi koneelta (whereis nasm)

x86 assembly ei ole mihinkään vuosien saatossa muuttunut, mutta jos luet MASM-kirjaasi niin pidä mielessä että MASMin syntaksi (?) on vähän harhaanjohtava ja poikkeaa muista assemblereista. Ottaen nyt esimerkiksi MASMin tapa käsitellä hakasulkeita, kun ne voidaan välillä jättää pois miten sattuu ja taas välillä niitä ei tahdo saada toimimaan ollenkaan.

dwMuuttuja DWORD 123
labeli:

; Viitataan muistiin ilman []-merkkejä
mov eax, dwMuuttuja            -> MOV EAX,DWORD PTR DS:[404000]

; Ja nyt se labelin kanssa ei onnistu
mov eax, labeli                -> MOV EAX,401000

; Ei vaikka yrittäisi
mov eax, [labeli]              -> MOV EAX,401000

; Väännetään rautalangasta sitten
mov eax, dword ptr ds:[labeli] -> MOV EAX,DWORD PTR DS:[401000]

Makuasioita ehkäpä (epäloogista ja sekavaa IMHO)

kayttaja-3842 [27.09.2008 10:52:29]

#

Joo niin ajattelinkin, että se ei sovellu. Harmi kun kirjastossa ei ollut yhtään NASMI:ta kervoaa kijraa. Olisiko jollai ntiedossa jotain hyvää netistä löytyvää NASMi opasta?

Päärynämies [27.09.2008 13:21:39]

#

http://www.drpaulcarter.com/pcasm/

Katseleppa tuolta lyötyvää opasta, pätevältä vaikuttaisi assemblyn opiskeluun. Ainakin joku esimerkki mitä vilkaisin, niin kääntyi kuulemma NASM:lla. Lueppa sieltä, että saat selville ne assemblyn perusjutut. Assemblyhän on hyvin yksinkertaista.

Sitten, kun perusjutut ja tiedot on hallussa, niin kattele vaikka jostain listaus x86-käskykannasta ja siitä, mitä kukin käsky tekee. Ei tarvitse opetella jokaista ulkoa, mutta saat kuvan millaisia käskyjä on käytössä.

Sitten vielä kaveriksi NASM:n dokumentaatio, että josta voi tarvittaessa katsoa apua NASM:n käyttöön ja syntaksiin. En tiedä miten hyvin tuo tarjoamani opas kattaa sen käytön.

Ja käyttistä tehdessä ainakin Intel Developer Manual -sarja on hyvää luettavaa, jos ei tietämystä sen prosessorin sielunelämästä vielä löydy. Suosittelen tutustumaan, jos et vielä ole tehnyt.

Tietty NASM:lle pitää vielä vaihtoehtona mainita Gas (GNU Assembler). Syntaksi on AT&T kun NASM käyttää Intel -syntaksia. Eroja on jonkun verran. Makuasioita kummasta sitten tykkää enemmän.

Metabolix [27.09.2008 13:54:32]

#

x86-assemblysta tarvitsee käytännössä tietää sen verran, että on perillä eri rekistereistä ja osaa käyttää yhteen- ja vähennyslaskua ja loogisia operaatioita sekä siirrellä dataa muistin ja rekisterien välillä ja kutsua funktioita. Käytännössä kaiken mutkikkaamman laskennan voi hoitaa C:llä. Lisäksi täytyy osata käyttää muutamaa juuri kernelissä käytettävää käskyä (lgdt yms.). C on niin paljon helpompi kieli, että kannattaa ehdottomasti käyttää sitä niin suurelta osin, kuin vain voi.

Päärynämies [27.09.2008 22:18:09]

#

Tosiaan ehdottomasti kannattaa C:tä käyttää niin paljon kuin vain voi, kuten Metabolix mainitsi ja tekee sillä assemblyllä vain pakollisen. Sitten, jos välttämättä jossain kohti tarvitsee ne viimeisetkin teho puristaa irti, niin taas assembly käyttöön (jos C-kääntäjä ei samaan pysty). C -koodi on kuitenkin paljon helpommin ymmärrettävää kuin assembly.


Sivun alkuun

Vastaus

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

Tietoa sivustosta