Как работает stm32-renode-emulator
Прошивка запускается в эмуляторе вместо платы, печатает стартовый лог, а скрипт проверяет, что лог полный, правильный и принадлежит именно этой сборке. Так гипотезы проверяются до аппаратного опыта и в CI, не занимая стенд.
Путь данных
прошивка.elf
лог через семихостинг, строки с префиксом времени
[ 0.001] boot: startСекции ELF
версия, сборка и ревизия в .fw_version, контрольная сумма в .checksum
expected.toml
какие строки обязаны быть, каких быть не должно
[require].lines, [forbid].linesrun.py
находит эмулятор, проверяет версию, готовит макет
--profile G474 | F411, --platformRenode 1.17
макет Cortex-M4 с памятью и заглушками периферии или своя модель платы
stm32g4_mock.repl; 1.16.1 через renode_compat.pyQEMU
машина netduinoplus2 (STM32F405, тот же Cortex-M4); прошивка завершает прогон сама
SYS_EXITКаталог прогона
лог прошивки, журнал эмулятора, описание прогона
startup.log, emulator.log, run.jsonОтладка вместо прогона
debug.resc поднимает GDB-сервер Renode и держит ядро до подключения, как ключ -S у QEMU.
--verify; итог — код возврата и отчёт.check_startup_log.py
сверяет лог с ожиданиями и подставляет данные из ELF
{version}, {build}, {crc32}, {size}Отчёт
какие правила выполнены, какие нет
startup-log-report.jsonКод возврата
0 — PASS (без --verify — CAPTURED), 1 — лог не прошёл проверку, 2 — ошибка прогона (нет эмулятора, лога, таймаут)
Что проверяется в логе
min_lines: оборванный лог не пройдёт.first_line, last_line: регулярные выражения.[require].lines: каждое выражение должно найтись.[forbid].lines: признаки отказа или чужой среды.Маршруты
| Профиль | Эмулятор и машина | Вывод |
|---|---|---|
G474 | Renode 1.17, макет stm32g4_mock.repl или модель своей платы | семихостинг в файл |
F411 | QEMU, netduinoplus2 | семихостинг в chardev-файл |
python scripts/run.py --profile G474 --elf build/firmware.elf \
--verify --expected boot.toml
python scripts/run.py --profile F411 --elf build/firmware.elf \
--qemu qemu-system-arm
Версии Renode
- 1.17 — основная. 1.16.1 работает с предупреждением, другие версии отклоняются.
- В 1.17 семихостинг — отдельный обработчик
CPU.SemihostingHandler, в 1.16.1 его UART висит на процессоре. Один макет обе версии не принимают,renode_compat.pyготовит копию под найденную. - Тип ядра
cortex-m4, а неcortex-m4f: в 1.16.1 второй отдаёт CPUID Cortex-M7. Сравнивайте номер ядра0xC24, а не ревизию.
Что важно понимать
SYS_EXIT от прошивки или таймаут.Насколько проверено
Проверяется в CI репозитория
- прошивка-зонд для F411CE, F401CC и F103C8 в Renode 1.17 с проверкой лога
- F411CE и F401CC в QEMU с выходом по времени
- оборванный лог отклоняется
- адреса макета G474 и модели зонда сверены с SVD
- подготовка макета под 1.16.1 (
renode_compat.py, без запуска самой 1.16.1)
Ещё не проверено
- GDB-сервер Renode вне песочницы (R17)
- соответствие эмулятора железу (R16)
Описание навыка (SKILL.md) и скрипты · версия 1.1.0