Jedną częścią pytania, na które dotychczas nie udzielono odpowiedzi, jest różnica między programami ładującymi na mikrokontrolerach i systemach mikroprocesorowych.
Mikrokontroler
Większość mikrokontrolerów ma wbudowaną pamięć ROM, która zawiera kod programu. Zmiana tego kodu zwykle wymaga urządzenia programującego, które łączy się z interfejsem programowania mikrokontrolera (np. ISP w ATMega). Ale te interfejsy programowania zwykle nie są zbyt wygodne w użyciu w porównaniu z innymi interfejsami, ponieważ mogą nie być łatwo dostępne w danym kontekście. Na przykład, chociaż prawie każdy komputer ma porty USB, interfejs SPI wymagany dla ISP jest znacznie rzadszy, a inne interfejsy, takie jak interfejs PID używany w ATXMega, są obsługiwane tylko przez dedykowany sprzęt do programowania.
Na przykład, jeśli chcesz zaktualizować oprogramowanie ze zwykłego komputera bez zewnętrznego sprzętu, możesz użyć programu ładującego, który odczytuje z innego rodzaju interfejsu (np. RS232, USB lub RS232 przez USB, jak na Arduino), aby zaprogramować urządzenie przez popularne interfejsy.
To powiedziawszy, jeśli nie potrzebujesz tej funkcji, bootloader jest całkowicie opcjonalny. Mikrokontroler nadal może uruchamiać swój kod całkowicie bez bootloadera.
Mikroprocesor
W mikroprocesorze sprawy wyglądają trochę inaczej. Podczas gdy większość mikroprocesorów jest wyposażona w pamięć ROM wystarczająco dużą dla bootloadera, te pamięci ROM nie są wystarczająco duże, aby pomieścić pełny system operacyjny. Celem bootloadera jest więc inicjalizacja sprzętu, poszukiwanie bootowalnego systemu operacyjnego, załadowanie go i uruchomienie. Bootloader jest więc kluczowy dla każdego rozruchu.
W systemach x86 / x64 ten moduł ładujący jest systemem BIOS lub UEFI (w zasadzie nowszą wersją systemu BIOS).
Czasami może nawet istnieć wiele programów ładujących działających w łańcuchu. Na przykład, jeśli masz system podwójnego rozruchu z systemami Windows i Linux, możesz skończyć z następującymi:
- BIOS / UEFI uruchamia się i stwierdza, że GRUB jest zainstalowany. Następnie ładuje GRUB (= Grand Unified Bootloader)
- GRUB znajduje jakiś system Linux i moduł ładujący systemu Windows. Użytkownik wybiera moduł ładujący systemu Windows.
- Program rozruchowy systemu Windows uruchamia się i znajduje zainstalowany system Windows 7 i Windows 10. Użytkownik wybiera system Windows 10.
- Windows 10 wreszcie się uruchamia.
Tak więc w tym przypadku były trzy programy, które można uznać za bootloader. Zarówno GRUB, jak i Windows Bootloader są tam głównie po to, aby dać użytkownikowi wygodniejszą opcję wyboru rozruchu niż system BIOS / UEFI. Umożliwia także uruchamianie wielu systemów operacyjnych z tego samego dysku twardego lub nawet z tej samej partycji.
TLDR
Podczas gdy w obu systemach bootloader robi podobne rzeczy (pomagając użytkownikowi wybrać kod, który ma zostać uruchomiony), oba różnią się znacznie tym, jak to robią i co robią dokładnie.