В настоящее время я работаю над поиском проблемы с устройством ввода-вывода, которое использует serial.c в реализации пользовательской платы. В настоящее время функции serial_ioport_write
и serial_ioport_read
не вызываются, что означает, что я не получаю вывод, и приложение не будет запущено. Точки останова для этих функций никогда не достигаются, а изменяемые ими структуры данных не обновляются. Проведя тестовую эмуляцию на известной рабочей плате, я смог обнаружить, что вызывающими для этих функций являются memory_region_dispatch_write
и memory_region_dispatch_read
в memory.c , предположительно с использованием некоторого стандартизированного формата структуры для отображенияустройство ввода / вывода функционирует с указателем универсальной функции.
Моя проблема в том, что функции в memory.c вызывают - много. Поэтому я пытаюсь найти способ прерывать эти функции, только если они вызваны для определенной области памяти, так как я считаю, что проблема заключается в том, что конкретной области не были назначены правильные функции обратного вызова для чтения / записи. Я не могу использовать гостевые адреса области памяти для точки наблюдения, потому что эти адреса отображаются в системной памяти, и эти отображения всегда меняются. Так какой же лучший способ справиться с ограничением области отладки эмулятора во время эмуляции для конкретной функции?