Ответ 1
Вот как я понимаю термины.
BootRom
Bootrom (или Boot ROM) - это небольшой кусочек маски или ПЗУ, встроенный в процессорный чип. Он содержит самый первый код, который выполняется процессором при включении питания или reset. В зависимости от конфигурации некоторых штырей ремня или внутренних предохранителей он может решить, где загрузить следующую часть кода, который будет выполняться, и как или проверить его на предмет правильности или достоверности. Иногда он может содержать дополнительные функции, возможно, используемые кодом пользователя во время или после загрузки. Некоторые примеры:
-
Загрузочный диск для iPhone. Встраивается в ПЗУ масок и не может быть изменен. Загружает загрузчик следующего этапа с флэш-памяти или USB (в режиме DFU) и проверяет свою подпись, используя встроенную реализацию RSA. Также предоставляет ускоренные функции дешифрования для загрузчика следующего этапа.
-
TI OMAP4 загрузочный диск. Может загружать код пользователя со вспышки (NOR, NAND, OneNAND), внешнюю память, SD/MMC, USB или UART. Порядок загрузки и параметры устанавливаются штырьками (SYSBOOT). Предоставляет некоторые функции для последующих этапов (управление кэшем /TLB и т.д.).
-
Загрузочный диск NXP LPCxxxx. Размещено в скрытой части внутренней вспышки, которая отображается при 0 при включении питания. Реализует CRP (защита чтения кода), ISP (In-System Programming), который позволяет загружать и запускать новый код поверх UART. Если действительный код пользователя находится во флэш-памяти (требуется правильная контрольная сумма), он сопоставляет его с 0 и переходит к нему. Часть bootrom остается сопоставленной для обеспечения IAP (In-Application Programming) и некоторых других сервисов.
Загрузчик
Bootloader отвечает за поиск и загрузку последней операционной системы или прошивки, которая должна запускаться на чипе. Одним из основных отличий от bootrom является то, что он обычно используется в записываемой вспышке и может быть заменен или обновлен.
Иногда bootrom может выполнять работу загрузчика. Например, OMAP bootrom достаточно сложный (он может анализировать FAT32!), Что вы, вероятно, можете загрузить его и запустить ядро Linux напрямую.
Однако во многих случаях используется отдельный загрузчик, потому что bootrom недостаточно (или отсутствует) или потому что требуется дополнительная гибкость. Это может быть очень просто (загрузить ядро из фиксированного местоположения флэш-памяти в ОЗУ и перейти к нему), или может быть намного сложнее. Например, U-Boot - это как мини-ОС, - он имеет консоль, некоторые команды, позволяет разбить процесс загрузки и например изменять аргументы командной строки ядра или даже загружать ядро из другого места (SD/MMC или USB), запускать некоторые тесты и т.д.
Загрузчики обычно используются, когда у вас более или менее сложная ОС, которая может потребоваться для какой-либо настройки, прежде чем ее можно будет запустить. Меньшие микроконтроллеры, такие как серии NXP LPC, обычно используют монолитную прошивку, чтобы они могли обойтись без нее (однако для них также могут быть пользовательские загрузчики).
На самых простых чипах вообще нет загрузочного ПЗУ или загрузчика - они просто пытаются извлечь и выполнить инструкции с фиксированного начального адреса. Фактически, большинство чипов x86 по сей день работают так: они просто начинают выполнять код на FFFFFFF0 с ожиданием того, что чипсет отобразил там чип BIOS. Здесь вы можете сказать, что BIOS является загрузчиком (хотя он также предоставляет службы ОС, аналогичные bootrom).