ZBLAZNIL jsem se [Was: grub a disketa]

Petr Baudis pasky na ucw.cz
Čtvrtek Listopad 28 19:30:31 CET 2002


Tento mail je minen jenom jako urcite technicke upresneni nekterych faktu pro
ty, kteri by si z tohoto threadu chteli odnest nejake konkretni znalosti ;-).
Prosim ty, kteri by pripadne chteli reagovat, aby tak cinili pokud mozno bez
prilis rozbourenych emoci.

Dear diary, on Wed, Nov 27, 2002 at 02:30:56PM CET, I got a letter,
where "Ing. Pavel PaJaSoft Janousek" <janousek na fonet.cz> told me, that...

Nejdrive bych chtel vlozit bod Z (zvolen podle ASCIIgrafickeho poradi):

Z) BIOS nacte uplne prvni sektor disku, tzv. Master Boot Sector (take se mu
rika Record, podle toho je znamy jako MBR). V nem obvykle sidli nejaky rozumny
bootloader (pokud mozno GRUB ;), ktery v tomto sektoru koexistuje s partition
tabulkou. Zpravidla jeho hlavnim ukolem je domluvit se s diskem natolik, aby
ten byl ochoten nacist jeho tzv. second stage. Uprime receno si ted nejsem
jisty, jestli 55aa signaturu (posledni dva byty bootsectoru museji nest hodnotu
0x55aa [low-endianity]) kontroluje jiz BIOS nebo az bootloader.

> a) BIOS je zodpovedny za projiti partition table - najde partition, 
> ktera ma nasten flag aktivni, resp. boot (muze byt max. 1!)

Tuto cinnost neobstarava BIOS, ale "idealni bootloadery", napriklad takove,
ktere se dodaval s *DOSy (u Windowsoidnich systemu nemam tuseni). Moderni
bootloadery (lilo, grub, ntldr [u toho si vsak nejsem jisty {ani co se tyce
modernosti, ani co se tyce active flagu}]) vsak tento flag ponejvice ignoruji a
nechavaji se inspirovat spise svoji konfiguraci.

> b) BIOS si zjisti, kde zacina tato logicka oblast kam ukazuje tento 
> zaznam z part. table a 1. sektor teto oblasti se nazyva boot sektor - 
> protoze se z nej bude skutecne bootovat

Tuto akci opet dela jiz bootloader (byva zvykem tomu rikat chainloading) a dela
se obvykle pouze pokud vam na stroji koexistuje vice systemu; pak zpravidla ten
prvni se zavadi loaderem primo z MBR, pricemz pokud chcete bootovat do jinych,
bootloader preda rizeni do bootsectoru pro danou partition.

Mozna stoji za zminku, ze GRUB umi krome Linuxu sam bootovat i FreeBSD, NetBSD,
OpenBSD a HURD. Ne nadarmo se jmenuje GRand Unified Bootloader ;-). Krom toho
pri chainloadingu umi takove pekne veci, jako prohazovani disku (neboli se pak
disky tvari pro nasledujici operacni system, ze jsou poskladany v trochu jinem
poradi) - to je nedocenitelne napriklad pokud chcete mit v DOSu ci Windows
trosku jinak opismenkovane filesystemy ;-).

> c) BIOS zajisti natazeni tohoto sektoru do pameti pocitace na adresu 
> 0x8000 (adresu pisu z pameti stare 5 let, mozna je offset trochu jinde:->)
> d) BIOS udela absolutni JMP na adresu 0x8000

Krome s/BIOS/bootloader/ zde nemam co dodat, presne adresy nevim :). Ovsem
/usr/src/linux/arch/i386/boot/bootsect.S naznacuje, ze by to mohlo byt
0x7c00..?

> e) Na teto adrese je samozrejme dalsi skok, protoze z historickych 
> duvodu boot sektor obsahuje i jine udaje, kam se presne skace je jiz 
> otazkou zavadece, ktery v tomto boot sektoru sidli (ale stale je to 
> 0x8000 + maximalne 510 bytes... (mam za to, ze se relativne da skakat na 
> 2 bajtech))

Inu, krome takovych detailu jako partition tabulka ;-) (pro MBR; i kdyz ta je
pravda IIRC ponekud dale). Mimochodem bych spise cekal, ze je to short jmp,
tedy 0x8000 by melo byt irelevantni.

> f) co se po tomto skoku deje je jiz plne v rezii tohoto zavadece, 
> zpravidla pomoci INT 10h - na kterem je zavesen opet BIOS natahnou dalsi 
> sektory z disku a pokracuje se v bootovani, prepinani modu procesoru 
> apod....

Na INT 10h pravda sidli BIOS, sidli.. ;-) Ovsem je otazka, k cemu vam tam bude,
ponevadz na tomto interruptu sidli videorutiny, neboli maximalne na vypsani
nejake hezke hlasky. Bezpochyby jste mel na mysli INT 13h, kde bydli diskove
rutiny.

Prijde mi mozna trosku nestastne tak autoritativne sirit informace, ve kterych
autor nema zrejme prilis jasno. Sam take nezarucuji, ze je vse 100% spravne,
ovsem troufam si tvrdit, ze se me podani ponekud vice blizi realite ;-).

Kind regards,

-- 
 
				Petr "Pasky" Baudis
.
weapon, n.:
        An index of the lack of development of a culture.
.
Public PGP key && geekcode && homepage: http://pasky.ji.cz/~pasky/


Další informace o konferenci Linux