Прежде чем окончательно перейти к теме эмуляции, мне хочется рассказать про ещё один метод отладки программ прямо на железе.
Первые bare metal программы начали появляться практически сразу после выхода Raspberry Pi. Понятное дело, что про эмуляцию на тот момент речи не шло, так как платформа только-только вышла. И поэтому энтузиасты вслепую писали свой код, далее записывали скомпилированное ядро на SD-карту и проверяли его работоспособность непосредственно на железе.
Вот так выглядела типичная проверка кода без какого-либо инструментария:
- Выключаем Raspberry Pi
- Извлекаем из неё SD-карту
- Вставляем SD-карту в кард-ридер
- Подключаем кард-ридер к компьютеру
- Монтируем карту и ждём
- Копируем бинарный файл на SD-карту
- Синхронизируемся и ждём
- Размонтируем карту
- Вставляем SD-карту в Raspberry Pi
- Включаем Raspberry Pi
- Начинаем всё сначала
Очень долго и муторно. А ведь именно так и отлаживал свои программы упомянутый мной выше Питер Лемон. Но, к счастью, энтузиаст David Welch (dwelch67) придумал и воплотил метод, который существенно облегчил жизнь bare metal программистам. Суть метода заключается в том, что на SD-карту один раз записывается загрузчик, а сама Raspberry Pi подключается к компьютеру посредством USB-TTL адаптера:
Подключение осуществляется всего тремя проводами к разъёму GPIO:
- GPIO6 - GND
- GPIO8 - RXD
- GPIO10 - TXD
Единственная задача загрузчика - загрузка файла по UART в ОЗУ и передача ему управления. Это мне напомнило загрузку компьютер Вектор-06Ц, только там использовался не UART, а магнитофонный портСам загрузчик располагается по адресу 0x200000, то есть у вас есть 0x200000 байт (2 Мб) под собственную программу.
Таким образом, с помощью этого загрузчика всё сводится к следующим действиям:
- Выключаем Raspberry Pi
- Включаем Raspberry Pi
- На компьютере набираем команду передачи файла.
Но всё можно ещё более упростить, если распаять кнопку RESET, пины под которую есть на всех моделях Raspberry Pi:
Так вот если эту кнопку распаять, то первые два пункта сводятся просто к нажатию на RESET.
Думаю, что такой метод отладки не потерял своей актуальности и сегодня, когда QEMU более-менее сносно научился эмулировать Raspberry Pi.
Ну и в заключении приведу ссылку на репозиторий с исходниками и скомпилированным загрузчиком (есть несколько его версий), о котором шла речь в этом сообщении: https://github.com/dwelch67/raspberrypi




Сам загрузчик располагается по адресу 0x200000, то есть у вас есть 0x200000 байт (2 Мб) под собственную программу.
Ответить с цитированием