image
Это Android-смартфон, не удивяйтесь :)

Обычно Android-устройства принято считать «бесполезными» через 5-10 лет после выхода. Особенно, это касается бюджетных моделей, которые «не тянут» современные сервисы или те девайсы, которые по каким-то причинам физически пострадали в процессе своей жизни. Но пока одни выкидывают смартфоны и планшеты, считая их электронным хламом и засоряя мир, другие стараются найти применение всему подряд и оказывается, что Android-устройства ещё вполне себе могут оказаться полезными. Однако порой необходимо реализовать автоматическое включение устройства при подключения к зарядке и вот здесь многие впадают в ступор — ведь замкнуть кнопку включения зачастую недостаточно! В сегодняшнем материале я расскажу свои кейсы запитывания устройств от блоков питания, а также реализацию автовключения на разных чипсетах. Интересно? Тогда добро пожаловать под кат!

❯ Как и зачем?

Вероятно, читатель спросит мол «зачем 10-летние Android устройства могут быть нужны?». И если немного призадуматься, то можно прийти к выводу, что действительно гаджеты прошлых лет могут быть достаточно полезными во многих сферах, причём не только планшеты, но и Android-смартфоны. И помимо реализации чего-то «стандартного» на манер красивых Android-часов с будильником или, например, мультимедиа станции а-ля iPod, есть ещё множество интереснейших кейсов, в которых можно использовать такие устройства. Я лично собрал для себя несколько:

  • HMI-панель: это умные программируемые дисплейные модули, которые могут выводить ту или иную информацию с микроконтроллеров или любых других устройств на экран. Благодаря 10-дюймовому планшету можно сделать очень удобное переключение режимов работы каких-то устройств, либо сделать показ информации с различных датчиков в помещении в реальном времени. Никто не мешает и в машину такой планшет поставить для сбора информации о двигателе.

    У Android-устройств перед классическими HMI-дисплеями есть огромное преимущество: наличие 3D-ускорителя и возможность выводить красивые визуализации и графики, а также анимацию. В будущем проекте со своей машиной — ВАЗ 2110, я покажу как использовать планшет в таких целях на практике.

  • Сбор данных: у микроконтроллеров слишком маленький объем встроенной Flash-памяти, чтобы хранить какие-то большие датасеты и строить из них статистику. Конечно можно подключить MicroSD... но ведь ко всем сразу не будешь по отдельной флэшке подключать, да и MicroSD отнюдь невечные при постоянной перезаписи данных — и здесь приходит на помощь такой планшет. eMMC обычно значительно более выносливая через MicroSD, с неё можно достать данные (при отсутствии шифрования), а мощный процессор планшета вполне может ещё и обрабатывать приходимые данные и куда-то отправлять. Вполне полезно!

  • Использование как одноплатника: я писал об этом недавно статью. Во многих бюджетных планшетах разведен UART на плате, к которому есть доступ из пользовательского окружения и даже Java-приложений! Таким образом, можно общаться с микроконтроллерами по проводному интерфейсу, или напрямую дергать ножками микроконтроллера реализовав прошивку-прослойку для МК.

  • Нестандартные применения: ну, тут я просто хотел похвастаться своим проектом с превращением планшета в игровую консоль с помощью внешнего микроконтроллера :)

Так что, как мы с вами видим, устройства прошлых лет отнюдь не бесполезны и при определенной смекалке мы можем им дать вторую жизнь и приспособить для работы на каком-нибудь объекте. Понятное дело что что-то серьёзное на них никто вешать не будет, но например панель заказа нямки в чебуречной или что-то на манер ГУ в машине — почему бы и нет?

Однако порой возникает задача реализовать авто-старт устройства при подключении смартфона к зарядке или вообще реализация автономной схемы питания. Автономная схема питания реализуется относительно легко: порой можно кинуть 5В от блока питания на VBat (плюсовой и минусовой контакт АКБ) напрямую. КП у MediaTek, имеют пороговое напряжение на аккумуляторе до 5.5-5.6В и не выгорают. Но это рискованно, если БП плохой и произойдет скачок — есть шанс того, что окажется пробитой обвязка/КП/ключи (вход со стороны USB обычно защищен от такого). Лучше всего использовать DC-DC преоразователь на ~4.2В с током от 1.5-2А.

image
Наколхозил кабель

А вот с авто-стартом вопрос интереснее. Всё зависит от реализации этой самой кнопки включения и от чипсета: например, на смартфонах Sony с чипами Qualcomm иногда достаточно лишь сдуть кнопку включения и замкнуть её контакты перемычкой: всё будет работать без каких-либо проблем. Но на некоторых смартфонах, зажатая кнопка включения будет уводить устройство в циклический ребут каждые 10 секунд, что может быть неприемлимо.

image

Несколько месяцев назад, читатель под ником @A1f подогнал мне китайский iPhone 7 Plus на Android — всё как я и люблю :) Девайс был рабочий, однако после того, как читатель отдал его в сервис, у него по каким-то причинам потерялось пару винтов, оказалась сломана кнопка включения на шлейфе, а смартфон не заряжался...

image
Бичпакеты и айфоны

Ну, с зарядкой вопрос я решил быстро: китайские айфоны иногда используют свои «Lighting'и», несовместимые с оригиналом и которые не могут заряжать оригинальный айфон. Благо в комплекте был пожухлый оригинальный кабель, который я разобрал и припаял всё обратно. Теперь и USB, и зарядка работают нормально!

image
image
image

С кнопкой вопрос был интернеснее: хотя найти такую на шлейфе и кинуть с неё перемычки — дело 5 минут, я лёгких путей не искал и решил сделать автостарт при подключении к зарядке — как и на оригинальном айфоне :)

image

И, как вы уже поняли, просто так поставить перемычку на контакте Power и массу не получится — смартфон будет постоянно уходить в ребут. Поэтому я сдампил загрузчик с помощью SP Flash Tool и начал ковырять его в IDA Pro, благо устройство не требует разблокировки этого самого загрузчика. Способ рабочий для многих устройств на MediaTek, в том числе и некоторых 67xx (возможно придется разблокировать загрузчик), а на устройствах с другими чипсетами алгоритм может быть +- похожим, но если нет возможности напрямую вмешаться в загрузчик, можно сделать авто-загрузку патчем boot.img.

❯ Реверсим и патчим

Для реализации автозагрузки, необходимо пропатчить загрузчик. В устройствах на чипсетах MediaTek их два — первый Preloader, который занимается первичной инициализацией периферии и ОЗУ, а второй — lk, который инициализирует дисплей, грузит ядро Linux и передаёт ему управление. В сети уже давно лежат слитый исходный код и Preloader, и lk, так что с их изучением проблем не возникнет, идея общая у всех устройств.

Итак, что же происходит при включении смартфона? lk определяет так называемый режим загрузки, в зависимости от которого меняется раздел, с которого грузится ядро (boot или recovery), а также параметры передаются ядру (atags). В процессе работы lk и перед загрузкой ядра, перед тем как показать анимацию зарядки, загрузчик проверяет нажата ли кнопка включения — и если да, то быстренько перезагружает устройство в обычный режим.

image

Да, всё так легко! Таким образом, нам остаётся лишь пропатчить условие с проверкой кнопки включения, дабы смартфон считал что кнопка нажата тогда, когда она по факту не нажата. В IDA Pro, lk загружается с смещением памяти в 0x0, а найти нужную инструкцию нам поможет зацепка в виде отладочной строки. IDA Pro сразу строит все xref'ы и обращения к строкам, так что найти нужные данные не составит труда. Ищем «[%s] PowerKey Pressed in Kernel Charging Mode Before Jumping to Kernel, Reboot Os» и смотрим все обращения к адресу памяти, с которого начинается строка.

image

Чуть выше метода вызова printf, можно найти наше условие, которое начинается с инструкции CMP R0, #0. Сразу после него идёт инструкция BNE, которая бранчит код и продолжает загрузку системы в режиме «зарядки». Нам остаётся лишь заменить её на NOP в hex-редакторе в той же IDA Pro и система сразу после попытки включится в режиме зарядки уйдет в ребут и перезагрузится в обычном режиме, будто мы просто включили смартфон с кнопки!

image

Прошиваем наш новый lk:

И видим, что всё работает! :)

❯ Второй способ

Если возможности пропатчить загрузчик нет, в дело вступает второй способ, заключающийся в патче boot.img — раздела с ядром устройства и ramdisk'ом, в котором содержаться скрипты для инициализации устройства (*.rc). Всё дело в том, что даже при зарядке смартфон загружает ядро Linux, первоначальный рамдиск и в зависимости от режима загрузки запускает либо app_process (главный процесс в Android), стартуя загрузку системы, либо специальную программу, которая часто называется charger и находится в /system/bin/ (иногда в самом boot.img).

На смартфонах с разными чипсетами реализация этого способа может сильно отличаться, однако приведу пример с смартфонами Sony Erisson из 2011 года (у меня есть Xperia Play с сломанной кнопкой включения). Там устройство начинает выполнение скрипта init.rc, тот в свою очередь запускает init.semc.rc и на этапе инициализации запускает программу chargemon, которая выводит анимацию зарядки, отключает смартфон, если кабель вытащили и слушает нажатие кнопки включения, продолжая процесс загрузки, если пользователь зажал кнопку включения. Соответственно, весь фикс — закомментировать эту строку :)


#exec /system/bin/chargemon

В случае MTK, можно попробовать ещё пропатчить init.rc, дабы он продолжал загрузку системы даже в случае подключения кабеля в режиме зарядки. Способов много, главное проявить смекалку и не бояться разбираться в чём-то непонятном :)

❯ Заключение

Как видите, ничего сложного в реализации автоматического старта устройства нет. Где-то можно обойтись перемычкой на кнопку включения, где-то патчем boot.img, а где-то и патчем загрузчика. Но тем не менее, это вполне возможно на практике и позволяет делать такие приколюхи, как я со своим китайским айфоном :)

Надеюсь, материал вам был интересен и полезен! Пишите, нужно ли вам было реализовать что-то подобное и как это делали в комментариях!

image

Друзья, если у вас есть подобные китайчики и вы не разделяете желания пытаться вдохнуть в них жизнь, но выбрасывать их жалко — можете задонатить их мне :) Как сами видите — девайсы попадают в хорошие руки. Из недавнего — я взял нерабочую, утопленную китайскую копию 14 Pro Max из под СЦ в качестве основного смартфона. Также у меня есть канал в Telegram, куда я выкладываю бэкстейджи статей, различные заметки о ремонте, моддинге, программировании и реверс-инжиниринге и свои мысли, а также ссылки на свои новые статьи и видео. Кому интересно — залетайте!


Читайте также:

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud - в нашем Telegram-канале

Перейти ↩

Комментарии (27)


  1. bodyawm Автор
    13.06.2024 08:02

    Ну что друзья, почитать - почитали, если есть время и желание - то можете и посмотреть :) Сейчас я стараюсь выпускать по статье и видео-материалу каждую неделю!


  1. bodyawm Автор
    13.06.2024 08:02
    +1

    Ну а касательно будущего контента, то я недавно заказал себе кучу крутых ништяков: например, iBook G4 ( @Coppermine год назад подарил мне PowerBook G4, однако интересно было пощупать "бомж-класс" iBook), MacBook A1181 (нужен был Intel-макбук для контента с деплоем и отладкой НОВЫХ хоумбрю приложений на iPhone 2G/3G, даже на iOS 6!), а также читатель предложил HTC Shift по хорошей цене (UMPC, обожаю класс таких устройств) и @NutsUnderlineпредложил продать целых два NVidia Shield Portable по хорошей цене :)

    Также читатель подарил iBook G3 Dual USB, но там надо менять гпу :( Буду искать донора-невключайку.


    1. bodyawm Автор
      13.06.2024 08:02

      По классике спрошу в комментариях: может кто-то из читателей продаёт Xperia Play в нерабочем/полурабочем состоянии? Хочу собрать ещё один, у меня есть некоторые запчасти, а то у моего корпус в крайне плохом состоянии :)


  1. jpegqs
    13.06.2024 08:02

    Меня интересует немного другое, какие чипы можно запустить от подключения к USB без вставленного аккумулятора.


    1. bodyawm Автор
      13.06.2024 08:02

      Любые, это от КП зависит, а не от чипсета :)

      Но если не докапываться, то аллвиннеры, рокчипы, амлогик.


      1. jpegqs
        13.06.2024 08:02
        +1

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

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


        1. bodyawm Автор
          13.06.2024 08:02

          По факту второе. На мтк как я понял КП всегда запитывает процессор, просто если нет уровня на АКБ - смартфон падает в ресет.


          1. jpegqs
            13.06.2024 08:02

            Тут вопрос, где этот код, если это ROM в процессоре, то его не изменить. А если код уже из флэша, то можно.


            1. bodyawm Автор
              13.06.2024 08:02

              Скорее всего где-то во флэше, возможно часть Preloader. А что мешает DC-DC понижающий собрать?


        1. sami777
          13.06.2024 08:02

          Здесь, скорей всего, все определяется мощностью блока питания, который вы будете использовать вместо зарядки. Невозможность работы без батареи сводится к тому, что обычная, классическая зарядка просто неспособна обеспечить достаточную мощность для работы сотового. АКБ сотовых примитивны. Цифрового интерфейса между чипсетом смартфона и АКБ нет. Возможно сотовый может проверять наличие АКБ по "третьему контакту АКБ", но и здесь достаточно будет резистивного делителя для решения проблемы отсуттсвующей АКБ. 2. За отличное владение IDA автору 5 балов! Но вот вопрос, а залоченный попадется загрузчик, что делать? Может быть все-таки разумней аппаратно имитировать кнопку включения?! Например, с помощью оптрона , с выходом, допускающем разно-полярное подключение, чтобы не мучаться с плюсом и минусом. Такое решение будет универсальным и подойдет абсолютно для любого телефона.


          1. bodyawm Автор
            13.06.2024 08:02

            Интерфейс есть, но не везде. Айфон как пример, или коммуникаторы из нулевых

            Наличие АКБ определяется относительно показаний на ADC КП, третий контакт это иногда либо температурный датчик, либо ID.

            Имитировать кнопку тоже можно :)


            1. MaFrance351
              13.06.2024 08:02
              +2

              Транзистор и RC-цепочку для задержки можно поставить.

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


    1. radioxoma
      13.06.2024 08:02
      +1

      Разобрал батарею и включил пару конденсаторов вместо Li-Ion ячейки. Не сильно помогло - в моём случае без АКБ устройство стабильно работало только от лабораторного блока питания (до 10 А), но никак не от зарядки на 2 А. На десятой секунде было пиковое потребление в 3 А и телефон перезагружался. Плюс сам MicroUSB не пропускал такой ток и грелся, пришлось в конце-концов подпаяться напрямую к конденсатору.
      Вопрос с автоматическим включением после пропадания питания также никак не решился. Подаёшь питание на конденсатор - нет автоматического включения, не работает OTG. Подаёшь питание на USB - включается, но не хватает тока.

      В итоге забил - лучше уж одноплатник с нормальной ОС и сетью. А ведь я нашел для смартфона ядро от NetHunter для "Redmi 3 ido" с поддержкой ethernet сетевых карт и USB-сетевая карта через хаб работала.
      Даже RTL-SDR работал через OTG USB-хаб, играл радио.

      На одноплатник тоже забил, даже не купил.


      1. bodyawm Автор
        13.06.2024 08:02

        Режим полета предварительно включите


        1. radioxoma
          13.06.2024 08:02

          Ок, тогда он выключится через 5-30 минут по той же причине.


  1. pbw
    13.06.2024 08:02
    +4

    Питание мобилы от внешнего источника уже много раз обсуждали на Хабре. Но информация быстро тонет, и этот вопрос появляется снова. Вот статья, умный человек объяснил некоторые неочевидные моменты хорошим языком.


    1. MaFrance351
      13.06.2024 08:02

      О, помню тот проект.

      Ещё вспомнилось, как в начале десятых кто-то хотел сделать "умный выключатель" для умного дома на базе древних КПК (в какой-то компании списали кучу корпоративных девайсов в унылом состоянии)...


  1. Jek_Sen
    13.06.2024 08:02
    +1

    Использую Huawei U8860 для управления 3д принтером на klipper. Работает без батареи, сам включается при подключении usb, повезло. Правда питание не полноценное получается, камеру, wifi включить не дает, но мне и не надо.


  1. MaFrance351
    13.06.2024 08:02
    +1

    К слову, об аккумуляторах: а как быть с девайсами, которые без штатной батареи не стартуют? HTC некоторые этим страдали, при подключении ЛБП просто прикидывались кирпичом.

    Разломать штатный аккумулятор и припаять контакты от БП вместо дохлой банки?


    1. bodyawm Автор
      13.06.2024 08:02

      Верно


      1. MaFrance351
        13.06.2024 08:02
        +1

        Самое весёлое начинается, когда в руки попадает какой-нибудь iPaq или HTC без аккумулятора, а запустить хочется...


        1. bodyawm Автор
          13.06.2024 08:02

          На HTC надо концевик поджимать)


  1. fndrey357
    13.06.2024 08:02

    Разломать штатный аккумулятор и припаять контакты от БП вместо дохлой банки?

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


    1. MaFrance351
      13.06.2024 08:02

      Ну, можно преобразователь импульсный поставить и выкрутить на нём 3,7 В. И будет работать.


      1. fndrey357
        13.06.2024 08:02

        А так и получилось. Штатный блок зарядки не потянул. Залез в закрома - нашел БР 12В и выставил нужное напряжение регулятором.


  1. iShrimp
    13.06.2024 08:02
    +1

    Отличная статья! Только стоит помнить, что если вы оставите штатный аккумулятор, то нельзя просто оставить БП включённым в розетку. Старая Li-ion батарея при постоянном (суб)максимальном заряде может загореться. Нужно ограничивать максимальное напряжение с помощью Battery Charge Limit или патчить профиль зарядки(?).


  1. tempick
    13.06.2024 08:02
    +2

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