Подтвердить что ты не робот

В чем разница между загрузчиком и загрузчиком в системах ARM

В основном я использую системный фон x86, в котором BIOS (Firmware) отвечает за загрузку загрузчика (например, GRUB) от PowerON, который, в свою очередь, загружает ОС. Теперь я читал эквивалентную последовательность загрузки в системах ARM, и, похоже, в Интернете есть статьи, ссылающиеся на два термина: bootrom и загрузчик.

В некоторых статьях упоминается, что из PowerON загрузчик (например, u-boot) - это первое, что выполняется, тогда как в некоторых статьях говорится, что из PowerON сначала запускается bootrom (обычно мелькающий на внутреннем ПЗУ процессора), который, в свою очередь, загружает загрузчик (например, uboot), который затем загружает ОС.

Может ли кто-нибудь дать некоторые пояснения в bootrom vs bootloader? Кроме того, я хотел бы узнать имя популярного bootrom, который обычно используется в системах ARM.

4b9b3361

Ответ 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).

Ответ 2

Процессоры ARM могут иметь флэш-ROM, то есть микросхема чипа включает в себя некоторый код для загрузки BIOS. Много говорилось о том, что GPU делает MOST последовательности загрузки, но у меня есть мои оговорки. Использует ли GPU код ARM? Нет. Итак, перед официальной версией последовательности загрузки, я вижу из исходных данных GPU, 32K копируется в кэш L2 (поскольку DRAM не был включен), и с этой точки процессор запускает код для загрузите BIOS из SDRAM. В последовательности загрузки нет настроек Trustzone. Это позволяет использовать кодировщик (встроенные системы) для использования огромного большинства процессорных FlashROM в виде векторных таблиц, чтобы вы могли опробовать оборудование и настроить векторы по мере необходимости. Материал TZ не имеет полезных свойств, поскольку The Smurf Suite доказывает, что он небезопасен. Но если вы используете это пространство для векторов, если кто-то заслоняет, ОС умирает.