Як завантажується Raspberry Pi?


57

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

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

Але як би я завантажував власне ядро ​​з власними налаштуваннями, які я склав сам? Куди я повинен скопіювати зображення ядра / initrd (ram disk), щоб малиновий знаходив його і завантажувався з нього? Я в основному шукаю дуже детальну технічну документацію, яка описує процес завантаження на малину або просто якесь пояснення цього.


Відповіді:


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 м на завантаженні). [З цього часу ця зміна відбулася. ]

Ось деякі ресурси, які можуть бути корисними:


2
Це вміст цих файлів із бінами - усе програмне забезпечення?
Петро

3
@Petr Ось Github для мікропрограмного забезпечення Raspberry Pi, я відредагую його у своїй відповіді.
syb0rg

1
На поширених запитаннях Raspberry Pi написано: "Ви повинні завантажуватися з SD, але USB HD може" взяти "після початкового завантаження. Ви не можете завантажуватися без SD-карти".
syb0rg

1
Це той розділ, який читається спочатку, будь-який розділ із прапором B, або це повинен бути перший розділ? Що робити, якщо я зробив її занадто великою, і я хотів створити ще одну в кінці SD-карти, яка була б меншою
Петрові

1
@Petr Ви повинні задати це як інше питання!
syb0rg
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.