Jeffrey Cross
Jeffrey Cross

Початок роботи з налагодженням в межах

Якщо ви робите (або розбираєте) що-небудь складне, ви можете прагнути кращого бачення всередині. Осцилограф або логічний аналізатор може бути важливим інструментом для цифрової електроніки, а також дивно корисним для вбудованого програмного забезпечення. Ваш код також може допомогти через повідомлення, записані в файл або послідовний порт. Але іноді вам дійсно потрібен інтерактивний перегляд внутрішніх компонентів вашої програми, а на вбудованій системі це означає, що вам потрібний вбудований відладчик (ICD).

Деякі з вас вже знають про налагодження вихідного рівня з інших контекстів, як-от налагодження настільних додатків у Xcode або Visual Studio, з використанням точок зупинки та однокрокової функціональності для сценаріїв у консолі веб-браузера або за допомогою автономного відладчика, наприклад, GNU Debugger, WinDbg або LLDB. Однак, якщо ви більше звикли до Arduino, цей інструмент може бути новим для вас.

Відладчик зазвичай посилається на систему, що складається з налагоджувального програмного забезпечення на вашому комп'ютері, можливо програмного забезпечення на чипі, який ви тестуєте, і зазвичай деяких апаратних засобів як усередині, так і зовні чіпа. Багато мікроконтролерів мають відладчик на чипі (OCD), запечений у кремній.

Відладчик може одночасно переходити через один рядок коду або інструкцію, показуючи вміст змінних, і може переглядати або редагувати пам'ять. Ви можете запускати вашу програму на повній швидкості, поки вона не потрапить у точку зупинки - навмисну ​​паузу у вашому коді - там, де вона зупиняється, і відновлювач відновлюється. З налагодженим відладчиком ви також можете взаємодіяти з периферійними пристроями процесора, завантажувати програми у флеш-пам'ять і читати флеш-вміст (якщо захист не запобігає цьому!).

Що таке налагоджувальний сервер?

Програма відладчика на вашому комп'ютері зберігає детальну карту пам'яті для вашого коду, але вам також знадобиться апаратне чи програмне забезпечення на мікроконтролері для забезпечення читання та запису пам'яті, уловлювання контрольних точок та керування інструкціями. Одним з рішень є сервер налагодження.

GNU Debugger (GDB) визначає особливо простий серверний протокол для використання через послідовний порт або мережу, включаючи localhost. Реалізації цього gdbserver існують для різних операційних систем. Традиційно це був лише компонент програмного забезпечення, але зараз протокол зазвичай використовується як шлюз для апаратних пристроїв або емуляторів.

Крім того, ваші опції IDE тепер знаходяться далеко за межами базової командного рядка GDB з інструментами, такими як Eclipse, Visual Studio Code та IDA Pro, які підтримують той же протокол GDB.

Порти для налагодження обладнання

Було б зручно, якщо вбудовані в кремній функції налагодження були безпосередньо сумісні з протоколом GDB, але OCD оптимізовані для мінімальних витрат і впливу на загальну конструкцію процесора. Зазвичай, налагодження буде здійснюватися через той самий порт, який використовується для програмування флеш-пам'яті. Деякі чіпи використовують специфічні для постачальників протоколи, однак варто знати про два галузеві стандарти: JTAG і SWD.

Незалежно від протоколу, для перетворення назад у USB потрібно деяке обладнання. Широкий спектр адаптерів може бути використаний як сервер налагодження через програмне забезпечення з відкритим вихідним кодом OpenOCD, навіть підключення, які ви, можливо, вже мають подібні GPIOs Raspberry Pi або послідовний пробіг FTDI. А зонд Чорної Магії (див. «Прапорця») - це відкритий апаратний пристрій, який реалізує сервер налагодження в прошивці, забезпечуючи віртуальний послідовний порт, який підключається безпосередньо до GDB.

JTAG: оригінальний стандарт - це не добре ім'я. Подібно до JPEG, він не говорить про те, що робить стандарт, а саме, хто його розробив: Спільна група дій з тестування. Вона була розроблена в середині-кінці 1980-х років і стандартизована в 1990 році, у відповідь на складні монтажні плати, які занадто важко автоматично тестувати.

Електрично, стандарт JTAG (IEEE 1149.1) являє собою серію регістрів зсуву, які можна пов'язувати між пристроями. Відладчик можна приєднати безпосередньо до одного пристрою або до ланцюжка пристроїв в межах однієї мікросхеми або декількох мікросхем. JTAG виглядає зовні, як SPI, із загальним годинником і одностороннім входом і виходом даних. Але тоді ви бачите вибір режиму вибору (TMS). Це чип-вибір? Це місце, де JTAG починає отримувати особливо низький рівень. Насправді це модель, яка керує державною машиною, визначеною стандартом, на якій виробники мікросхем створюють власні державні машини JTAG.

Стандарт JTAG визначає стани для вибору пристрою і зчитування його 32-бітового ідентифікаційного коду; і протокол JTAG щодо граничного сканування розглядає штифти на мікросхемі для електричного тестування зібраних друкованих плат. Крім цього, він отримує специфічні пристрої: FPGA, процесори та пам'ять мають свої протоколи. Ця фрагментація відображає фрагментацію, яку ви бачите у всьому просторі вбудованих інструментів!

З сучасними процесорами ARM, принаймні, стандарти роблять нам користь. Специфікація інтерфейсу налагодження ARM описує стандартний порт для усунення несправностей JTAG з можливістю доступу до пам'яті, периферійних пристроїв і стану процесора. Звідти, картографічні регістри можуть змінювати точки зупину і керувати процесором.

SWD: новачок - коли ARM стандартизував спосіб доступу до пам'яті і функцій налагодження процесора над JTAG, вони також скористалися можливістю розробити новий альтернативний протокол: Serial Wire Debug (SWD), який використовує єдиний двонаправлений штифт даних і модернізований пакет структура. Зменшення кількості шпильок робить SWD ідеальним для невеликих вбудованих процесорів, таких як популярна серія ARM Cortex-M, і може обмінюватися контактами з JTAG, коли процесор підтримує обидва варіанти.

Це все, що потрібно знати про сам SWD, якщо ви плануєте лише підключити порт для налагодження на процесорі та запустити інструменти високого рівня, такі як GDB. Деталі налаштування OpenOCD, GDB та вашого конкретного адаптера для налагодження відрізнятимуться залежно від платформи, тому ви хочете знайти файл налаштувань, що входить до складу OpenOCD, який максимально відповідає вашій ситуації як відправну точку.

Якщо ви хочете зрозуміти, як налагоджувати і навіть як процесори працюють на більш глибокому рівні, то налагоджувальний порт є відмінним місцем, щоб почати копатися!

  • »Докладніше про налагодження ARM:
  • »Я написав простий веб-браузер SWD для ESP8266 і статтю в PoC || GTFO 10.5.
  • »Знайдіть більш повну реалізацію SWD з відкритим вихідним кодом, спробуйте пробник Black Magic або Free-DAP.

Поділитися

Залишити Коментар