Как стать автором
Обновить

На помойку? Никак нет! Пишем нативные приложения для дешевых китайских телефонов

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров17K
Всего голосов 119: ↑117 и ↓2+115
Комментарии86

Комментарии 86

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

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

Что у нас по будущему материалу? Давайте посмотрим:

На следующей неделе я расскажу о том, как китайские производители дешевых копий известных смартфонов (где обещают "8Gb RAM/512Gb ROM", "AMOLED 2K display" и т.п) закладывают срок службы и запланированное устаревание в свои девайсы. Нашим героем станет весьма популярный ультрабюджетный девайс с "алика", - подделка Huawei P30 Pro 2019-2020 годов. Эти девайсы (как и многие реплики) помирали примерно через 2-3 месяца работы практически гарантированно и в СЦ за их ремонт заламывали более половины их цены на али.

Мне удалось купить такого китайца в 2022 году всего за 400 рублей, причём фактически новый - даже в родной заводской плёнке! И уже нерабочий. Я расскажу, почему так происходит, как недобросовестные заводы экономят и закладывают срок службы девайсов как в аппаратном, так и программном плане, а также на практике "вылечу" один из таких девайсов в железном плане и портирую лёгкую прошивку, превратив его в бюджетный, но шустренький смартфончик, купленный за копейки. Ремонт обошелся мне в 70 рублей.

А вот вам жирнющая подсказочка, на чём же экономят китайцы.
А вот вам жирнющая подсказочка, на чём же экономят китайцы.

Интересно?

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

В материале будет рассказ о том, какие протоколы используют дисплеи в мобильниках, откуда можно достать дисплеи с теми или иными протоколами и разрешением (I2C, SPI, 8080/8, 8080/16), поговорим о стандартизации протоколов для работы с такими матрицами и какие существуют пиксельформаты, а также на практике подключим несколько абсолютно разных дисплеев к микроконтроллеру и заставим их работать. Интересно?

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

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

50 ног? У чего ещё, кроме известной микросхемы под номером 2560 их столько найдётся?

Очень интересно,у меня ящик мобилок разных валяется с цветными диспами.Вот бы из к Ардуинке или stm прицепить.Или к Малинке.

на чём же экономят китайцы

MT6570A??? Ну и раритет... Мне казалось, эти изделия сплошь на старых запасах МТ6580.

Хех, не совсем. Несмотря на то, что создаётся ощущение, будто 6570 самый старый чип из всей линейки 657x, на самом деле он самый свежий и делит общую с 6580 кодовую базу, за исключением того, что 6570 - двухядерный, а 6580 - четырехядерный.

т.е 6570 и 6580 моложе и шустрее 6582, 6572, 6577, 6589. Им всего-то 8 лет стукнуло!

А вот вам жирнющая подсказочка, на чём же экономят китайцы.

EMMC? Не?

Угу, она своим видом выдает, что что-то тут не то :) Но расскажу подробнее на следующей неделе!

Долговечность подделки непредсказуема, и с ценой никак не пересекается. «Ноклы» тоже очень разные по качеству. От «уже в коробке дохлый был» до «до сих пор работает» - которые, собственно, сейчас и откапывают в ящиках столов и продают. Ещё один попадался, где Bluetooth ещё на заводе сдох. Но больше не ломалось ничего, пока я ему не раздавил дисплей. А с механической прочностью у них беда. И ещё, услуга запрета подписок обязательна. В меню многих игр имеется пункт «купить полную версию», случайно нажал - шлёт SMS на короткий номер без предупреждения: всплывает табличка, и ставит перед фактом: купил!

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

Там сенсор резистивный. Мягкий, а под ним стекло - собственно, дисплей. Один такой аппарат - вполне моноблок - по этой причине дисплея и лишился. Ну и, за редкими исключениями, корпуса у них тонкостенные. А если бы не раздавили - работал бы до сих пор.

В меню многих игр имеется пункт «купить полную версию», случайно нажал - шлёт SMS на короткий номер без предупреждения: всплывает табличка, и ставит перед фактом: купил!

Ладно, если так. Этим страдали даже оригинальные нокии на S40, там это лечилось сносом всего предустановленного шлака через mobimb mobile media browser и закачкой полноценных JARов. А вот в нынешних телефонах встречаются и более неожиданные вещи типа самопроизвольного выхода в сеть.

Про это писал ещё @ValdikSSмного лет назад:

https://habr.com/ru/articles/575626/

Так «здоровых нет, есть необследованные». Современные кнопочники изучили - и да, обнаружили среди них некоторое количество опасных. Причём, один из них опасным пришлось сделать, залив предыдущую версию прошивки, так как текущая оказалась безопасной.

«Этот «бабушкофон» шёл из магазина с «чистой», обновлённой прошивкой. В интернете для этой модели была найдена одна единственная версия "IRBIS_SF63_GC9106_CTC_V05_GSM_FM_20181010.pac", которая и была установлена на устройство. Она оказалась с бекдором»

А по более ранним, которые с резистивным сенсором - подобных исследований не проводили. Хотя и на них были в т.ч. жалобы «никуда не жал вообще, а платное SMS ушло». Нечастые, но были. А уж что они через GPRS гнали, и куда - вообще неизвестно. Может, ещё больше, чем «обследованные» кнопочные.

Занятная статья, но сокращение "хар-ки" резануло глаза. При таком количестве символов экономить 9 букв - "актеристи" не стоит, поправьте.

Спасибо, поправлю

Это общепринятое сокращение, как и кол-во. Но да - в статье экономить буквы не нужно. Можно настроить правило в Пунто, чтобы при вводе слово "харки" разворачивало до "характеристики" - и вам удобно, и к статье меньше замечаний.

По сути - интересно. Но времени на всё не хватит.

А по нативным программам... их можно везде всунуть. Просто способы добавления нативного кода разные. )))

Это правда. Просто на китах уже готовая платформа есть и ничего реверсить не нужно.

А ведь до сих пор есть ребята с мотофана и сименсклаба, которые поддерживают эльф-сцену

А ещё больше любителей собирать «тапки» с камерами без автофокуса в коллекцию, и снимать то на один, то на другой, называется Digital Low, весьма выразительно получается, как будто помолодел.

Эх, а у меня все еще лежит вот такой образец китайской техники (купленый после SE k300i, и казавшийся хоть немного хромым, но чудом техники)

"SonyEricsson"

После прочтения ваших статей меня заинтересовал эта тема по вот какой причине. У этих телефонов была возможность приема аналогового ТВ и радио. Немного покопавшись в китайских даташитах я увидел что вроде как внутри чипа обычный широкополосный SDR приемник, который должен отдавать I/Q данные. И теоретически, если есть возможность писать нативные приложения на C, то можно сделать радио-сканер, с приемом хоть в AM, хоть FM.

Да, для ТВ используется отдельный чип от Philips. Но судя по всему, он отдаёт уже готовый буфер кадра (т.е изображение). Вмешаться в его работу скорее всего не выйдет.

Хм, судя по тем остаточным записям, что болтаются в интернете, мой китаефон собран на MT6225.

А его даташит на 8 странице показывает что он общается с "RF Module" с помощью шин RX I/Q и TX I/Q. Что дает надежду. Увы я свой телефон не разбирал, и не знаю какие в нем чипы стоят.

RF Module - это радиотракт для GSM, с ТВ и Радио он не связан. Напрямую его использовать думаю можно

а еще для этого неплохо иметь приличный процессор

Да кто ж телефоны в чермет примет? Там же одна пластмасса и вредная медь...

Принимают, еще как. Я сам "из под чермета" девайсы иногда покупаю за копейки и оживляю)

Да там практически всё принимают. Просто за металл с "засором" цена намного меньше.

Интересно было бы почитать, как они потом эти девайсы в реальности разделяют на различные полезные «ископаемые».

Apple, например, очень гордится тем что с каждым новым поколением у них все больше и больше элементов полностью из вторичной переработки. Но они и могут себе позволить углубленную переработку, с такими ценами. А вот как это происходит у нас…

Микросхемы размалывают и кислотой золото вытаскивают. Если повезёт ещё отправят аккумуляторы на переработку.

То есть прикидываются, что в чермет, а по факту — в подпольный аффинаж.

Пожалуй, одним из самых популярных таких телефонов была Nokla TV E71/E72 (да, именно «нокла»), вышедшая примерно в 2008 году и производившаяся аж до 2011 года!

Эти телефоны брали за динамики, способные перекричать практически любую из актуальных тогда трубок. А ещё там было даже какое-то сервисное меню с загадочным пунктом "Ускорение СИМ", с одного нажатия превращавшим аппарат в кирпич.

Были у меня такие девайсы. Надо бы попробовать скачать SDK и что-то написать...

А есть по подробнее что то об этом "Ускорении СИМ", интересно... ?

Статья интересная. Но у меня вопрос. Как ты запустил MTK_Simulator_1? Я перерыл всё меню MRE SDK, но не нашел.

В папке MRE SDK в models у каждой модели MoDIS.exe есть

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

У меня всегда так было, больные фантазии подсказывают к этому

какие дисплеи от нерабочих мобильников можно подключить к микроконтроллерам и использовать в своих проектах

подключить какой-нибудь техасский инструмент и сделать что-то типа UzeBox с радиомодулем (если оный не подох раньше).

В итоге изрядную коробочку трупиков набрал :)

Приделать e-ink и сделать звонилку-читалку.

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

Сделать автополивалку, которая отчитывается в СМС, сколько литров воды ушло и сколько времени пришлось гонять насос (можно понять, что с насосом что-то не так).

Поставить веб-сервер видеонаблюдения, который отчитывается в СМС о текущем динамическом айпишнике, а при попытке на него зайти — отдаёт единственный жпег, который здесь и сейчас видит его камера (тупо фотографирует и отдаёт).

Снимать «на тапочек» таймлапсы, как растёт трава и суетятся ленивцы (не жалко прое…)

Просто сделать набор букв не многократным нажатием, а клавиатурой Лапера.

Не просто сделать клавиатуру Лапера, а ещё и клиент Сигнала вкорячить.

Сделать поджиг «Буллерьяна» командой по СМС. Спички, тонкая проволочка, 20 ампер, закрыть «форсаж» при достижении нужной скорости потока в трубе.

Слушать и обрабатывать всякие SPI, вплоть до прошивки микроконтроллеров и прозвонки материнок.

Универсальный пульт ДУ только ленивый не делал.

Превращение камеры в оптическую мышку при помощи софтового коррелометра и пластиковой линзы на дистанцию «в упор».

Да блин, что ж выбрать, всё такое вкусное, а меня так мало О_о

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

Можно и без АКБ.

Помню на карте памяти такого аппарата папку mythroad.

Да, у меня был подобный девайс. При этом, MRP игры запускались, по-моему, из спец. меню при вводе кода в номеронабиратель. А J2me был в этом же телефоне реализован на уровне MIDP 1.0, то есть, диапазон MRP игр на него был даже шире, чем java, помню был MRP-порт Марио, танки и ещё что-то. Но, в основном, примитивизм, как и в статье.

Интересно, а насколько реально под такой аппарат реализовать клиент телеги? Хотя-б просто в виде чата.

Реально, но TDLib работать очевидно не будет

Очень просто: на смартфон - особый клиент телеги, поддерживающий приём и передачу текста по Bluetooth, а на эту штуковину - эмулятор терминала. Как с приёмом сообщений на смарт-часы, только в обе стороны.

Это как запихивание распберри в любой старый ноут. Совсем не интересно. Интересно нативный клиент

bodyawm именно таким образом всякие вконтакты на android 2 и адаптирует. Прокси сервер. Как opera mini

Прокси-сервер это норма, а вот блютуз и смарт в штанах…

Вообще-то, практически все смарт-часы именно этим способом входящие сообщения и отображают: «тяжёлый» клиент мессенджера на смартфоне позволяет обходиться без мощного железа непосредственно на часах, если и тут такое реализовать, отличаться будет только тем, что можно будет и отправлять сообщения.

Мы-ж не про смарт-часы и т.п. интерес к старой технике он не про это. Он про выжимание каждого герца, каждого килобайта, преодоление себя как программиста. А все эти есп с питоном для выключателя, распберри как контролер вентилятора дома… это скучно.

Вот у меня лежит сименс с65, который я купил черт пойми когда. Еслиб я мог с него клиента телеги запустить… это была-бы бомба. Причем нативно, с ограничением и т.п., может с прокси-сервером который оставляет только текст. Но там нет ни 3g, ни вафли, ни блютуза..

Интересна была бы ещё подборка старых телефонов (в т.ч. уже на Андроид) с хорошей камерой

Рекомендую посмотреть на Nokia N900, Nokia N8, Samsung Galaxy S4 Zoom (хотя это скорее уже фотик со встроенным телефоном) и тому подобные девайсы. Многие Lumia на базе WP имеют очень недурную по меркам их нынешней стоимости сейчас камеру.

Из более старых Sony Ericsson K750i вспоминается. Из ещё более старых - КПК Sony Clie NZ90.

lg g4 был в топе по камерам, андройд до 7ой (корявой несколько) версии, но известен своим браком.. но если найти рабочий - еще поработает

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

О, спасибо, на 4pda много информации

Чтобы сделать что то полезное из старого мобильного телефона нужна схемотехника и полный комплект кд на железо. Datasheet(ы) на все микросхемы внутри, компоновочную схему, габариты плат.

Вот реестр нужных доков
https://habr.com/ru/articles/716596/

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

В мобильных телефонах в частности аудиокодек должен быть. А это значит, что можно из телефона сделать сонар, датчик шума плеер или диктофон.

Чтобы сделать из мобильного телефона интерфейсный блок, управляющий устройством на микроконтроллере по UART, телефон даже разбирать не обязательно. Причём микроконтроллеры могут быть разными, начиная от 3-рублёвых PADAUK до довольно мощных с акселераторами нейросетей, и при этом не дорогих, до 7 долларов. Также, можно не разбирая телефон сделать из него часы с сетевым питанием и красивым интерфейсом, интернет-радио для работы с активными колонками, сетевую метеостанцию, постоянно показывающую прогноз погоды и текущую погоду из интернета.

Именно так :)

Автор комментария выше выпендриться пришёл, а по итогу навалил общих, очевидных абсолютно для всех тезисов, вообще не разбираясь в особенностях конкретно этих устройств. Со смартфонов, например, не только уарт выцепить можно, но и I2C, который легкодоступен и очень часто разведен в виде тест-поинтов на плате. И из юзерспейса к нему доступ тоже есть, вполне полноценный.


На Application-процессор полный ДШ есть и без проблем ищется по первой ссылке в гугле. На радиотракт - может быть где-то в сливах есть инфа.

Автор комментария приучен делать все по правильному и в этом есть свои плюсы

все по правильному

Так это не повод же лезть туда, где не разбираешься и пытаться строить из себя умного :)

Я больше всего поржал с этой псевдоинтеллектуальности с дифференциацией в духе "нормальные люди в игры не играют".

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

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

Короче весь его коммент можно охарактеризовать очень кратко: "понос без дерьма - это просто вода".

писать игры от которых у нормальных людей рвотный рефлекс срабатывает.

Это немножко другое. Для начала надо бы спросить у aabzel по понятиям, имееет ли он претензии к ретроиграм или просто не отличает набросок от полноценной игры. На программируемом калькуляторе он наверное тоже не играл :)

Не имею ничего против 8bit игр в общем. Сам эпизодичеки включаю Battle сity, Bomberman, Exiting race. Но вот эти стрелялки вверх- это просто предел аутизма.

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

Но вот эти стрелялки вверх

И тут я вспомнил master blaster, аж поиграть захотелось.

В популярном esp32 регистры, на удивление, тоже не задокуменированы, не говоря уж про функции rom. Вот вам либы - запускайте, а сикретов не трогайте.

Писать код для микроконтроллера без схемотехники это как писать портрет по фотографии.

 Со смартфонов, например, не только уарт выцепить можно, но и I2C, который легкодоступен и очень часто разведен в виде тест-поинтов на плате. 

В каждом микроконтроллере как правило несколько независимых UART портов.
У меня сейчас MCU в нем 8 UARTтов.

Какой именно UART выходит на тест пины покажет только документация по схемотехнике и топологии.

Кто Вам даст схемотехнику на мобилку 25летней давности?

На таких условиях "любой дурак" разработает (на самом деле нет, конечно), Но реальный мир нам нередко дает задачи "вот тебе маленько а дальше копайся сам. Реверсь, пили, что хочеш делай - но чтоб все работало" К счастью существуют особые люди которые умеют именно разобраться что ранее понаделали, в ограниченных условиях. Имена некоторых мы здесь часто видим ;) К сожалению это дает легенды типа Левша и типа "голь на выдумки хитра" - типа любой флиппером может банк хакнуть, а уж умельцы - пентагон гвоздем взламывают. А неспециалисты начинают быть прям уверенными что это только так и делается и это правильно. Что черевато.

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

В тех исходниках, что Вы выложили отсутствует код настройки кварцевого резонатора на PCB. А ведь без этого не заработает ни один микроконтроллер.

Получается что Вы не контролируете System Software и код Ваш не нативный.

Путаете native и bare-metal

В чём же разница?

Native это бинарный код собранный напрямую под целевой процессор, при этом он может выполняться внутри API OS, гипервизора или bare-metal. В противоположность - Java, DotNet и тд, которые используют байткод абстрактной виртуальной машины(non-native instruction set).
Bare metal обычно предполагает нативный код, выполняющийся непосредственно на железе с полным контролем над всем железом.
Как пограничный случай - есть системы, где OS вшита в ROM и впринципе любой код не имеет контроля над низкоуровневыми функциями, любая низкоуровневая функциональность реализуется вызовом кода из ROM. Код приложения будет и нативным и bare metal, но никаких настроек кварца там сделать не удастся.

Консольное приложение на си для Win10 это native код?

Да, верно.

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

Это программа на go, паскале, с++, fortran, rust, Assembler.

Так?

В общем случае - да.

Я именно поэтому и не стал разводить полемику с aabzel. Скорее всего, пользователь не такой токсичный, как мне показалось на первый взгляд, просто со своеобразным взглядом :)

А так всё верно, нативный код - это любой машинный код. А в представлении aabzel, это видимо только код в ring 0 (но в его представлении даже код винды не может быть "нативным"), т.к настройкой ддр, части периферии занимается биос

Каким образом кнопочные Siemens/Motorola/Nokia телефоны могли в run-time до устанавливать игры без пере прошивки микроконтроллера внутри?

Там что, была виртуальная Java машина и приложения присылались в байт коде?

Там что, была виртуальная Java машина и приложения присылались в байт коде?

Конкретно в случае простых телефонов, не смартфонов, да, приложения частенько были в виде байткода. Хотя даже здесь есть интересное расширение ARM, позволяющее нативно выполнять JVM-инструкции на проце, без JIT.

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

пере прошивки микроконтроллера внутри?

Понял к чему вы клоните, у вас мышление работает в сторону Гарвардской архитектуры (т.е шины кода и данных отдельно). В телефонах, хоть ЦПУ и назывались микроконтроллерами, по факту были полноценными ARM-микропроцессорами (хотя в сименсах попадались C166) с Фон-Неймановской архитектурой, которая содержала код и данные в одной шине, что позволяло свободно выполнять код и из ОЗУ.


Однако углубляясь в архитектуру телефонов тех лет, важно отметить, что код прошивки не копировался в ОЗУ, а хранился в флэш-памяти, которая поддерживала XIP - т.е может быть напрямую подключена к процессору, а декодер инструкций может фетчить сразу целые страницы памяти и помещать их во внутренний кэш! т.е и Flash-память и ОЗУ были фактически на одной шине!

Если вам интересно, как можно выполнять сторонний код на МК, то я писал статью и об этом. Правда, ESP32 - МК смешанного типа, там есть специальный регион ОЗУ для инструкций (чем я и пользуюсь в статье). На таких архитектурах как AVR, существует инструкция SPM для записи в собственную флэш-память МК.

https://habr.com/ru/companies/timeweb/articles/784408/

Вот я программирую микроконтроллер ARM Cortex-M4.

Как бы мне докидывать функционал в виде бинарных нативных *.bin файлов на sd карту?

Загрузчики не в счет. Надо чтобы само приложение прыгало в нативный *.bin, а потом возвращалось обратно.

Ну как без загрузчика, само приложение тогда будет загрузчиком - с карты памяти, особенно с файловой системой само ничего не загрузиться же, ну и .bin должен быть расcчитан не на выполнение из flash а где то по адресам из ram Для такого надо подсунуть соотв адреса линкеру в .ld файле. Для Миландра, кстати такое отработано давно в оффициальном туториале .

Всякие Siemens/Motorola были обучены (написан соотв. загрузчик) грузить не голый .bin а ELF, про такие трюки у автора предыдущая статья

Загрузчики не в счет. Надо чтобы само приложение прыгало в нативный *.bin, а потом возвращалось обратно.

Я скинул выше линк на свою статью. Без "загрузчиков" никак, вам всё равно нужно будет загрузить код в Instruction RAM (если ваш МК Гарвардской архитектуры) или Instruction ROM (т.е флэш, если Фон-Неймановской). В статье как раз приводится пример загрузки "просто бинарника", без релокаций: т.е вы загружаете код по произвольному адресу и просто вызываете его как функцию. Вот и всё :) Если не нужна независимость от адреса загрузки, то просто -fPIC уберите и в скрипте линкера назначьте адрес выполнения (ORIGIN)

в недавнем реверсе тамогучи китайского с ядром аж 6502 рассказано -тоже сделали в общем то динамическую подгрузку кода из флеша в маленькое ОЗУ

Зарегистрируйтесь на Хабре, чтобы оставить комментарий