Одна часть вопроса, на которую до сих пор не было ответа, - это различие между загрузчиками на микроконтроллерах и микропроцессорных системах.
микроконтроллер
Большинство микроконтроллеров имеют встроенную память ПЗУ, в которой содержится их программный код. Для изменения этого кода обычно требуется устройство программиста, которое подключается к интерфейсу программирования микроконтроллера (например, ISP на ATMega). Но эти программные интерфейсы обычно не очень удобны в использовании по сравнению с другими интерфейсами, поскольку они могут быть недоступны в данном контексте. Так, например, хотя почти каждый компьютер имеет порты USB, SPI-интерфейс, необходимый для ISP, гораздо реже, а другие интерфейсы, такие как PID-интерфейс, используемый в ATXMega, поддерживаются только специальным программным обеспечением.
Так, например, если вы хотите обновить программное обеспечение с обычного компьютера без какого-либо внешнего оборудования, вы можете использовать загрузчик, который считывает данные с интерфейса другого типа (например, RS232, USB или RS232 через USB, как на Arduino), чтобы запрограммировать устройство через общие интерфейсы.
Тем не менее, если вам не нужны эти функции, загрузчик является полностью необязательным. Микроконтроллер по-прежнему может запускать свой код полностью без загрузчика.
Микропроцессор
На микропроцессоре дела обстоят немного иначе. В то время как большинство микропроцессоров имеют ПЗУ, достаточно большое для загрузчика, эти ПЗУ не достаточно велики, чтобы вместить полную ОС. Таким образом, цель загрузчика - инициализировать оборудование, найти загрузочную ОС, загрузить и запустить ее. Таким образом, загрузчик имеет решающее значение для каждой загрузки.
В системах x86 / x64 этот загрузчик является либо BIOS, либо UEFI (в основном, более новой версией BIOS).
Иногда вы можете даже запустить несколько загрузчиков в цепочке. Например, если у вас есть система двойной загрузки с Windows и Linux, вы можете получить следующее:
- BIOS / UEFI загружается и находит установленный GRUB. Затем он загружает GRUB (= Grand Unified Bootloader)
- GRUB находит какой-то Linux и загрузчик Windows. Пользователь выбирает загрузчик Windows.
- Загрузчик Windows запускается и находит установленные Windows 7 и Windows 10. Пользователь выбирает Windows 10.
- Windows 10 наконец загружается.
Таким образом, в этом случае было три части программного обеспечения, которые можно считать загрузчиком. Как GRUB, так и Windows Bootloader в основном предназначены для того, чтобы предоставить пользователю более удобный вариант выбора загрузки, чем тот, который им предоставляет BIOS / UEFI. Он также позволяет запускать несколько ОС с одного жесткого диска или даже с одного раздела.
TLDR
Таким образом, хотя в обеих системах загрузчик выполняет похожие действия (помогая пользователю выбрать, какой код загружать), они оба сильно отличаются друг от друга тем, как они выполняют это и что именно они делают.