Diit.cz - Novinky a informace o hardware, software a internetu

Jak to funguje a malý BONUS

Windows XP
Velmi dlouho nás kamenujete, abychom napsali návod na vytvoření bootovacího CD. Tak dlouho, až to W.I.F.T. nevydržel a spolu se Zajdeem vytvořili strhující text, kterak si takové CD pořídit s Windows 2000 či XP. Určitě budete kvitovat postup, kterak do instalačního CD přidat nové servisní packy, nebo kompletní a velmi podrobný popis, co se vlastně při bootování děje. Potěší to nejen specialisty, ale určitě i mnohé amatéry, kteří dodnes asi vůbec netušili, co vše se při startu PC děje. Těšit se také můžete na malý BONUS!

Kapitoly článků

3.  Jak to funguje a malý BONUS

Tenhle odstaveček přenechám celý mistrovi v oboru, od nějž celá tahle záležitost pochází - Zajdee.


Tato část je již jen technickým popisem vlastního startu počítače z CD a také vysvětlením čísel, které bylo třeba zadat v předchozích odstavcích v programu CDRWIN. Předpokládá se čtenářova znalost rozdělení disků a architektury procesorů Intel x86 - adresování paměti v reálném módu (segmentování).

Nejprve si popíšeme "klasický" boot počítače:

Poté, co zapnete počítač, předá procesor, který se v tu chvíli nachází v reálném módu, řízení na adresu 0F000h:0FFF0h, kde začíná inicializační kód BIOSu. Poté, co BIOS inicializuje všechna zařízení v počítači (dnes hlavně Plug and Play karty, či zařízení integrovaná na základní desce), načte první sektor pevného disku (sektor má v lineárním adresování sektorů číslo 0) do paměti na adresu 07C0h:0000h. Do registru DL uloží BIOS číslo pevného disku, ze kterého sektor pochází (tato hodnota je obvykle 80h - první disk v systému, proto ji mnoho programátorů ignoruje a v zavaděčích hlavního sektoru disku - MBR - raději používá hodnotu bytu, určujícího bootovatelný oddíl, která je také 80h; využití číslo, předané v registru DL, ale přesto má, ale o tom až dále). Kód, obsažený v tomto sektoru, se nejdříve sám přesune na adresu 0600h:0000h (platí pro standardní bootovací kód MS-DOSu a Windows jakékoli řady), načež se pokusí vyhledat aktivní diskový oddíl. Pokud žádný takový oddíl neexistuje, dojde k vyvolání přerušení INT 18h, kdy se vrací řízení zpět BIOSu, na kterém dále závisí, co se stane. Pokud dojde k nalezení aktivního oddílu, načte se jeho první sektor opět na adresu 07C0h:0000h a do registru DL by měla být umístěna taková hodnota, jaká byla ve chvíli, kdy byl volán MBR sektor BIOSem. (Jak jsme si ale řekli, mnoho zaváděcích sektorů umisťuje do registru DL automaticky hodnotu 80h, tedy první disk v systému.) Následuje předání řízení do paměti na adresu 07C0h:0000h. Další činnost závisí již na načteném zavaděči, protože pro každý souborový systém (a mnohdy i pro různé verze operačního systému) se zavaděč z prvního sektoru diskového oddílu liší.

Nyní se podíváme na to, jak pracuje bootovací proces CD s Windows 2000:

Činnost BIOSu po zapnutí počítače je téměř shodná s předchozím případem, až na to, že nenačítá první sektor z pevného disku, ale speciálně vymezený počet sektorů z CD. (Dnešní BIOSy mají vestavěnou podporu ATAPI CD-ROM mechanik, a proto mohou i bez načítání speciálních ovladačů bootovat přímo z CD.)

Načtení bootovacího sektoru z CD je složitější, než načtení hlavního zaváděcího sektoru z pevného disku. Na CD totiž není bootovací sektor uložen hned v prvním sektoru, jeho umístění určují Volume Descriptory. BIOS tedy nejdříve musí tyto volume descriptory načíst a nalézt v nich konkrétní číslo sektoru, který má načíst. Volume Descriptory začínají na CD od sektoru 16 (připomínám, že na datovém CD mají sektory velikost 2 048 bajtů).

Když BIOS zjistí, v jakém sektoru je uložen bootovací kód, musí také zjistit velikost tohoto kódu a typ emulace. Velikost kódu se počítá v násobcích 512 (jde o násobky standardní velikosti sektoru pevného disku), a proto tedy pokud má bootovací kód velikost 2 048 bajtů, je nutné při vytváření našeho bootovatelného CD zvolit jako velikost kódu 4 sektory. Dále je třeba zjistit číslo segmentu, kam se má bootovací kód načíst. V našem případě se načítá na standardní adresu 07C0h:0000h, tedy na segment 07C0h. Na typu emulace závisí, jak se bude disk v systému chovat. Existuje několik druhů emulace - emulace disket (v tomto režimu se po nabootování chová bootovací image jako první disketová jednotka v systému a původní disketová jednotka jako druhá disketová jednotka; podporovány jsou obrazy disket velikosti 1,2MB, 1,44MB a 2,88MB), emulace pevného disku (v tomto případě se po nabootování chová obraz pevného disku, který je vypálený na CD, jako první pevný disk v systému a další disky jsou posunuty jako při bootování s emulací disketové jednotky) a režim, kdy nedochází k emulaci CD (pro bootovací kód se CD chová jako pevný disk, který má velikost sektoru 2 048 bajtů, zvláštní adresářové struktury a nemá hlavní zaváděcí záznam ani tabulku rozdělení disku). Právě poslední režim (bez emulace) využívá ke své funkci bootovací kód CD Windows 2000.

Když tedy BIOS načte tento kód do paměti, do registru DL umístí číslo, pomocí kterého poté bootovací kód přistupuje k CD jako k pevnému disku, dojde k předání řízení na adresu 07C0h:0000h, tedy na první byte kódu pro obsluhu bootu z CD. (Zde již k využití předávaného čísla disku dochází, narozdíl od výše uvedeného případu bootování z disku pevného.)

Než přistoupím k popisu činnosti bootovacího kódu CD Windows 2000, dovolím si poznámku k názvům adresářů a souborů na CD: v adresářových strukturách mají být podle standardu ISO9660 (standard pro organizaci dat na CD) jako součást názvu souborů i adresářů přípony ";1", které však jsou softwarově odstraněny, takže je nikdy v žádném operačním systému neuvidíte. Číslo, které je za znakem středník (v tomto případě je to jednička) určuje číslo verze standardu ISO9660, podle které je CD vytvořeno. Tyto přípony ale na bootovatelném CD Windows 2000 (zřejmě kvůli délce bootovacího kódu) být nesmějí. To je důvod, proč bylo nutné v CDRWinu zvolit volbu Disable version numbers, která se postará o nepřidávání těchto přípon. A také je to důvod, proč například v Neru bootovatelné CD Windows 2000 nevytvoříte - v Neru prostě přidávání těchto přípon zakázat nejde.

Bootovací kód provede následující činnosti přesně v tomto pořadí: zkontroluje, byl li načten celý tento sektor (kontrolou posledních dvou bytů). Pokud bylo CD vypáleno se špatným počtem bootovacích sektorů, nastaví se speciální byte oznamující číslo chyby na specifickou hodnotu a tato chyba se oznámí uživateli. Pokud byl bootovací kód načten kompletně do paměti, dojde k vyhledání kořenového adresáře na disku a zjištění, je-li v něm složka I386. Ve složce I386 poté dojde k vyhledání souboru BOOTFIX.BIN a jeho načtení do paměti. Následně dojde k předání řízení na adresu, na kterou byl BOOTFIX.BIN načten a dojde k vypsání hlášení, že pro boot z CD je nutné stisknout klávesu. Takto je ošetřena například automatická instalace, není tedy nutné v BIOSu měnit pořadí disků, ze kterých se bootuje. Pokud uživatel do tří sekund nezmáčkne žádnou klávesu, dojde k načtení prvního sektoru prvního pevného disku (číslo 80h) a předání řízení (o tom, co se bude dít dále, je psáno výše). Zmáčkne-li uživatel jakoukoli klávesu, vrátí BOOTFIX.BIN řízení zpět bootovacímu kódu a ten vyhledá ve složce I386 soubor SETUPLDR.BIN. Když ho najde, načte ho do paměti na adresu 2000h:0000h, do registru DL umístí číslo disku, ze kterého se bootuje (např. 81h, pokud je v systému jen jeden pevný disk a jedna CD-ROM mechanika) a předá řízení na adresu 2000h:0000h.

Pokud není adresář I386 nebo jeden ze souborů BOOTFIX.BIN či SETUPLDR.BIN přítomen, dojde opět k nastavení specifického byte v sektoru a oznámení čísla chyby uživateli.

Poznámka od WIFTa: Jak mi Zajdee ještě před uzávěrkou oznámil - soubor BOOTFIX.BIN být na CD nemusí - obejde se to bez něj. Pokud nebude nalezen, přejde se rovnou k SETUPLDR.BIN. A takhle vlastně bootuje CD s NT4. A pokud si na CD s Windows NT4 ten BOOTFIX.BIN přidáte a použijete bootovací sektor z Windows 2000, bude i nové bootovací CD s WinNT4 po startu chtít stisk klávesy.

Předáním řízení na adresu 2000h:0000h končí úloha bootovacího kódu, o další činnost (kterou je načtení souborů SETUPREG.HIV, TXTSETUP.SIF a ovladačů a následně vlastní start instalace - což už je vlastně jádro Windows 2000 spolu se základními ovladači a speciálním subsystémem - ale o tom by se dalo napsat mnoho dalších stránek textu) se už stará SETUPLDR.BIN.


Na závěr jen dodám, že jsem tento postup úspěšně prakticky aplikoval na tyto systémy:

  • Windows 2000 Professional CZ
  • Windows 2000 Server
  • WIndows 2000 Advanced Server
  • Windows XP (několik nefinálních buildů)

A pokud jste to dočetli až sem, mám pro vás bonus v podobě krátkého postupu, jak aplikovat ServicePack na instalačku Windows 2000:

  • Zkopírujte celé CD s Windows 2000 na pevný disk do nějaké složky (příklad: C:\WinInst)
  • Stáhněte si od Microsoftu celý ServicePack (ten soubor má u SP2 něco okolo 100 mega) - příklad: w2ksp2.exe (105,6MB) český SP2
  • Spusťte jej (nejlépe v příkazovém řádku nebo přes příkaz Spustit) s parametry pro extrakci - asi takto:
    w2ksp2.exe -x
    Budete vyzváni k zadání složky, kam se má ServicePack rozbalit. Zadejte např. C:\W2KSP2 (pozor - tuto akci musíte provádět pod Windows 2000 - ve Windows 9x vám to nebude chodit)
    Tímto si rozbalíte celý ServicePack2 do složky W2KSP2 na disku C:.
  • Přejděte v příkazovém řádku do složky C:\W2KSP2\i386\update a spusťte následující příkaz:

    update.exe -s:C:\WinInst
    Tato akce aplikuje ServicePack přímo na instalační soubory Windows 2000. Po dokončení aktualizace můžete celé CD znovu vypálit v tomto článku uvedeným postupem.

Výhoda je jasná - instalace Windows 2000 bude obsahovat přímo integrovaný ServicePack2. Nevýhoda (dá-li se to tak vůbec nazvat) je v tom, že nebudete moci z takovýchto Windows ServicePack odinstalovat. Ale myslím, že to nevadí :-).

Tak hodně štěstí ;-)

Kapitoly článků
3.  Jak to funguje a malý BONUS

WIFT "WIFT" WIFT

Bývalý dlouholetý redaktor internetového magazínu CDR-Server / Deep in IT, který se věnoval psaní článků o IT a souvisejících věcech téměř od založení CD-R serveru. Od roku 2014 už psaní článků fakticky pověsil na hřebík.

více článků, blogů a informací o autorovi

Diskuse ke článku Jak vytvořit bootovací CD s Windows 2000 či XP

Pondělí, 7 Prosinec 2009 - 18:30 | Martin Bartoň | Pitrýs: No a co bys čekal od postupu z roku 2004...
Neděle, 6 Prosinec 2009 - 12:33 | Anonym | Ono z tohoto návodu již prakticky nefunguje nic,...
Čtvrtek, 20 Březen 2008 - 11:11 | WIFT | >> Baluu: Koupit si starší...
Čtvrtek, 20 Březen 2008 - 11:06 | Anonym | zdravim,takze siel som krok za krokom podla vasho...
Pondělí, 12 Listopad 2007 - 00:12 | WIFT | >> Chlapek: CDRWin coby již dost...
Neděle, 11 Listopad 2007 - 09:06 | Bgsd dgssssssssgd | Mam problem s timto navodem CDRWIN mi nechce...
Pondělí, 31 Červenec 2006 - 14:21 | Anonym | kdys si udelam vlastni instalacku v nlive (win xp...
Čtvrtek, 26 Leden 2006 - 15:57 | Anonym | besip  už som sa stretol s takýmto...
Pondělí, 9 Leden 2006 - 15:23 | ERIK ZEMPLENI | Tak uz je to OK, len trebalo nastavit bootovanie...
Čtvrtek, 5 Leden 2006 - 11:59 | ERIK ZEMPLENI | Potreboval by som radu, ako vytvorit bootovaci...

Zobrazit diskusi