Как работает загрузчик Raspberry Pi?

недавно я начал изучать встроенную систему и встроенный Linux. Я знаю, что во встроенной системе операционная система хранится на Flash или ROM. Когда он включен, загрузчик загружает операционную систему в основную память и с Raspberry Pi, что "flash или ROM" является SD-картой.

Итак, я искал Raspberry Pi, потому что я хочу начать практиковать с одним, и я был смущен концепцией "загрузки" Raspberry Pi. Мой вопрос в том, что загрузчик использует ли Raspberry Pi и как это работает? (А именно, какие процессы происходят перед ядром? head.o? main.c? (запустить ядро))

1 ответов


этот процесс был описан до смерти, у вас не должно было быть проблем с его поиском в сети.

raspberry pi содержит GPU и процессор ARM, два отдельных процессора. Сначала появляется GPU, я предполагаю, что он управляется чипом rom или оборудованием, которое читает sd-карту, ища первый загрузочный файл.бункер. Этот загрузчик GPU недокументирован, насколько это касается нас, он поднимает чип до точки, а затем загружает start.elf другая программа GPU. Что ГПУ программа завершает вывод чипа (ddr init) и в конечном итоге загружает ядро.img, который является приложением ARM (не загрузчиком arm, а приложением, как в linux), он загружает это непосредственно в ОЗУ и делает то, что обычный загрузчик сделал бы, чтобы подготовить arm для загрузки linux (что обычно почти ничего), а затем загружает arm.

традиционный загрузчик-это когда у вас есть только один процессор, и это процессор, который также будет запускать приложение/операционную систему. имена как redboot и uboot, но они стали чрезвычайно сложными, сами операционные системы. для загрузки linux требуется очень мало, поместите несколько ATAGs в ОЗУ и установите пару регистров, и это все (после того, как вы, конечно, подняли систему/ОЗУ и т. д., которая не занимает слишком много кода, но, например, delecate/трудный код для ddr), у новых линуксов есть немного больше материала для настройки, но не слишком много.

запуск raspberry pi элегантен в своей простоте, а также функция съемного энергонезависимого хранилища (sd-карта), которая возвращает вас к Дням предварительного загрузчика, где вы бы вытащили ПЗУ и стерли их, у него есть некоторые из этих болей, но есть способы обойти это. к настоящему времени, вероятно, есть сторонние сложные (uboot и т. д.) загрузчики. Наличие съемной вспышки означает, что вам не нужен сложный загрузчик, вам не нужно беспокоиться о кирпичной системе с сломанным приложением, вы можете восстановить, просто удалив вспышка и изменение его. Загрузчики уже выросли из избегая удаления в СМИ, чтобы избежать того, чтобы отпаять и припаять после программирования или с использованием сокетов на доске суждена была припаянный часть.

ядра.img, как он стоит сейчас (в какой-то момент он был загружен до 0x00000000), загружается до 0x8000. И это все, что вам нужно знать, это обычный образ ядра, который вы бы использовали с загрузчиком. Затем вы можете написать любой голый металл или другой программа / приложение, которое вы хотите, пока вы связываете его для адреса 0x8000 в качестве начала двоичного файла и начальной точки. Если вы хотите использовать исключения, вам нужно как-то написать таблицу исключений (есть различные способы сделать это). Альтернативой этому является параметр устаревшего режима, который вы можете использовать необязательную конфигурацию файла.txt для настройки и загрузки ядра.img до 0x0000, как в первые дни rpi. Лично я иду с теперь по умолчанию 0x8000, другие голые металлические люди иди другим путем...

У меня есть очень простой загрузчик xmodem и тот, который настраивает контакты jtag, чтобы вы могли использовать jtag (оба случая, чтобы избежать необходимости делать танец sd-карты сотни и тысячи раз, когда вы разрабатываете свое приложение). Есть и другие, некоторые более сложные, возможно, даже тот, который имеет usb до момента работы сети.