Boottavan CD:n rakentaminen

Tälle sivulle on koottu apuja, huomioita ja muuta sen sellaista sälää ynnä ohjeistusta ikuomien boottaavien CD-ROMien tekoon. Informaatio on kerätty mistä kulloinkin, ja lähdeviitteitä pyritään sohimaan sitä mukaa kun siltä tuntuu, ja muisti antaa periksi.

Aihepiiri on allekirjoittaneellekin suhteellisen uusi, joten asiavirheitä sopii sähköpostitse korjailla, mikäli jotain äärimmäisen virheellistä pomppii silmille.

CD-ROM-standardit

CD-ROMien yksi yleisimmistä tiedostojärjestelmistä on ECMAn ylläpitämä ISO-9660 -standardi. 

Koko boottaavan touhun taustalla taas on Phoenixin ja IBM:n kehittämä ISO-9660:n lisuke, koodinimeltään "El Torito". 

Tätä standardia toteuttavat sitten eri laitevalmistajat uudemmissa BIOSseissaan kuka mitenkin. Käytännössä on havaittu, että yleisesti kaikki nykyiset laitevalmistajat toteuttavat El Toritoa - yhdellä poikkeuksella:

Yleisesti ns. merkkikoneet (Compaq, IBM, Dell ja niin edelleen) EIVÄT tue CD-ROMeja jotka on rakennettu multiboot-levyiksi (sisältävät Boot Catalogin jossa on useampia Default/Initial Entryjä).

Edellämainittujen valmistajien koneet suostuvat näkemään (ja boottaavatkin) multiboot-cd:n ensimmäiseltä bootsektorilta - mutta eivät esitä käyttäjälle valikkoa halutusta bootsektorista. Asus, Abit, Soltek, Quantum ja muut vastaavat emolevyt näyttävät multibootvalikon, josta käyttäjä voi valita halutun boot entryn.

Tässä selostuksessa lainaamme edellämainittua paperia sieltä täältä, joten välttämätöntä paperin lukeminen ei ole.

No miten se noin periaatteessa toimii?

Kaiken lähtökohtana on, että järjestelmän BIOS tunnistaa CD:n boottaavaksi (tämä tapahtuu kiinteästi tietyllä CD:n sektorilla olevan tunnistemerkkijonon avulla), päättää erillisen levyltä löytyvän sektion avulla missä kohden levyä on boottikoodi joka levyltä keskusmuistiin ladataan - ja siinä se. 

Ettei itse asia olisi liian yksinkertainen, voi järjestelmä bootata CD:ltä useallakin eri mekanismilla. CD voi emuloida bootin aikana levykettä (1.2Mt, 1.4Mt tai 2.88Mt) tai kovalevyä (max. 650Mt). CD:ltä voidaan bootata myös ilman emulaatiota. Jälkimmäinen on mm. NT-asennuslevyjen tapa.

Boot Volume Record Descriptor

Tutummin "Boot Record". Tästä se lähtee. Boot Record (sikäli kun levyllä sellainen on) sijaitsee ISO-9660-standardia toteuttavilla CD-levyillä aina sektorilla 11h (h niinkuin heksa). CD:n sektorikoon ollessa 800h, löytyy CD:n Boot Record AINA osoitteesta 8800h.

Jos näppärästi kaivamme raakaimagen satunnaisesti valitusta CD-levystä pöydältä ja kurkistamme sen sisään heksaeditorilla, näyttää kyseisessä offsetissa tältä:

No mitä tämä kaikki tarkoittaa? El Torito-paperi kertoo meille seuraavaa (vaikkakin Boot Recordin määritys sinänsä kuuluukin ISO-standardiin):

Otetaanpa oikeasti boottaava CD ja katsotaanpa sen Boot Recordia:

Esimerkissä näkyy että levyn Boot Catalog on sektorilla 13h. Luku ilmaistaan niin että osoitteen tavut ovat "väärinpäin". Oliko tämä tarpeeksi sekavasti ilmaistu? :) Juoni on seuraava:

Offsetissa lukee "13 00 00 00" 

joka tarkoittaa että Boot Catalog on sektorissa numero "00 00 00 13". Kun muistamme että CD:n yksi sektori on 800h tavua, alkaa Boot Catalog tämän levyn ollessa kyseessä näin ollen osoitteesta 800h kertaa 13h =  9800h.

No mikä ihmeen Boot Catalog?

Boot Catalog yksinkertaisesti ilmaistuna on luettelo levyllä jossain asuvista boottikelpoisista imageista. 

Boot Catalogissa on periaatteessa vähintään kaksi entryä:

Boot Catalog voi näiden kahden lisäksi sisältää Section Header:in ja useita Section Entryjä - mutta todellisuudessa näiden käyttötarkoitus on tarjota esim. BIOSsille automaattinen mahdollisuus valita vaikkapa bootti-image kieliasetusten perusteella - todellisuudessa kukaan ei käytä näitä, joten ne voi unohtaa.

Katsotaanpa edellälaskettua osoitetta (9800h) levyltä.

Validation Entry

El Torito-speksin mukaan alussa pitäisi siis olla 32 tavun mittainen Validation Entry. Ja jotain siellä kahdella ensimmäisellä rivillä näyttää olevankin. Speksi sanoo että:

Default/Initial Entry

Validation entryn jälkeen pitäisi seurata vähintään yksi, jollei useampiakin 32 tavun mittaisia Default/Initial Entryjä. Edellisessä kuvassa näyttää siltä, että siellä on yksi (offsetissa 9820h on selkeästi jotain, mutta siitä 32 tavua eteenpäin, offsetissa 9840h on vain nollaa.)

Mitäpä Default/Initial Entry sitten pitää sisällään?

Nyt tiedämme missä oikea boot image levyllä asustaa. Käydäänpä katsomassa miltä siellä näyttää.

Kappas. Kovasti kuhinaa, ja hetken kovasti konekoodin näköisen hässäkän jälkeen tutunomaisia MS-DOS-fraaseja. Joten kuten arvata saattaa, oli tämä boottaava CD siis tehty MS-DOS-tyyppisestä boottikorpusta.

No mutta kuinka tälläisen sitten tekee itse?

Helposti. :)

Hyvin yksinkertaistettu esimerkki siitä miten edellämainittu boottaava CD tehdään käsin:

Siinä se - sen pitäisi bootata. Kaikkeen edellämainittuun toimintaan on tosin olemassa näppäriä, ilmaisia apuohjelmia, joten heksaeditointi ei ole välttämätöntä.