58440

OpenOCD при отладке выводит ошибки "Warn : Failed to read memory via system bus. Warn : Failed to read memory via program buffer. Warn : Failed to read memory via abstract access. Error: Target riscv.cpu: Failed to read memory (addr=0x2) ..."


При отладке микросхем MDR1206(A)FI и К1986ВК025 OpenOCD выводит ошибки:
Warn : Failed to read memory via system bus.
Warn : Failed to read memory via program buffer.
Warn : Failed to read memory via abstract access.
Error: Target riscv.cpu: Failed to read memory (addr=0x2)
Error: progbuf=failed, sysbus=failed, abstract=failed

Чем вызвана проблема и как ее решить?

Команду чтения адресов 0x0000_0000, 0x0000_0002 формирует GDB. Если для области исполнения программы отладчик GDB не обнаруживает debug-символы (например, при исполнении загрузочной программы микроконтроллера), отладчик пытается найти пролог функции, на которой произошла остановка. Из-за этого механизма поиска происходит чтение данных по адресам 0x0000_0000, 0x0000_0002. Адрес 0x0000_0000 по спецификации (карте памяти Debug Module) является "Safe zero" (доступен для записи и чтения). Следующий после него адрес в карте памяти - 0x0000_0100 "Halted ack" (доступен только для чтения). Адреса между 0x0000_0000 и 0x0000_0100 не специфицируются, обращения к ним осуществляться не должно.
Поэтому, для избежания запуска данного механизма поиска пролога отладчиком GDB, можно рассмотреть следующие варианты:
  • Загружать debug-символы для всех областей исполнения программы.
  • Собрать и использовать отладчик GDB с патчем (приложен ниже), который будет пропускать подобное невалидное чтение.
  • Либо же можно игнорировать данные ошибки - последствий для целевого функционирования они не имеют.

Файлы для скачивания

Теги

Был ли ответ полезным?