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

Сам себе Linux смартфон: Как я выкинул Android и написал свою прошивку с нуля

Уровень сложностиСредний
Время на прочтение17 мин
Количество просмотров72K
Всего голосов 204: ↑202 и ↓2+246
Комментарии137

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

Ну что-ж друзья, думаю этим материалам я показал вам, как можно на практике юзать смартфоны прошлых лет в качестве одноплатников. Могу и полноценный материал с мостом URAT -> GPIO написать. Интересует такое?

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

@dlinyjА как тебе такое применение? :) Я же говорил, что у девайсов есть перспективы

Отличная статья! Сразу захотелось найти такой телефон и поэкспериментировать с ним. Следующая статья должна быть "получаем доступ к GPIO" :)

Думаю можно брать статью, репу, писать резюме и искать работу от 300к сходу ;). При чём на удалёнке.

Хех, да мне уже HR пишут на почту) причем ребята серьезные - скажем так, лидеры *nix решений в РФ!

@jpegqsна кнопарях в целом такое тоже можно провернуть, почти на всех кнопках, что я видел - уарт был в открытой доступности.

а на кнопочных "дигмах" и прочих клонах 1100 нокий — там же не линукс, а какое-то другое ядро, я забыл, народ ими долго запиливался.

Я не совсем про это. В мобилки на медиатеках и спредтрумах есть DL-режим с возможностью запуцскать произвольный код и есть даташит на чипсет с списком регистров. Поэтому

SC6531E datasheet (datasheetspdf.com)

На SciPhone на базе MT62xx (именно на нем базируются современные кнопочники) портировали Linux:

SciphoneDreamG2 - OsmocomBB - Open Source Mobile Communications

Самые доступные кнопочные звонилки Медиатека, что сейчас можно купить, конкуренты SC6531E - это MT6261, для предшественника MT6260 есть проект Fernly. Линукс на таких кнопочных не запустить, памяти всего 4Мб, 8Мб у чуть более дорогих, только RTOS влезет.


Есть кнопочные на MocorOS (мод Android 4.4), там памяти уже достаточно, но они стоят дороже, и найти их сложно. За те же деньги можно дешевый смартфон купить с лучшими характеристиками. На гитхабе можно найти исходники ядра Андроид для некоторых чипов дешевых смартфонов.

На 4мб старый линух кое-как крутится судя по всему, но остается вопрос с MMU (uclinux точно заведется и будет работать хорошо). Про мокор я уже писал и их я моддил

а если использовать графические библиотеки тех времён, тот же qt1.44, qt2, qt3.3.8? по мере нарастания функционала и у них есть baremetal реализации, напрямую с фреймбуфером, а так и простая lvgl есть, чтобы велосипед не мучать.

НЛО прилетело и опубликовало эту надпись здесь

Как насчет прошивка home assitant? Или просто нарисовать виджет выключатель и им управлять умной лампой? Или сервер телеграм, хотя как я понимаю с доступом извне будут проблемы и потому любой такой сервак не имеет особого смысла. Но вообще отличная статья! Очень круто)

можешь заменить распбери пи/орандж пи используемые для доработки 3д принтеров под прошивку клиппера?

Теоретически возможно.

Если не хочется покупать апельсина под клиппер, то лучше не заморачиваться полумёртвыми смартфонами, а взять андроидную тв-приставку и перешить.
Там и БП и корпус и нормальные USB сразу.

Есть же Raspberry Pi Zero 2 W - и не дорого и хватает для клиппера.

На алихе она 7к голая, а Orange Pi 3 LTS в комплекте с питальником 4к. При этом апельсин эту зеро по характеристикам превосходит капитально. Опять же 8GB EMMC прямо на плате позволяют не париться по поводу изнашивающихся медленных флешек.


Не вижу смысла покупать зеро 2w.

В Турции есть онлайн магазин samm market. zero2w купил там за 1.8к, буквально месяц назад.

15$ платка стоит: https://www.raspberrypi.com/products/raspberry-pi-zero-2-w/
Вот и в стороннем магазине в Британии столько же за вычетом НДС: https://shop.pimoroni.com/products/raspberry-pi-zero-2-w?variant=39493046075475 Так что просто ищите по разумной цене там, где вам удобно купить.

Лучше сразу купить Bigtreetech CB1 в конструктиве RPi CM4. Он нативно поддерживается в Armbian.

Жаль что и круто и наркоман поставить нельзя :)

Ну куда-ж без наркомании в DIY :)

как раз и сам diy даёт такой приход и драйв, то зачем все эти психоактивные вещества?!?

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

Теоретически возможно, практически - едва ли, т.к исходники Audio HAL я видел ток для медиатека.

Наверно, только, паяльник в руки, и WT2000M04 в помощь (плюс micro SD card).
Кстати, бывает в продаже и гарнитура со встроенным режимом записи.

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

Так, думаю, и появилась Rosa Mobile)

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

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

А если это дорастёт до полноразмерного форка типа Цианогена — можно не мелочиться и запилить экосистему на базе клона Баунтисорса. То есть магазин приложений сугубо опенсорсный, но можно «купить» продолжение разработки в том или ином направлении, по своему заказу. Ну, или дописать желаемое и пополнить таким образом счёт.

Железный мессенжер с шифрованием?

После упоминания UART'а на ум приходит какая-нибудь панель управления умным домом или аналогичные девайсы в том же духе и стиле.


STM32 и дисплей такой диагонали и разрешения стоят конских денег, экземпляры от фирм вроде Nextion ещё дороже.
А тут можно получить большой экран и сравнительно мощное железо, и со всем этим даже начинающему не жалко экспериментировать, так как новый девайс взамен укокошенного можно купить на Лохито по цене бутылки колы с пачкой чипсов. Дешевле даже самого простенького одноплатника и экранчика к нему.
Ну, это я так.

STM32 дает доступ к каждому пину из сотни имеющихся на борту, стоит от 0.5 до 15$ в зависимости от модели. Дисплей TFT на 3.5 дюйма с резистивным экраном стоит 10$ с доставкой, позволяет обновлять с RPi экран на 50 FPS например, вполне отзывчивый.

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

С стмкой сравнения некорректны. И даже с RPi Zero: медиатек ощутимо мощнее.

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

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

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

  1. игровая консоль - какой эмулятор будет работать на самосборной прошивке? будет ли аппаратное ускорение видеочипа? или вы собрались с нуля не только смартфон сделать но и эмуляторы писать? а если без эмуляторов, то кто под него будет игры писать?

  2. фоторамка - нужен набор виджетов, где можно подключать погоду, часы, сообщения, календарь, откуда они появятся?

  3. сервер - сервер чего? кто будет портировать на вашу систему например apache, php и т.п.?

  4. портативный плеер - ну допустим какой-то wav вы сможете играть, но интерес будет в mp3, ogg, flac (а у меня больше интереса к чиптюновым форматам), как их воспроизводить?

  5. одноплатник - он бесполезен без софта и готовых библиотек

Этот подход предназначен для людей, которые имеют некоторые навыки программирования. Для любителей купить и собрать по туториалам - есть raspberry pi.

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

Зачем? В сети есть куча эмуляторов, в которых достаточно портировать только HAL под свою платформу. Фактически, можно просто портировать сразу SDL1.2, под который уже есть куча эмуляторов - от атари, до пс1 (привет Dingoo A320). Про n64 и выше мы не говорим - далеко не каждый смартфон их потянте

будет ли аппаратное ускорение видеочипа

Зачем вам GLES в эмуляторе 8-16битки? :) Эмуляторы PPU-консолей вручную подготавливают уже готовый кадр, который потом при необходимости перекодируется в нужный пиксельформат и отправляется на контроллер дисплея (который уже реализован в виде /dev/fb). Даже пс1 принято эмулировать в софте, т.к выше точность эмуляции.

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

Вы так говорите, будто с уже имеющимся Wi-Fi, 2G (через SIM800) и RTC сложно реализовать часы и календарь.

кто будет портировать на вашу систему например apache, php и т.п.?

Так под bionic есть порты и apache, и php, и gcc, и fpc :)

но интерес будет в mp3, ogg, flac (а у меня больше интереса к чиптюновым форматам), как их воспроизводить?

С добрым утром. vorbis бесплатный и открытый, открытые миниатюрные декодеры mp3 тоже существуют, для того, чтобы был смысл в FLAC, нужен хороший аудиотракт - такое есть не в каждом смартфоне.

одноплатник - он бесполезен без софта и готовых библиотек

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

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

Это правда. Причем АКБ можно любую подключить, если смартфон стартует от + и -

для людей, которые имеют некоторые навыки программирования

А вы ещё и в железе разбираетесь на таком уровне, где всему этому научились?:)

Как-то сам. Скучно становится - хоп, читаю схему на устройство. Хоп, открыл даташит на интересующий чип. И вот так изучил :)

Этот подход предназначен для людей, которые имеют некоторые навыки программирования

причем тут навыки программирования? я пользуюсь С (платформы MOS 6502, 8088, i386, AtMega), C# (Windows, Linux), ASM (6502, 8088, 80386), Java (Web) и не вижу никакой связи между тем что делаете вы и что делаю я.

Для любителей купить и собрать по туториалам - есть raspberry pi

Не ошибусь если скажу что вы тоже всё делаете по туториалам, только по другим.

Зачем? В сети есть куча эмуляторов, в которых достаточно портировать только HAL под свою платформу. Фактически, можно просто портировать сразу SDL1.2

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

Зачем вам GLES в эмуляторе 8-16битки?

может потому что я ими пользуюсь и оно там используется?

Даже пс1 принято эмулировать в софте, т.к выше точность эмуляции.

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

Вы так говорите, будто с уже имеющимся Wi-Fi, 2G (через SIM800) и RTC сложно реализовать часы и календарь

я правильно понимаю вашу логику, что если кто-то в 12 лет катался на тракторе Беларусь (папа дал порулить в поле), то он сразу же знает как чинить турбину на Т-82?

Так под bionic есть порты и apache, и php, и gcc, и fpc :)

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

С добрым утром

ну собственно остальное написанное обсуждать нет смысла потому что вы ввели читателей в заблуждение.

Материал по очевидным причинам гиковский

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

---

ладно, будем считать что я не понял что написано в статье.

Не ошибусь если скажу что вы тоже всё делаете по туториалам, только по другим.

Я практически с самой юности, с самого малочку пытался программировать игры на самом низком уровне - начиная с рендереров, заканчивая выводом PCM-звука. И я смотрел не туториалы, а читал пейперы от вендоров гпу и спеки огл. Первый раз я по настоящему понял, как работает пайплайн на гпу из спеки на огл, а не из редбука, и тем более не с learnopengl. И так практически во всех областях.

Может такой крутой дядька, программер графики, как Тимур XProger тоже всё по туториалам делает, только потому что 20 лет назад смотрел условные туторы Neh? :)

Я практически с самой юности, с самого малочку пытался программировать игры на самом низком уровне - начиная с рендереров, заканчивая выводом PCM-звука

Ну ок.

И я смотрел не туториалы, а читал пейперы от вендоров гпу и спеки огл

Возможно вы неправильно понимаете слово "tutorial", это не серия книг "рендер для чайников", это бумага в которой что-то написано о чем либо, а вот для кого она написано обычно указано в самом руководстве. Бывают руководства пользователя, администратора, программиста, инженера и т.п. Все эти бумажки кто-то знающий тему пишет для тех, кто тему не знает, но прочитав - узнает. Очевидно, если вы не читали такие руководства, то и знаний у вас нет. И нет никакой связи при этом с программированием.

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

Так что никаких чудес нет.

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

И о чём это должно говорить? Что вам понятнее руководства для одних специалистов, но непонятны для других? Оно у всех так.

Может такой крутой дядька, программер графики, как Тимур XProger тоже всё по туториалам делает

Очевидно, иначе откуда знаниям взяться? Нет, безусловно вы можете ковыряться с железкой и найти например инженерные функции, которые есть только в закрытых спеках, как те же MOS 6502 инструкции, которые числятся недокументированными. Это полученные знания в ходе экспериментов. Я где-то против такого?

Короче меня последнее время забавляют ваши оппозитные комметарии к моим статьям, но вы действительно не совсем улавливаете суть

Суть не улавливаете вы. У вас нет просто достаточных знаний и понимания вопроса связанного с подачей материала, вы действуете по принципу заметок FIDO, чиркнул, а вы там сами разбирайтесь. Но там хоть разговор был в определенных ветках с такими же как он людьми, а вы пишете просто в Рунете для всех, у вас научпоповский формат, вы НЕ пишете для гиков (ну или считаете их тупыми). Для гиков вы не написали ничего того, что они бы сами не знали (вы думаете никто не в курсе что на телефоне можно запустить родное ядро?). Собственно я когда зашел в тему я именно что хотел прочитать про запуск чего-то своего на старой железке. Но вы посчитали что кликбейт полезнее для количества просмотров (спонсор давит?). И подумали, что если написать небольшой референс про кликбейт, то он нивелирует ваш поступок.

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

Можно не использовать порты под bionic, а запускать веб-сервер, использующий обычный glibc (или musl), в chroot-окружении.

mp3 и flac декодеры в софте я запускал ещё на маленьком arm микроконтроллере лет 10 назад. Там кода ну килобайт 30 максимум.

А про все остальное согласен. Интересно и прикольно, но смысла, кроме как поиграться, нет.

еще лет 10 изобретать колесо типа BolgenOS с понятным результатом

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

Раз уж вы хотите сравнений, то корректнее было бы сравнивать с проектами типа Kolibri/Haiku/Menuet.

Очень круто, действительно старые телефоны не хочется, да и неинтересно выкидывать просто так.

Вопрос, может на него ответ где-то был уже, но всё же. Чем это лучше дальше использовать тот дроид, который там и установлен? И насколько легко повторить действия из этой статьи на другом телефоне с таким процессором/другим процессором/на телефоне времен 5/8/10 дроида?

Чем это лучше дальше использовать тот дроид, который там и установлен

Ведро жрет кучу ресурсов и до жути проприетарное под капотом.

И насколько легко повторить действия из этой статьи на другом телефоне с таким процессором/другим процессором/на телефоне времен 5/8/10 дроида?

Почему бы не проверить самому? Главное - разлоченный бут.

А его можно подменить своей опенсорсной реализацией? На такое дело можно и в краудсорс.

Можно при желании, но только на тех устройствах где подпись aboot/ABL не проверяется SBL.

Увы, на многих современных железках его подпись проверяется даже если он разлочен (то есть подпись boot/recovery не проверяется после разлочки, но все загрузчики проверяются всё равно).

https://github.com/jsr-d10/android_bootable_bootloader_lk - пример кастомного LK для Snapdragon 400 (с загрузочным меню, настройками и возможностью загрузки с сдкарты (в том числе и мультизагрузки)).

Теперь придется изучать как разлочить бут)

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

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

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

Если у вас проблемы начинаются на стадии разлочки бутлоадера - похоже, эта тема не для вас.

А вообще - готовый рецепт имеется практически для любой модели/семейства/производителя, надо только поискать (привет 4pda/xda). Не разлачиваются нормальным путём обычно всякие операторские аппараты. Но порой и на них находят управу (от эксплойта в boot.img/recovery.img и патчинга aboot (да, были такие забавные модели у LG которые не проверяли подпись aboot, но проверяли подпись boot) до использования всякого спецсофта для низкоуровневой работы с процом).

Это очень круто и действительно нужно! Материал практически уникальный в своём роде. Продолжай пилить!

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

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

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

Она ценна исключительно как пример для самообразования и профессионального роста, и в основном для автора. У решения нулевая, если не отрицательная потребительная стоимость. Ребенок сейчас хочет топ, давать такое старику — издевательство, а обычный средний пользователь не будет такое использовать ввиду слабой надежности, документированности и ремонтопригодности.

Вашу бы энергию да на пользу обществу, а не на игру в бирюльки.

Подобного рода проекты - не для детей, стариков и прочих домохозяек. В первую очередь для гиков. Разумеется, ни о какой массовости речи не идет, как и о "давайте всех на мою прошивку переведем". Статья исключительно о том, как получить из старого девайса нечто такое, что за такие смешные деньги не купить. Например HMI (панели оператора) даже на известном китайском сайте стоят совершенно не смешные деньги с совершенно смешным функционалом. На той основе, что предложил автор, можно наклепать эти панельки себе куда угодно, и не ломать себе глаза на мелких экранчиках типа 128х50 размером сантиметр на полтора (условно). А по сути телефон это компуктер и для DIY компуктер довольно нафаршированный. И даже если у него нет GPIO, всегда можно его туда придумать, я более чем уверен). Нет, можно конечно использовать одноплатник, но цена несравнима, это прям пропасть глубиной в Марианскую впадину.

GPIO можно вывести через внешний МК, а между ними мост через UART-проложить.

Это вообще не смешные деньги. Оценивая трудозатраты мне дешевле будет купить малинку и под неё написать целевую программу. Я всегда вспоминаю сколько стоит мой рабочий день и считаю примерную стоимость исполнения.

Но с позиций спортивного программирования этот проект достоин уважения!

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

Регулярное чтение данной серии публикаций вызывает у меня ощущение, что человек прикуривает одну за другой сигареты из нераспечатанной пачки "Ту-134" 1980 года, купленной на блошином рынке, от стадолларовых купюр.

Смотреть на это прожигание жизни и таланта конечно прикольно, но и вызывает испанский стыд за столь жалкое использование знаний и способностей.

Во мне нравится это псевдоменторство, вам то какое дело, кто и как использует своё время? Я по жизни балдею, хорошо зарабатываю и нахожу время на всё, что мне интересно - тачки, кодинг, копание в железе. Так что я живу идеально можно считать :)

Это не псевдоменторство, а скорее испанский стыд.

Вот есть же у вас действительно ценная статья про использование дисплеев. Возможно, стоит думать в таком направлении?

Ну а чем статья о использовании старых смартфонов в качестве одноплатников, сразу с готовыми дисплеями, тачскринами и звуком не ценная? :)

Эх вы, горе-комментаторы. Настоящие, самые глубокие знания чего бы то ни было получаются именно таким образом. Ценность - не в фоторамке, а в том, что автор будет возглавлять крутейшие R&D и инженерные лаборатории, а его разработки будут делать мировые новости. Никаким чтением документации, инструкций и учебников этого не получишь.

Специально полез смотреть на экраны, 3.5" TFT 400*240, резистивный сенсорный экран стоит 10$ из них треть это доставка. В отзывах пишут что с RPi 50 FPS получают. Телефон круто использовать, но кроме того что пишут в соседних комментариях есть еще проблема - неповторяемость конструкции. Даже вот автор отладит конструкцию, но повторить её в 5 экземплярах не сможет. Телефоны могут быть с другой ревизией и код придется адаптировать под каждый телефон заново. С Orange Pi такая же проблема была, разработчики просто сменили чип и все предыдущие наработки нужно было переписывать под новое железо. RPi в этом плане намного стабильнее, поддерживаются старые версии. А микроконтроллеры еще более консервативные, в продаже до сих пор есть микроконтроллеры 90х годов или какой-нибудь Z80.

телефон это компуктер и для DIY компуктер довольно нафаршированный

Только недоступный на низком уровне. Нет гребенки пинов например, как у ESP32 хотя бы.

Даже вот автор отладит конструкцию, но повторить её в 5 экземплярах не сможет

Смогу. И на самых разных флаях смогу, даже на разных чипсетах!

Телефоны могут быть с другой ревизией и код придется адаптировать под каждый телефон заново

Нормальные вендоры всегда указывают HW Version/SW Version. А во вторых, в мобилках хардварные ревизии - обычно смена различных eMMC (у мтк есть зависимость от CID флэши) и иногда модулей камеры. В этом и прелесть линуха - что фактически мне предоставляют единый интерфейс для общения с периферией и я могу без проблем портировать прошивку между разными устройствами.

Upd: Мне не нужно лезть в драйвер фреймбуфера, этим занимается линух.

Только недоступный на низком уровне. Нет гребенки пинов например, как у ESP32 хотя бы.

Можно самому мост изготовить без проблем. Ну и если так посмотреть, у OPi тоже нормальной гребенки нет, лишь пару GPIO, а остальные - SPI, I2C, питальники и.т.п. И с большинства мобилок тоже можно взять как минимум i2c.

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

НЛО прилетело и опубликовало эту надпись здесь

Я бы в гитхаб-репо добавил список совместимых с проектом телефонов, чисто для того чтобы было проще искать

Хорошо, я назаказывал кучу флаев прошлых лет, предстоит на них проверить)

То есть если мне понадобится, допустим, снабдить полсотни рабочих специальными терминалами со складским ПО типа «иди к десятой полке, положи товар N, отсканируй штрих-код» — это решение позволит сэкономить (1500-300)*50 = 60К, но при этом не завязывается на постоянное наличие на вторичном рынке определённой модели телефона, зато отвязывается от поддержки выбранной модели тем же гуглём.

Экономия, может, и копеечная, а вот второй фактор (берут и перестают ведро поддерживать, и здрасте-дыры) — уже серьёзно.

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

Экономия будет при наличии бесплатного программиста такого уровня.

не завязывается на постоянное наличие на вторичном рынке определённой модели телефона

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

отвязывается от поддержки выбранной модели тем же гуглём

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

Я, как трижды идеологический сторонник (по экологическим, экономическим и технофильским соображениям), прошу всех обратить внимание на эту идею: https://github.com/NickDoom-IDKFA/OGLOED-Stub

От простого «А почему бы просто не поднять иксовый сервер на этом самом External Device» оно отличается, как минимум, возможностью запуска с минимальными привилегиями (как у игрушки, а не как у сервера), а как максимум — возможностью запрячь CPU в помощь GPU, если последний не умеет какие-то вычурные операции сам по себе (что имеет прямое отношение к статье — берём фирменное ядро Линуха для данного телефона и вместо ведра на него цепляем оглоеда, который умеет только одну вещь, но зато умеет её предельно эффективно). Ну, и поскольку иксовый сервер остался на клиентской машине, она тоже может во все 16 ядер (или сколько там есть) апгрейдить версию опенгл с доступной до нужной, что сильно повышает полезность старого телефона в качестве внешнего дисплея (если бы мы полностью вынесли иксы на телефон, этого бы мы лишились). Короче, см. диаграмму, на ней всё это есть.

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

Не очень понятно, почему иксовый сервер работать не будет, а OGLOED - будет. И если у нас уже есть мощная 16-ядерная машина для запуска приложения, а External Device маломощный и отгороженный проприетарной ОС, то почему бы просто не стримить уже готовое видео?

Читая эту статейку почти каждую минуту вспоминал те самые китайские айфоны 8-летней давности...

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

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

Хотел проголосовать за "Автор наркоман", имея в виду сделать комплимент, но политкорректно выбрал первый пункт. :)

>> только ввод и вывод данных из звукового тракта модема происходит через звуковую подсистему Android — к которой доступа у нас нет!

Не мог бы ты чуть поподробнее рассказать, как это устроено? Я думал что Android поверх Linux работает и использует только то что Linux ему поставит. А вообще есть такие Android смартфоны где можно из Linux доступ к модему получить?

Сейчас расскажу:

Издавна, в Linux есть две звуковые подсистемы - OSS (Open Sound System) и ALSA.

OSS славится своим простым интерфейсом - фактически, программы могут просто посылать "сырой" PCM звук в /dev/dsp, причем сразу из нескольких каналов (у подсистемы есть микшер) и получать на выходе звук. Да, вот так просто. При необходимости, можно было настроить частоту дискретизации, моно/стерео и.т.п.

Затем ему на смену пришла ALSA, т.к OSS была проприетарщиной. С этой подсистемой работать немного сложнее - нужна alsalib.

А в ведре решили плюнуть на все это многообразие и сделали свою звуковую систему поверх всего - прямо как часть Android HAL. А поскольку открывать исходники HAL никто не требует - получаем проприетарщину!

Вау, ну зачем так категорично. Есть audio hal, которые работают поверх ALSA и их исходники открыты.

Андроид не диктует как надо реализовать audio hal, если есть драйверы звуковой подсистемы которые дают ALSA или OSS, то hal делается поверх них.

Это уже от вендора зависит. На 6572/6580 есть /dev/dsp и устройства ALSA, на 6573 - вообще ничего связанного с звуком в /dev/ нет, вероятно, весь звук через HAL. Вся обработка голоса тоже идет через звуковую подсистему андроида :(

Так я это и имел ввиду, что не Андроид делает по другому, а вендоров так реализуют свое аудио. Самому Андроиду вообще все равно что там ниже HAL.

у 6573, 6575, 6577 и ещё нескольких звук в андроиде выводится через собственную мткшную подсистему yusu, костыльную настолько, что в андроиде приходится реализовывать фейковую alsa и обвязку для неё с пустыми роутами, конфигами. Драйвер AFE (audio front-end) там написан так, что без слёз не взглянешь. Пару раз садился за это дело, но в конечном счёте так и не смог разобраться, в каком порядке что взаимодействует для вывода звука на 6577. Там ещё и libbessound проприетарный на подхвате. Если хорошенько подумать, то уверен, что реализовать звук можно и без зависимости от андроида, достаточно будет сделать alsa-совместимую прослойку для AFE+YuSu.

Благодарю за наводку! На 6572 тоже какой-то фейковый ALSA/OSS, прямой вывод в dsp там ничего не даёт, как и установка volume/mut

Только OSS не проприетарщина. Просто в новой версии основной реализации там когда-то сделали несовместимую лицензию. А уж API OSS тем более не проприетарщина, и причина его замены - в синдроме NIH. Во FreeBSD вот своя звуковая подсистема, но с API OSS. Потому что было везде и красивое и удобное.

С удобностью согласен)

API OSS перестаёт быть удобным, когда нужно реализовывать не push (приложение заранее подготовило звук и делает write в сторону ядра), а pull (ядро понимает, что железу скоро будет нечего воспроизводить, и просит приложение сгенерировать новые аудиоданные).

Оу, извините, все равно непонятно, почему же получается проще прикрутить к телефону второй модем, а не добраться до встроенного :'(

Правильно ли я понимаю, что по сути проблема в том, что для всей звуковой системы телефона просто нужны заковыристые драйвера, которые по-быстрому не написать и в опенсорсе не доступны, или есть какие-то более фундаментальные трудности?

Извиняюсь, если вопросы глупые, я во внутренностях линухов (и особенно телефонов на нем) не силен, но тема чертовски интересная!

Правильно ли я понимаю, что по сути проблема в том, что для всей звуковой системы телефона просто нужны заковыристые драйвера, которые по-быстрому не написать и в опенсорсе не доступны, или есть какие-то более фундаментальные трудности?

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

В сторону libhybris взгляните.

Как резко поменялся формат статей. Я, конечно, извините, но это не перевод ли, разбавленный повторением описанных в оригинале действий?

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

Блин, странная логика конечно, если что-то уникальное и крутое - значит обязательно перевод)) Я давно пропагандирую моддинг устройств в своем блоге:

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

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

Китайский айфон на чистом Android — совсем бесполезен в 2022? / Хабр (habr.com)

Обзоры на девайсы пишу под аккаунтом @MDXE1337

Нет, не странная. К сожалению, история очень распространённая. Уровень разный, на мой вкус. Есть серьёзная разница между тем, чтобы залить в старое устройство кастомную прошивку и включить там в плеере "Чернобуркв", и тем, чтобы запихать туда голый линукс, нафигачить какую-никакую, но графику, да ещё и возиться с подключением внешнего сим-модуля (пусть даже он и на AT-командах). Если всё своё, то только хорошо, конечно.

Обзоры на девайсы пишу под аккаунтом MDXE1337

Так это виртуал? Или товарищ твой?

Както очень уж радикально. Я делал по другому. Грузился в нормальный андроид, но не грузил Zygote. Таким образом получал полноценный Линукс но без Андроид фреймворка. А это значит там были GPU, Audio, HW composer и т.п. ништяки. Т.е. весь HAL можно было использовать напрямую. Т.к. фреймворк Андроида не грузился то все это запускалось за считанные секунды.

Эх, делали же раньше устройства, можно было свои прошивки писать с нуля, а сейчас все заколочено наглухо и надо преодолевать большое число препятствий чтобы хоть что-то там сделать. Можно прямо статьи писать, как приходится реверсить ключи и прочую криптографию чтобы иметь возоможность хотя бы патчить компоненты. Сейчас же в телефонах полный набор: траст-зона, гипервизор, несколько ОС (включая RTOS) работающих одновременно, аппаратные ключи и подписи ну и почти полное отсутствие даже доков, не говоря уж об исходниках. Ну и конечно такой адский труд получается никому особо не нужный, разве что для развлечения, потому что производители последовательно и жестко отбивают желание что-то делать, продолжая закрывать все что только можно.

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

Состоящая из первой попавшей под руку опенсорсной ARM-платы подходящей мощности и стандартного GSM-модема со стандартным интерфейсом, плюс периферия.

Так можно сразу минимальную партию каких-нибудь у каких-нибудь ODM купить, раз уж так пошло.


Чуть детальнее про это писал DarkTiger в комментарии к этой статье.

К сожалению это только верхушка айсберга. Дядя Ляо конечно продаст вам партию телефонов с вашим шильдиком и даже с принципиальной схемой, которая не сильно отличается от референса, но основу всего составляет SoC, а условное SDK/DDK для них (возьмем любого из тройки MediaTek, Qualcomm, Samsung для примера) - очень закрытое и у вас не будет даже исходников многих компонентов, и в этом будет основная проблема: вы даже произвольную версию ядра линукс не поставите на свой телефон. Никаких исходников RTOS, гипервизора, видеоускорителя вы не получите вообще. От модема и трастзоны - частично, зависит от заплаченных денег (могут вообще не дать). У вас даже ключа не будет для подписи некоторых компонентов прошивки, вам их выдадут в бинарном виде и выбросить их нельзя, потому что на них многое завязано. Понятно что возможности глубоко лезть в потроха у вас просто не будет, либо придется отключать целые узлы системы, если это вообще возможно. И да, все это добро выдается по подписке, либо на конкретную версию (диапазон) андроида, и версию выбираете не вы.

Проблема в том, что 99% "вторичных" производителей (которые сидят на готовых решениях дяди Ляо) телефонов устраивает такая практика - они не лезут в систему вообще, а кастомизация заключается в настройке "нескучных обоев" и региональных ограничениях в софте и настройках. И видя это производители SoC перестают выдавать даже документацию на отдельные компоненты - зачем, если никому не нужно в итоге. Сравните SDK пятилетней давности и сегодняшний например.

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

основу всего составляет SoC

Это обязательно? А как же люди даже на «малинках» делают? А как же проект «Андроид фор х86»?

Спасибо, познавательно. Читал с большим интересом)

Спасибо за статью, вся серия интересная. Можно ли разжевать поподробнее варианты как можно внедриться в телефон или планшет без экрана (с полностью разбитым). Т.е. известно что планшет загружается, но ничего не видно. Есть ли какие то образы для загрузки с СД карты, етс?

Образоы есть ток если у вас чипсет AllWinner. Можно включить adb, если у вас относительно старое устрйоство - ищем прошивку на него, выдергивает boot.img, распаковываем с помощью mtkimgtools, меняем в default.prop ro.secure=0, ro.debuggable=1, перезапаковываем и заливаем на устройство родным флэшером. После этого, вам станет доступен терминал - adb.

Добавлю, что если прошивки нет, но смарт на MTK - прошивку можно вычитать прямо из него (через SP Flash Tool и функцию readback). Главное скаттер (txtшка со списком разделов с их адресами началами и размерами) потом правильный сделать перед тем как пропатченный boot.img шить. Я так делал. А потом уже (имея adb) можно запустить scrcpy (если Android 5.0+) и получить GUI смарта в окошке на компе с возможностью управления.

Даже скаттер не нужен) Сервисный софт умеет дампить напрямую без него (Miracle Thunder).

Да это понятно что для дампа скаттер не нужен, я и через SP Flash Tool дампил с фейковым скаттером (в котором один раздел "на все деньги"), а вот зашить обратно пропатченный boot.img без скаттера хотя бы с этим самым boot уже не получится, имхо.

Write memory :) ANDROID в HEX-редакторе поискать.

Автор, продолжайте развивать тему. Причесывайте и выкладывай код на Github. Может быть когда нибудь Ваш проект составит конкуренцию SailfishOS и иным Linux-based мобильным операционкам.

Код уже есть на гитхабе, но причесать стоит)

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

Однако никто не мешает в будущем просто прошить раздел recovery вместо boot

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

В структуре образа boot/recovery у старых мтк каждая часть имеет свой дополнительный заголовок. Ядро всегда имеет заголовок KERNEL. Рамдиск - ROOTFS либо RECOVERY, как раз в зависимости от раздела, с которого U-Boot производит загрузку.

Когда я пытался реализовать поддержку mt6577 в mainline-ядре, я задокументировал (вырвиглазно) этот момент, т.к. пару раз наступал на грабли нерабочего запуска. В моём случае дополнительно надо было делать рамдиск-обманку для удовлетворения требований U-Boot'a, тогда как на самом деле абсолютно всё необходимое склеивалось в состав единого zImage.

Вариантов решения проблемы - масса. Например, можно пропатчить образ U-Boot (недостаток - если устройство использует подписанную прошивку с файлами *-sign.img, то флештулом надо будет шиться через меню Write Memory вместо Download). Можно пропатчить U-Boot на уровне исходников, но, судя по отзывам с 4пда, начинается лютый карнавал при попытке его собрать. Самый очевидный вариант - банально прописать правильные заголовки для mkimage в своём Makefile или полностью отдать на откуп эту проблему "кухне", если она используется.

Зашел только из-за заголовка "написал свою прошивку с нуля" и в самом же начале увидел резкий разворот на 180° - "с нуля писать не буду" :(

Зато это pet-project, который автор может показать его как приложение к резюме и мотивационному письму в какой-нибудь imec в Лёвене. И его возьмут на работу, потому что такие специалисты на вес золото.

А модем и wifi/BT на самом Mediatek доступны? СМС и дата например работают?

С датой пока не разобрался, СМС работают, звонки тоже (без звука).

WiFi и BT есть, но с ними работать сложнее.

SMS уже неплохо, получается стандартные АТ команды можно слать в модем?

По WiFi и BT интересно получится ли их завести, тот же вопрос про GPS кстати, если беспроводные интерфейсы заработают то сильно больше вариантов использования появляется.

Можно, но только предварительно послав прошивку на модем и настроив CCCI. WiFi точно можно, GPS теоретически.

Походу автор запилил свою МТК ОС на ядре линупса.

Мало что понятно, но ооочень интересно! +)

Отдельное спасибо за "коприовать сканлайнами прямо в задний буфер"

-что бы это не означало +))

Примерно тоже самое делали 20лет назад на Siemens SX1, портировали линух + гуи

Там тоже модем внешний.

Возможно стоит взять уже готовое решение

  • FLNX GUI toolkit (this is a nano-x version of FLTK).

  • Nano-X small X-server

  • customized Nanowm window manager

  • TPL serialization library (http://tpl.sourceforge.net)

  • gsmmuxd - GSM multiplexing daemon

  • Tiny message bus system - TBUS

Оболочка Qtopia выглядела так:

Иксы на мобилки я точно не потащу)

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

Очень круто! Спасибо за статью

Осталось назвать новую прошивку Береза ОС и запросить гос. финансирование. Думаю лярда два поднимите.

P.S Если без шуток, то статья очень интересная, а автор крутой!

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

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за тёплые слова!

Неа, посмотрите внимательнее: buf - это массив байтов на стеке, а не указатель. Преобразование в char* там необходимо из-за строгих правил C++ в отношении передачи type* и type[] (в C такая операция разрешена) - сделано это для уменьшения кол-ва косяков со стороны программистов, когда это делается не намеренно.

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

НЛО прилетело и опубликовало эту надпись здесь

Весьма хабратортно. Успехов с развитием темы, ну и я бы ради лулзов начал рассылать резюме по этой теме. Начал бы с ОМП.

Я хотел к ним пойти, но они пришли ко мне. Правда, мне предложили работу по реализации взаимодействия внешних устройств с их экосистемой, но мне интересно работать именно над самими мобильными девайсами!

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

С точки зрения "смотрите как я умею" или "во, что можно сделать" или "попробуйте, вы тоже так сможете" это действительно клёвая и интересная затея, да и понятно, что автору было просто интересно сделать что-то такое. Однако, как человек со стороны, из раздела мотивация я так и не нашёл ответ на главный вопрос: Зачем?

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