Аппаратная отладка кода BIOS
Jan. 31st, 2025 07:22 pmНаверное у многих читателей моего ЖЖ сложилось ложное представление, что я коллекционер старого железа, который только и делает что его ремонтирует и моет. Да, я занимаюсь этим эпизодически, стал писать об этом, потому что народ интересует текучка.
Однако, есть по настоящему интересные и зубодробительные штуки, например, как отлаживать код BIOS и реализовать свой "пошаговый" отладчик.

Суровая аппаратная отладка кода BIOS
К сожалению, я не разработчик материнской платы, у меня нет её схемотехники, а также отсутствует отладочные инструменты. У меня стояла задача запустить BIOS схожей архитектуры на этом железе (зачем и почему, пока рассказывать не буду). Без всяких отладок, прошивка вела себя странно, она и не зависала с ошибкой, но и не загружалась. И мне хотелось понять, на каком же этапе она отваливается.
Сама прошивка BIOS у меня была открыта в IDA Pro, задача была понять в каком же месте кода происходит отвал. Конечно, бесценно знать состояние регистров, месторасположение, реализовать пошаговую отладку, но мне пока не хотелось сильно влезать паяльником в плату и пока морально не готов сильно перепахивать код основного BIOS.
Решение пришло само собой: нужно узнать адрес, где же происходит всякое нехорошее. А адрес можно узнать с помощью логического анализатора, который будет установлен на микросхему BIOS, точно на ножки адреса.

Таракан отладочных щупов
Идея оказалась рабочей, и изначально прямо таки блестящей. Хорошо виден старт, и адреса верно подхватились.

Отображение адресов в логическом анализаторе
Проще в тексте увидеть:
В IDA точное соответствие:


То есть отладка отлично работает, побайтно вычитывается из ПЗУ данные и далее по ним идут переходы.
Но, что я не предполагал, что есть всякие циклы ожидания...

Циклы ожидания
И, проблема в том, что количество памяти логического анализатора ограничена, и таким циклом она забивается моментально...

Мы подошли к концу памяти анализатора
Короче говоря, без логического анализатора с большим количеством памяти, при этом достаточной частотой дискретизации (40 МГц тактовая, это вам не шутки), может помочь решить ситуацию. Либо надо искать способы пошаговой отладки.
Внимательные читатели могут заметить, что я перехватываю POST-код 02.

Но, к сожалению мне удалось поймать этом место при нескольких перезагрузках. Пока хорошего решения этой проблемы у меня нет, кроме как покупка дорогущего анализатора (ценник на них на рынке меня немного приводит в уныние).
Однако, есть по настоящему интересные и зубодробительные штуки, например, как отлаживать код BIOS и реализовать свой "пошаговый" отладчик.

Суровая аппаратная отладка кода BIOS
К сожалению, я не разработчик материнской платы, у меня нет её схемотехники, а также отсутствует отладочные инструменты. У меня стояла задача запустить BIOS схожей архитектуры на этом железе (зачем и почему, пока рассказывать не буду). Без всяких отладок, прошивка вела себя странно, она и не зависала с ошибкой, но и не загружалась. И мне хотелось понять, на каком же этапе она отваливается.
Сама прошивка BIOS у меня была открыта в IDA Pro, задача была понять в каком же месте кода происходит отвал. Конечно, бесценно знать состояние регистров, месторасположение, реализовать пошаговую отладку, но мне пока не хотелось сильно влезать паяльником в плату и пока морально не готов сильно перепахивать код основного BIOS.
Решение пришло само собой: нужно узнать адрес, где же происходит всякое нехорошее. А адрес можно узнать с помощью логического анализатора, который будет установлен на микросхему BIOS, точно на ножки адреса.

Таракан отладочных щупов
Идея оказалась рабочей, и изначально прямо таки блестящей. Хорошо виден старт, и адреса верно подхватились.

Отображение адресов в логическом анализаторе
Проще в тексте увидеть:
0 FFFE
1 FFF1
2 FFF3
3 FFF5
4 FFF7
5 FFF9
6 FFFB
7 E05B
8 E05D
9 E05F
10 E061
11 E063
12 81AF
13 81B1
14 81B3
15 81AF
16 81B1
17 81B3
В IDA точное соответствие:


То есть отладка отлично работает, побайтно вычитывается из ПЗУ данные и далее по ним идут переходы.
Но, что я не предполагал, что есть всякие циклы ожидания...

Циклы ожидания
И, проблема в том, что количество памяти логического анализатора ограничена, и таким циклом она забивается моментально...

Мы подошли к концу памяти анализатора
Короче говоря, без логического анализатора с большим количеством памяти, при этом достаточной частотой дискретизации (40 МГц тактовая, это вам не шутки), может помочь решить ситуацию. Либо надо искать способы пошаговой отладки.
Внимательные читатели могут заметить, что я перехватываю POST-код 02.

Но, к сожалению мне удалось поймать этом место при нескольких перезагрузках. Пока хорошего решения этой проблемы у меня нет, кроме как покупка дорогущего анализатора (ценник на них на рынке меня немного приводит в уныние).