Какой BIOS использует Raspberry Pi?

29

Я хочу узнать о BIOS на материнской плате Raspberry Pi. Как называется BIOS? У него есть конкретное имя или он просто называется BIOS на Raspberry Pi?

Девин Коллиер Джонсон
источник
2
BIOS хранит некоторое программное обеспечение для управления вашим ПК до его загрузки (пример настройки жесткого диска, памяти и т. Д.). Pi не использует «BIOS», как в ПК. Он просто инициализирует чип Broadcom (CPU, Cache, GPU), используя встроенное ПО, написанное для этого чипа, и передается прямо в операционную систему. Затем ОС обнаруживает оборудование и оперативную память, о которых сообщает Broadcom. Это делает загрузку действительно быстрой, но только Broadcom знает, как отлаживать или «устанавливать» свойства на лету.
Петр Кула

Ответы:

32

Это встроенное программное обеспечение с закрытым исходным кодом, запрограммированное в процессор SoC (система на чипе), которое нельзя изменить. После включения питания прошивка запустит загрузчик на SD-карте. Я не верю, что какие-либо другие сервисы предоставляются через микропрограмму SoC, так что это на самом деле не «BIOS» (базовая система ввода / вывода). После этого все остальное приходит с SD-карты.

Согласно разделу программного обеспечения вики , порядок загрузки следующий:

  1. Загрузчик первого этапа - используется для установки загрузочного раздела FAT32 на SD-карту, чтобы получить доступ к загрузчику второго уровня. Он запрограммирован в самом SoC во время изготовления RPi и не может быть перепрограммирован пользователем.
  2. Загрузчик второй ступени (bootcode.bin) - используется для получения прошивки графического процессора с SD-карты, программирования прошивки, а затем запуска графического процессора.
  3. Прошивка графического процессора (start.elf) - после загрузки это позволяет графическому процессору запустить процессор. Дополнительный файл fixup.dat используется для настройки раздела SDRAM между графическим процессором и процессором. В этот момент CPU освобождается от сброса, и выполнение передается.
  4. Код пользователя - это может быть любое количество двоичных файлов. По умолчанию это ядро ​​Linux (обычно называемое kernel.img), но это также может быть другой загрузчик (например, U-Boot) или приложение «голыми руками».
Тево Д
источник
7
Я бы только добавил, что загрузчик 1-го этапа записывается на небольшом ПЗУ внутри SoC. Как уже упоминалось, только ответственность за загрузку bootcode.binс SD-карты. По этой причине невозможно загрузить RaspberryPi с носителя, отличного от SD-карты.
Кшиштоф Адамски
@TevoD, хороший ответ! Я люблю подробности.
Девин Коллиер Джонсон
16

@TevoD почти прав в том, что он написал в своем ответе - RaspberryPi использует двоичный файл прошивки с закрытым исходным кодом в качестве загрузчика. Текущую версию можно найти здесь . Два файла, из которых состоит прошивка: bootcode.bin(загрузчик 2-й ступени) и start.elf(«прошивка» для GPU). Что интересно и совершенно уникально для RaspberryPi, так это то, что он начинается с GPU(графического чипа), и именно здесь запускается загрузчик. GPUзатем запускается ARM CPUи запускается ядро ​​Linux.

Однако после запуска Linux код GPUне выгружается. Вместо этого он запускает свою собственную простую ОС, которая называется VCOS( Video Core Operating System). Ядро Linux связывается со своими сервисами, используя специальные mailbox protocolи используя прерывания (GPU может генерировать прерывания ARM). Вы можете прочитать некоторую информацию о протоколе почтового ящика, используемого framebuffer здесь . GPU отвечает не только за графические объекты, но также контролирует часы и производит звук, например. В связи с этим прошивку графического процессора можно считать чем-то похожим на BIOSобычные компьютеры ПК. Вы можете найти больше информации об этом чтении драйверов ядра RaspberryPi Linux.

Вы также можете найти больше информации в этом ответе.

Кшиштоф Адамски
источник
Хорошая точка зрения. Я считал, что вопрос BIOS явно относится к встроенной прошивке, а не к SD-карте, и добавил порядок загрузки для более полного ответа. Ваш, конечно, берет это оттуда. +1
Tevo D