Nighpher, postaram się odpowiedzieć na twoje pytanie, ale w celu uzyskania pełniejszego opisu procesu rozruchu, przeczytaj artykuł IBM .
Ok, zakładam, że używasz GRUB lub GRUB2 jako bootloadera dla wyjaśnienia. Po pierwsze, kiedy BIOS uzyskuje dostęp do dysku w celu załadowania bootloadera, korzysta z wbudowanych procedur dostępu do dysku, które są przechowywane w słynnym 13-godzinnym przerwie. Program ładujący (i jądro w fazie instalacji) korzysta z tych procedur podczas uzyskiwania dostępu do dysku. Należy pamiętać, że BIOS działa w trybie procesora w trybie rzeczywistym (16 bitów), dlatego nie może adresować więcej niż 2 ^ 20 bajtów pamięci RAM (2 ^ 20 nie 2 ^ 16, ponieważ każdy adres w trybie rzeczywistym składa się z adresu segmentu * 16 + przesunięcia , gdzie zarówno adres segmentu, jak i przesunięcie są 16-bitowe, patrz http://en.wikipedia.org/wiki/X86_memory_segmentation ). W związku z tym te procedury nie mogą uzyskać dostępu do więcej niż 1 MiB pamięci RAM, co jest ścisłym ograniczeniem i poważną niedogodnością.
BIOS ładuje kod bootloadera bezpośrednio z MBR - pierwsze 512 bajtów dysku i wykonuje go. Jeśli używasz GRUB, ten kod to GRUB etap 1. Ten kod ładuje GRUB etap 1.5, który znajduje się albo w pierwszych 32 KiB miejsca na dysku, zwanym regionem zgodności z DOS, albo ze stałego adresu systemu plików. Aby to zrobić, nie musi rozumieć systemu plików, ponieważ nawet etap 1.5 znajduje się w systemie plików, jest to „surowy” kod i można go bezpośrednio załadować do pamięci RAM i wykonać: http://www.pixelbeat.org/ docs / disk / . Ładowanie etapu 1.5 z dysku do pamięci RAM wykorzystuje procedury dostępu do dysku BIOS.
Stage1.5 zawiera narzędzia systemu plików, dzięki czemu może czytać stage2 z systemu plików (cóż, nadal używa BIOS 13h do odczytu z dysku do pamięci RAM, ale teraz może odszyfrować informacje o systemie plików o i-węzłach itp. I uzyskać surowy kod z dysk). Starsze BIOSy mogą nie być w stanie uzyskać dostępu do całego HD z powodu ograniczeń w trybie adresowania dysku - mogą korzystać z systemu Cylinder-Head-Sector, nie mogąc rozwiązać więcej niż pierwszych 8 GiB miejsca na dysku: http: //en.wikipedia. org / wiki / Sektor cylindra .
Stage2 ładuje jądro do pamięci RAM (ponownie, używając narzędzi dyskowych BIOS). Jeśli jest to jądro 2.6+, ma również skompilowane initramfs, więc nie trzeba go ładować. Jeśli jest to starsze jądro, bootloader ładuje również samodzielny obraz initrd do pamięci, aby jądro mogło go zamontować i uzyskać sterowniki do montowania prawdziwego systemu plików z dysku.
Problem polega na tym, że jądro (i ramdysk) ważą więcej niż 1 MiB, dlatego aby załadować je do pamięci RAM, należy załadować jądro do pierwszego 1 MiB, a następnie przejść do trybu chronionego (32-bitowy), przenieść załadowane jądro do wysokiej pamięci (wolne pierwszy 1 MiB dla trybu rzeczywistego), następnie ponownie wróć do trybu rzeczywistego (16 bitów), przenieś ramdysk z dysku do pierwszego 1 MiB (jeśli jest to osobne jądro initrd i starsze jądro), prawdopodobnie przełącz się ponownie w tryb chroniony (32-bitowy), umieść go tam, gdzie należy, ewentualnie wróć do trybu rzeczywistego (lub nie: /programming/4821911/does-grub-switch-to-protected-mode ) i uruchom kod jądra. Ostrzeżenie: nie jestem całkowicie pewien dokładności i dokładności tej części opisu.
Teraz, kiedy w końcu uruchomisz jądro, już je ładujesz i ramdysk jest ładowany do pamięci RAM przez bootloader , więc jądro może korzystać z narzędzi dyskowych z ramdysku, aby zamontować prawdziwy system plików root i przestawić do niego root. Sterowniki ramfs są obecne w jądrze, więc może oczywiście zrozumieć zawartość initramfs.