Как загружается Raspberry Pi?

57

У меня есть малиновый мини-компьютер, и мне интересно, как эта штука выполняет весь процесс загрузки. Я могу скомпилировать свое собственное ядро ​​и запустить ramdisk с помощью своих собственных сценариев и создать свою собственную минимальную систему Linux на ПК, но для этого мне нужно использовать некоторый загрузчик. Малина, кажется, не поддерживает загрузчики вообще.

Кажется, что он каким-то образом загружается с помощью своего графического процессора, который читает какой-то раздел на SD-карте (возможно, тот, который имеет загрузочный флаг), который должен быть отформатирован в FAT32, затем он читает некоторые файлы оттуда, которые предоставляются, например, raspbian.

Но как мне загрузить свое собственное ядро ​​с моими собственными настройками, которые я сам скомпилировал? Куда мне скопировать образ ядра / initrd (RAM-диск), чтобы Raspberry нашел его и загрузился с него? Я в основном ищу некоторую очень подробную техническую документацию, которая описывает процесс загрузки на RasPberry или просто некоторые объяснения этого.

Petr
источник

Ответы:

59

Из этого сообщения на форуме Raspberry Pi [отредактировано, чтобы отражать loader.binанахронизм] :

  1. При первом включении Raspberry Pi ядро ​​ARM выключено, а ядро ​​GPU включено. В этот момент SDRAM отключен.
  2. Графический процессор начинает выполнение загрузчика первого этапа, который хранится в ПЗУ на SoC. Загрузчик первого этапа считывает SD-карту, загружает загрузчик второго этапа ( bootcode.bin) в кэш L2 и запускает ее.
  3. bootcode.binвключает SDRAM, считывает загрузчик третьей ступени (loader.bin) с SD-карты в ОЗУ и запускает его. [Более свежие версии не используют загрузчик третьей ступени. ]
  4. [Если применимо] loader.binчитает прошивку графического процессора ( start.elf).
  5. start.elfчитает config.txt, cmdline.txtиkernel.img

loader.binне делает много Он может обрабатывать .elfфайлы и поэтому необходим для загрузки start.elfв верхней части памяти (ARM использует SDRAM с нулевого адреса). Есть план добавить поддержку загрузки эльфов bootcode.bin, что сделает loader.binненужным, но это низкий приоритет (я думаю, это может сэкономить 100 мс при загрузке). [Это изменение с тех пор произошло. ]

Вот некоторые ресурсы, которые могут быть полезны:

syb0rg
источник
2
Является ли содержимое этих файлов bin проприетарным программным обеспечением?
Петр
3
@Petr Вот Github для прошивки Raspberry Pi, я отредактирую его в своем ответе.
syb0rg
1
В часто задаваемых вопросах Raspberry Pi говорится: «Вы должны загрузиться с SD, но USB HD может« вступить во владение »после начальной загрузки. Вы не можете загрузиться без SD-карты».
syb0rg
1
Это раздел, который читается первым, любой раздел с флагом B или это должен быть первый раздел? Что делать, если я сделал его слишком большим, и я хотел создать еще один конец SD-карты, которая была бы меньше
Петр
1
@Petr Вы должны задать это как другой вопрос!
syb0rg