MTK GPIO DEBUGGER

Я разработал замечтаельную программу для реверс инижиниринга телефонов на платформе MTK.

С помощью этой программы вы можете мониторить состояния PIN GPIO выводов (питание камер, прерывания или иное) и понимать, за что какой PIN отвечает.

Если установить на телефон SuperUser, то программа позволяет менять состояние пинов и изучать влияние на работу телефона - где какой пин на что влияет.

Загрузить:

Install & source

Краткая инструкция

Требования:

  1. Windows с установленным .NET
  2. Работающий ADB, запускающейся из любого места системы Windows, иначе при запуске программа выдаст ошибку.
  3. Желательно на телефон установить SuperUser, без этого программа не сможет менять PIN.

Известные ошибки

  • Если при запуске программы она не находит ADB, то закрывается с ошибкой.
  • Некоторые телефоны убивают внутренний ADB из за большой нагрузки телефона при опросе. В таком случае увеличте время задержки опросов в меню UPDATE, если телефон достаточно мощный и вам хочется видеть изменения пинов в реальном времени - установите зажержку No delay.

Инструкция, как узнать GPIO вашего телефона

Запуск программы:

Установите программу, проверте работоспособность ADB из коммандной строки windows (или из папки с установленной программой или из любой папки без наличия ADB - настроить PATH в windows).

Включите телефон и подключите шнур USB.

Запустите программу - если программа запустилась и не вышла с ошибкой, то должна появиться таблица как на картинке выше, если ничего не появляется - проверте корректность работы ADB.

Отключение несущественных оповещений:

При работе с программой, строки таблицы должны меняться и высвечивать красным изменяемый PIN  и первое что вы должны сделать это отключить самостоятельно меняющиеся строки сделав DblClick на строке, она станет серой и не будет отвлекать.

Учтите, что в этот момент на телефоне не должно работать никаких программ и не должно ничего включаться и выключаться - иначе вы можете случайно пропустить важные пины.

В телефонах MTK пины которые самостоятельно переключаются имеют отношение к системным пинам, питание и прочее важные функции - но для разработки они не нужны ибо жестко стандартизированые для конкретной платформы.

Самое легкие но важные пины:

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

Их нахождение весьма тривиально:

Вспышка - в дешевых аппаратах обычно вспышка ставится на вывод GPIO при ее включении вывод переводится в состояние 1. Вы должны просто включить фонарик и увидите какой пин меняет свое состояние - для проверики вы можете запомнить это состояние и изменить через программу - вспышка должна включиться.
Этот пин найти важно т.к. я его использую для отладки запуска ядра, если оно не стартует - просто програмно включаю его в критических  функциях и смотрю - горит ли.

Внешний услилитель звука - Обычно он включается при воспроизведении любого звука - просто включите музыку и смотрите. Небольшая сложность в том, что за звук может отвечать сразу много пинов - но методом тыка вы легко определите какой именно из пинов отвечает за звук.

Более сложные но менее важные PIN:

В принципе для попытки запуска ядра достаточно найти пин вспышки и определить тип LCM экрана - при отключении всех возможно конфлиликтующих драйверов в ядре (гироскопы, компасы, NFC) ядро должно стартануть при стандартных настройках CODEGEN. А если что-то не работает, то включая вспышку в критических местах можно найти источник проблем, в X5PRO проблемой был отсутствующий компас - не удалил драйвер и все.

Но если у вас ядро уже запускается, то вам хочется всегда большего - об этом и поговорим.

Все другие пины легко находятся, если немного побаловаться аппаратом, но для этого в телефоне должен быть установленный SuperSU - без него программа не сможет изменять состояния пинов.

Инстукция проста - видите пин - меняете его состояние и смотрите что не работает!
Не стал работать тачскрин - значит к нему имеет отношение!

Я обычно меняю GPIO_MODE:

  • В программе codegen.exe в колонке режим GPIO_MODE в выпадающем меню выводятся все режимы с названиями (точнее назначением режима)
  • Режим GPIO_MODE зависит от платформы и для разных чипсетов он свой!

Составляете список номеров пинов и их работающего и не работающего состояния - это потом сильно поможет.

Виды пинов

Насколько я понял (но возможно путаю) те пины где установленные значения PULL_SEL или PULL_EN - это прерывания от устройств таких как тачскрин, детектор гравитации, детектор света, компас и прочего, что вызывает прерывание на изменение своего состояния.

А пины переключающее состояние DOUT это включение и выключение питания.