Я не могу понять 3 вещи:
* как правильно работать с таймерами в RPi
* какой из таймеров задействован в кооп. версии
* что эмулируется, а что существует только в железе
Поэтому отлаживаем QEMU. Был ряд проблем:
* В VirtualBox Debian Stretch зависал (частично решается установкой xdm, частично - за счёт большего использования клавиатуры, например, иногда мышь отказывается закрывать QEMU, а Alt-F4 вполне работает).
* Не создавался launch.json по кнопке - но через некоторое время создался, видимо, надо было дождаться, пока прочухается
hw/arm/raspi.c - здесь вызывается raspi_machine_init, к-рая настраивает машину RPi, в т.ч. она как-то соединяет GPIO с периферийными устройствами.
hw/intc/bcm2835_ic.c - файл имитирует контроллер прерываний
include/qom/cpu.h - static inline void cpu_interrupt(CPUState *cpu, int mask)
- с первого раза попал в нужное прерывание (после включения таймера), irq = 0, mask = 2 (хотя пока что это всё ещё волшебные числа)
Пока не понимаю, как определять значения регистров - это бы помогло.