В наше время, из-за санкций одноплатники стали стоить каких-то «конских» денег. Даже б/у RaspberryPi Zero стоит 2-3 тысячи рублей на барахолках, что, мягко скажем, не совсем лояльная цена для «самого дешевого одноплатного компьютера в мире». Конечно, Orange Pi Zero всё ещё можно купить в пределах 1.500-2.000 рублей, но как по мне и эта цена не слишком лояльна за те характеристики, который предлагает такой одноплатник. С другой стороны, Android-планшеты 10-летней давности продаются на барахолках по 100-300 рублей, что выглядит гораздо привлекательнее, причём на некоторые устройства практически без костылей можно установить полноценный дистрибутив Linux! Вероятно, многие читатели скажут мол «автор бомж» и будут правы: ведь в рамках этой статьи, я хочу рассказать о том, как использовать полурабочий древний планшет в качестве полноценного одноплатника путём подключения его к микроконтроллеру и выводу GPIO! Сегодня мы с вами: узнаем, как подключить микроконтроллер к шине UART в планшете и научимся работать с последовательной шиной в Android прямо из Java и нативных программ. Интересна моя концепция антикризисного одноплатника? Тогда добро пожаловать под кат!
❯ Зачем это нужно?
Пожалуй, нельзя сказать, что подобная концепция пристраивания старых планшетов — вопрос исключительно цены. 2-3 тысячи рублей не такие уж и большие деньги и при желании можно купить хотя-бы Б/У, но всё таки полноценный одноплатник с нормальной GPIO-гребенкой. Однако здесь стоит вопрос не столько дешевизны, сколько E-Waste: зачем выкидывать в помойку потенциально рабочие планшеты с живым процессором, если их можно пристроить куда-то ещё?
На самом деле, планшеты с ROOT-доступом уже из коробки могут выполнять весьма полезные задачи, как, например, хостинг http-сервера для домашней страницы, работать как панель с часиками и погодой, или, например, работать в качестве HMI-панели для оформления заказов в шаурмечной. Кроме того, многие планшеты на базе смартфонных чипсетов (MediaTek, Spreadtrum) имеют полноценный Bluetooth-модуль, что позволяет «подружить» планшет с микроконтроллером через радиоканал, что значительно расширяет возможный спектр применений.
Преимуществ у такого подхода много: у «пожилого» планшета уже есть большой, достаточно качественный (хороший TN, либо даже IPS) дисплей с тачскрином, который поддерживает мультитач, GPU для вывода 3D-графики, 3.5мм для вывода звука + встроенные динамики, а также весьма неплохое, по сравнению с дешевыми одноплатниками, железо. Звучит весьма вкусно для цены в 300 рублей: собрать хоть немного похожую конфигурацию на базе RPi выйдет в 10-15 тысяч рублей (учитывая дороговизну MIPI-матриц с тачскринами + цену самой «малинки» и обвязки для аудиотракта).
Но при всех перечисленных достоинствах, атрибутом любого полноценного одноплатника является наличие GPIO — и даже здесь мы сможем с вами выкрутится! Первый способ, о котором я чуть выше вскользь рассказал, позволяет реализовать общение с МК и «ногодрыг» через BT-радиоканал, но минусы такого подхода очевидны (МК с BT дороже, радиоканал потребляет дополнительную энергию, некоторые могут посчитать BT небезопасным). Однако есть и второй подход, который заключается в использовании диагностических пятачков UART на плате устройства для наших личных целей!
С таким подходом можно использовать как «голый» Linux, используя концепцию, которую я представил в этой статье, так и взаимодействовать из Java-приложений для Android (что даёт уже, как минимум, удобный GUI-фреймворк). Сегодняшняя статья будет «без воды», только чистая конкретика, поэтому давайте перейдем к реализации!
❯ Подготовка
Как я уже говорил выше — в рамках данной статьи мы рассмотрим использование UART в планшете для наших собственных целей. UART — это двунаправленная полнодуплексная цифровая шина, которая позволяет обеспечить стабильную передачу данных при относительно невысокой скорости, измеряемой вбодах. То есть, быстро стримить картинку с её помощью вы не сможете, но сможете, например, получить состояние входов МК, прочитать что-то на шине I2C, используя мост UART -> I2C или, например, прочитать показания датчиков, которые МК предварительно опросил.
Сама по себе концепция очень простая: многие китайские производители планшетов и смартфонов не только разводят UART в виде отдельного пятачка на плате, но и подписывают его, задействуя UART-канал как вывод для логов ядра, а иногда и предоставляя доступ к рутовой консоли! В свою очередь, из юзерспейса мы можем получить доступ к UART с помощью устройства/dev/ttyS<x>на подавляющем числе чипсетов и/dev/ttyMT<x>на MediaTek. Однако учтите, что в некоторых случаях придется патчить загрузчик, дабы редиректнуть логи ядра в /dev/null.
Однако наличие UART на плате — не всегда признак того, что он сконфигурирован в системе верно. Например, на смартфонах с чипсетами SC6820 нормально завести UART я так и не смог, а на некоторых устройствах на базе MT657x нужно патчить загрузчик, дабы он «увидел» нужный канал UART! В моём случае, героем статьи стал планшет Prestigio, у которого отказал тачскрин, но был доступен UART:
Конкретно в моём случае, после установки последней официальной прошивки планшет перестал слать логи на UART и устройство /dev/ttyMT3 оказалось доступным для наших операций, в вашем же случае может потребоваться настройка devicetree, или просто патчинг загрузчика, дабы редиректнуть консоль на другой вывод UART. Кроме того, необходимо обязательно получить root-доступ хотя-бы к adb shell, поскольку доступ к /dev/tty устройствам возможен только от имени суперпользователя. Как же проверить UART на возможность чтения/записи? Сначала нам необходимо взять ESP32 или любой UART-USB преобразователь, припаять сигнальные линии RX/TX и использовать любую программу для работы с последовательным портом, например Putty. Заходим в adb shell, и пишем что-нибудь в консоль:
Вуаля! Всё работает :)
Работает? Замечательно, значит мы сможем использовать планшет вместе с микроконтроллером! Переходим к практической реализации нашего приложения!
❯ Используем из Java
Я специально решил выделить для Java-подхода отдельный раздел, поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream не выйдет. Дело в том, что даже несмотря на наличие root-доступа, по факту ни одно Android-приложение его не имеет (за исключением подписанных системных в папке /system/app/) и для всех операций, требующих повышенных привилегий, либо распаковывают и запускают внешнюю нативную программу из под суперпользователя, либо с помощью специального костыля с запуском sh-программ читают/пишут нужные блочные устройства сами. Связано это с тем, что все Android-приложения работают в хост-процессе app_process, который форкается (отпочковывается) от «главного» процесса, который запущен из под «простого» пользователя, который не находится в группе system.
Здесь концепция также очень простая: su имеет аргумент -c, который позволяет запустить команду от имени root-пользователя и возвращает объект процесса, дабы мы потом могли перехватить stdout:
Таким образом, для чтения текстовых данных из UART'а нам достаточно лишь периодически «слушать» stdout команды cat и обрабатывать данные:
Костыль, но со вкусом :) Если вас не устраивает такой подход или ваше приложение значительно более комплексное, вы можете использовать UART и из под нативных программ.
❯ Используем из C
Работа с последовательными портами в Linux не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.
int fd = open("/dev/ttyMT3", O_RDWR); int result = write(fd, command, strlen(command));
Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:
Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в моей отдельной статье.
❯ Заключение
Вот таким образом можно использовать проводную шину в планшете для собственных нужд! Как видите, совершенно ничего сложного и используя эти наработки, я реализовал уже не один проект! Надеюсь, материал вам был интересен и полезен :) Пишите своё мнение, можно ли использовать дешевые планшеты по 300 рублей в качестве одноплатников?
Статья была подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю! Ну а больше подробностей о будущем контенте, как обычно, в первом комменте! Также у меня есть свой Telegram-канал, куда я выкладываю свои мысли, советы по ремонту и моддингу различных гаджетов, а также вовремя публикую ссылки на новые статьи!
После подробного материала с разбором и тестами N14 Pro, компания Ninkear предложила заслать мне их следующую модель - A15 Plus, которая построена на базе проверенной временем платформы Ryzen 5700U. Пожалуй, если сейчас зайти на любой онлайн-маркетплейс, можно найти сотни различных предложений ноутбуков на базе "красной" платформы и даже среди них модели от Ninkear есть чем выделится! Стоит ли брать A15 Plus за 60.000 рублей? Узнаем в сегодняшней обзорной статье!
Распаковка
Пожалуй, не могу не отметить свою благодарность компании Ninkear за подаренный ультрабук N14 Pro: девайс во многом мне помогает, с учётом того, что мы собираемся с вами реализовать проект автомобильной тематики (который в свою очередь требует частого нахождения на улице), иметь подобный портативный гаджет как минимум удобно.
После прошлого обзора ребята из Ninkear сказали, что мой стиль написания обзоров им понравился и в особенности то, что я уделяю внимание такому важному аспекту для многих разработчиков, как скорость clean-сборки комплексных проектов с десятками тысяч строк кода. Поэтому когда мне предложили протестировать другой их лэптоп на базе "красной" платформы - я согласился :)
Девайс пришёл ко мне в хорошо запечатанной коробке, внутри которой находилось ещё две небольшие коробочки: первая с блоком питания, проводной мышкой (в N14 Pro была беспроводная), а также фирменным ковриком. Ультрабук хорошо запакован, в целом, не вызывает сомнений, что он доедет нормально и служба доставки его не разобьёт.
Дизайном лэптоп напоминает, в первую очередь, конечно-же технику от всем известной яблочной компании. Пожалуй, это какой-то тренд последних лет, но назвать его плохим язык не повернется - ультрабук очень тонкий, почти полностью металлический и в целом отдаёт некоторой премиальностью. Корпус очень сильно напоминает оный у N14 Pro, однако наша сегодняшняя модель значительно тоньше - что можно записать как в плюсы (очень компактный), так и в минусы (нужно быть осторожнее, если устройство необходимо будет закинуть в рюкзак или в машину).
Открывая лэптоп, мы лицезреем здоровенный тачпад с поддержкой мультитача (т.е возможностью делать операции а-ля зум) и весьма удобную клавиатуру, которая, кстати, весьма похожа на оную в N14 Pro. Судя по всему, Ninkear не стали изобретать велосипед и использовали одну из generic-клавиатур, которые можно без проблем найти в Китае и заказать по парт-номеру. Небольшой, но всё же плюсик к ремонтопригодности! Кроме того, в клавиатуре установлена светодиодная регулируемая подсветка для работы в темное время суток. Мелочь, а приятно.
Лишь один мелкий нюанс может расстроить некоторых читателей - это совмещенная кнопка включения с общей клавиатурой. Я лично тоже немного скучаю по этим тактильным отдельным кнопочкам, но увы, тренды диктуют свои правила!
В остальном же, девайс не вызывает никаких нареканий с точки зрения внешнего вида и в целом, весьма стоек к царапкам и прочим вещам, характерным для устройств, которые активно используются в портативном режиме. Давайте же узнаем, что у девайса "под капотом"!
Производительность
Как уже было оговорено ранее, ультрабук построен на базе достаточно актуальной и проверенной платформы Ryzen 7 5700U. В отличии от N14 Pro, который построен на базе платформы от Intel, A15 Plus отличается значительно более высокой производительностью и в первую очередь - в 3D графике: сложно поспорить с тем, что GPU семейства Radeon значительно шустрее Iris XE в наше время. Давайте же ознакомимся с подробными спецификациями A15 Plus:
Процессор: AMD Ryzen 7 5700U с 8-ядрами/16-потоками и частотой до 4.3ГГц на базе архитектуры Zen 2, выпущенный по 7нм тех. процессу. Процессор вышел в 2021 году и получил 8 мегабайт L3 кэша (общего), 512Кб L2 кэша (на каждое ядро отдельно), а также имеет весьма "холодный" нрав в виде TDP 15W.
GPU: Radeon 512SP на базе архитектуры GCN 5.1 (Vega II), который работает на частоте до 1.750МГц и использует некоторую часть ОЗУ в качестве VRAM. Ускоритель поддерживает DX12, OGL 4.6, Vulkan 1.3 и SM 6.7. Практически все самые последние стандарты!
ОЗУ и SSD: 32Гб DDR4 на частоте 3200МГц. SSD - NVMe на 1Тб.
Аккумулятор: 57Вт/ч. Производитель обещает около 10 часов работы от аккумулятора в обычном режиме (понятное дело, что если процессор будет молотить весь аптайм на 100% - то аккумулятор сядет быстрее).
Дисплей: 15.6" матрица с разрешением 1920x1080, выполненная по технологии IPS с яркостью 400Нит. Её качество вполне на уровне, хотя для кого-то яркость может показаться маловатой.
Интерфейсы: 2x USB 3.0, MicroSD, 3.5мм джек для наушников, а также HDMI и полноценный Type-C (как передача данных, так и зарядка), а также Wi-Fi 2.4GHz/5.0GHz.
ОС: Windows 11 Home.
Цена: 63.000 рублей на момент написания статьи или 675$!
По моему субъективному мнению, характеристики весьма и весьма неплохие для такого прайса! Я помню лэптопы за те-же деньги в 2012-2013 году (те же Samsung'и RV серии), которые предлагали совсем уж базовые характеристики за эти же деньги. А сейчас, вот, можно купить весьма бодрый лэптоп не только для офиса и серфинга в сети, но и более серьезных рабочих задач!
В отличии от N14 Pro, у A15 Plus практически нет настроек в UEFI. По словам Ninkear, почти во всех своих лэптопах они даже дебаг-режим не прячут в релизных версиях прошивок UEFI, что даёт доступ к UART'у. Стоит ли говорить о том, что если девайс пишет логи в UART, диагностика нерабочего устройства значительно облегчается?
Давайте же перейдем к бенчмаркам. Тут всё по классике: CPU-Z, GPU-Z, Furmark, а также AIDA64. Начинаем с CPU-Z, который выдаёт более подробную информацию о нашем процессоре. Бенчмарк набирает 510.9 попугаев в однопоточном режиме и 3596.9 попугаев в многопоточном - вполне неплохо, это уровень.
GPU-Z подтверждает нашу информацию о GPU, а Furmark 2 выдаёт ~12 FPS на бублике в FHD (это относительно нормальный результат для встройки, FurMark - очень тяжелый бенчмарк). Ну, игровой потенциал мы протестируем в отдельном разделе нашего обзора!
В AIDA64 я тестировал ЦПУ используя два бенчмарка: CPU Queen для подсчета производительности АЛУ, а также FPU Julia для теста сопроцессора чисел с плавающей точкой. Результат очень и очень достойный, на уровне десктопного i7-7800K.
В повседневных задачах девайс проявляет себя замечательно: нет никаких проблем при серфинге страниц, благодаря 32Гб шустренькой DDR4 памяти девайс может держать параллельно открытыми пару браузеров с несколькими вкладками и параллельно запущенный видеоролик в YouTube, а также какой-либо рабочий софт. Конечно-же девайс подойдет и для офиса, или, например, диагностики автомобилей (относительно современных).
Если вы любитель GNU/Linux, то с этим есть некоторые проблемы - конкретно на A15 Plus, последний релиз Ubuntu работал с косяками: в самой системе залипали кнопки клавиатуры на 1-2 секунды (скорее всего, баг "вялого"). С драйверами на Radeon сейчас всё хорошо (учитывая что AMD охотно делится спеками и документацией на старые видеочипы), система подхватывает почти все устройства (я не проверял управление охлаждением).
Давайте же перейдем к профильным тестам ультрабука, ведь статья позиционируется как обзор именно для разработчиков!
Для разработчика
Как и в случае с обзором на N14 Pro, мы будем с вами проводить тесты в нескольких кейсах: компиляция Android-проектов и работа в Android-Studio, компиляция .NET проектов и использование VS Community, а также сборка здоровенных С++ проектов с сотнями тысяч строк исходного кода! В качестве изюминки мы замерим время компиляции самого свежего ядра Linux для нашего устройства!
Начинаем с Android Studio, который работает очень шустро, несмотря на общую прожорливость IDE от Google и JetBrains. Никаких неудобств при разработке не возникает, редактор лейаутов и кода работает нормально. Время сборки проекта моего клиента YouTube для Android 2.2 без учёта Gradle refresh - 9 секунд.
Переходим к .NET. Здесь я использую VS2022 Community Edition, а собираю свой самопальный шутер на собственном 3D-движке. Игра небольшая - всего около 3х тысяч строк кода, которые на Ryzen 5700U собираются менее чем за секунду! Очень-очень шустро! IDE работает быстро и оптимизирована хорошо.
Давайте соберем большой и крутой движок Urho3D из исходного кода в рамках теста компиляции C++. Опять же, компилятор - VC2022, а время сборки - всего 55 секунд. Это в два раза быстрее, чем время сборки проекта на N14 Pro (скорее всего сказывается значительно более шустрый SSD и Ryzen, который хорошо дружит с распараллеленными компиляторами). Intellisense работает моментально.
Изначально, я хотел протестировать время компиляции ядра Linux, но увы. Хотя, конечно, можете меня пожурить в комментариях за то, что настоящий линуксоид собирает ядро и без этих ваших XTerm, прямо в обычном текстовом терминале!
Играем
Пришло самое время поиграть! Я установил несколько игр, правда стоит всё же учитывать, что это интегрированная графика и смысла запускать условный киберпанк на ней нет. Поэтому я прошёлся по нескольким любимым мной играм прошлых лет, которые, тем не менее, все еще могут нагрузить относительно бюджетные и среднебюджетные лэптопы! Пожалуйста, учтите что все тесты проводились в портативном режиме для честности.
Начинаем с Black Mesa. Игра выдаёт нестабильные 30 FPS при средних настройках графики в FHD. Несмотря на то, что BM работает на Source, ребята из Crowbar Collective форкнули одну из веток движка и значительно переписали рендерер, из-за чего игра способна нагрузить многие шустрые десктопные карточки прошлых лет.
А вот с Fallout 4 ситуация сложнее. На средних настройках в FHD и отключенным антиальясингом, игра едва ли тянет в 15 кадров при нахождении в густонаселенных локациях с, предположительном, большим овердравом.
GTA 5 ноутбук тянет в относительно стабильные кинематографичные 24-30 FPS на "стандартных" настройках графики. Не так хорошо, как хотелось бы, но в целом нормально.
Под капотом
Давайте разберем девайс и узнаем, что у него внутри! Как я уже говорил в обзоре на N14 Pro, лэптопы Ninkear очень легко разбираются: достаточно лишь открутить винты и расщелкнуть клипсы поддона. После этого, перед нами предстает плата устройства.
Очень приятно то, что аккумулятор можно отключить без полной разборки устройства - это полезно, если вам нужно надолго убрать ноутбук на полку и вы не хотите увести АКБ в глубокий разряд.
Система охлаждения выполнена в виде одного большого кулера, от которого идут две теплотрубки: одна на процессор, другая на хаб.
Аккумулятор представляет из себя несколько последовательно соединенных банок с общей емкостью 5Ач:
В остальном, ультрабук скомпонован весьма грамотно и его легко обслуживать. Многие читатели смогут без проблем его разобрать и прочистить от пыли и засорений. Никаких разборок через клавиатуру!
Заключение
Вот такой обзор на A15 Plus у нас с вами получился. Как вы считаете, девайс достаточно шустрый? Достоин покупки? Лично по моему мнению - да, ультрабук имеет хороший баланс цена/качество и предлагает хорошую производительность за небольшие деньги. При этом его легко обслуживать.
Плюсы устройства:
Шустрый "кукурузен": Ультрабук замечательно подойдет для работы и выполнения большинства задач. Начиная от офиса, заканчивая сборкой тяжелых проектов с комплексными системами сборки.
Хороший дисплей: FHD IPS матрица - сбалансированный выбор, который позволяет не особо грузить не самую шуструю встройку, снизить конечную устройства и при этом порадовать пользователя хорошей цветопередачей и отличными углами обзора.
Большой объём ОЗУ: Благодаря 32гб ОЗУ, есть возможность запустить множество программ одновременно. Но в этом есть и минус - память одноканальная, хоть и шустрая.
Бесшумность: Ультрабук не слышно от слова совсем. Он крайне тихий даже при 100% нагрузке и не сказать что горячий.
Хороший корпус: Конструктивно девайс не вызывает никаких нареканий. Ничего не скрипит, не люфтит, всё выполнено на достойном уровне. Металлические материалы корпуса оставляют приятное впечатление от девайса.
Минусы:
Звук: Не очень хорошее качество звука из динамиков устройства. Не сказать, что оно совсем плохое, но N14 Pro в этом плане показывает себя лучше. В любом случае, проблема решается подключением внешних колонок, благо в A15 Plus оставили 3.5мм джек.
Не работает текущая версия Ubuntu из коробки: Ну, тут некоторые читатели скажут мол я не трушный, трушный пропатчил бы вялого под эту платформу и заставил нормально работать клавиатуру. Но в конце концов, большинство читателей этого обзора ожидают нормальной работы из коробки.
Низкая производительность GPU: Здесь сложно упрекнуть Ninkear, но пока что ситуация на рынке встроек не особо меняется: что в нулевых на IGP можно было поиграть лишь в релизы 5-10 летней давности, что сейчас. Но в целом, почему-бы не перепройти классику? :)
Подойдет ли вам A15 Plus?
Офисная работа и серфинг: Легко! Ноутбук справится с задачами серфинга и офисного использования без каких либо проблем.
Разработка: Благодаря шустрому процессору 5700U, девайс быстро собирает большие проекты в 16 потоков и предоставляет приятный экспиренс в IDE даже с множеством открытых больших файлов.
Игры: Если вы любитель игр из начала-серединых 2010х годов, почему-б и нет?
Спасибо компании Ninkear за предоставленный девайс! Приобрести девайс можно на официальном сайте компании с быстрой доставкой по России, или на WB.
Моддинг-сцена с разработкой и портированием кастомных прошивок для Android-устройств существует вот уже более 10 лет. В основном, энтузиасты пытаются проапгрейдить свои устройства путем портирования более свежих версий Android, чем предлагает производитель девайса. Чего уж говорить, если Galaxy S III, которому уже 12 лет стукнуло, получил неофициальный апгрейд до Android 14. Порой мне в голову приходят различные, весьма странные моддерские мысли: например, почему бы не портировать на старенький смартфон… ещё более старую версию Android, дабы посмотреть «что будет». Казалось бы «портировал и портировал», но в процессе работы я столкнулся с множеством интересных нюансов и особенностей работы Android, о которых хотел бы рассказать и вам — моим читателям! Сегодняшняя статья будет в классическом «научпоп»-стиле без кода, зато с подробными объяснениями одной из техник портирования Android-прошивок путем патчинга скриптов для конфигурации системы и подмены Board-specific библиотек, дабы система «увидела» всё необходимое железо! Интересно? Тогда жду вас под катом!
❯ Мотивация
У меня, как и у многих моих читателей, одной из первых версией Android в жизни была 2.x. Наверное, я уже никогда не смогу забыть первые впечатления от использования своего новенького, пусть и бюджетного и слабого Android-смартфона после простеньких китайских кнопочников. Эти ощущения были прекрасными: вот я разблокирую смартфон, потянув «замочек» вправо, свайпаю рабочие столы и тапаю на значок приложения браузера, выполненный в стиле скевоморфизма, загружаю полноценную страницу Википедии через GPRS-сеть (мой первый смартфон не имел 3G) и плавно скроллю страницу, не забывая смахнуть шторку вниз и проверить статус уведомлений в пока ещё совсем простенькой панели нотификаций… Это были по настоящему ламповые впечатления, которые не смог превзойти ни один современный девайс: ни AOSP, ни MIUI, ни OneUI.
Моим первым смартфоном была китайская реплика Samsung Galaxy S III Mini, купленная в самом начале 2013 года. Возможно, кто-то из вас помнит, как подобные дешевые смартфоны и планшеты «Sumsanc» можно было купить на рыночных развалах, в метро и прочих местах, где допускается торговать несертифицированными гаджетами. Даже с учётом накрутки, эти смартфоны стоили всего 2 000 рублей, что было просто «подарком» для цены абсолютно нового гаджета. Девайс был крайне простым для начала 2013 года и имел следующие характеристики:
Процессор: Spreadtrum SC6820. Одно ядро Cortex-A5 на частоте до 1ГГц, Mali400 MP в качестве GPU. Чипсет был крайне высоко-интегрированным для своих лет: в одном корпусе располагалось ARM-ядро, GPU, контроллер питания, GPS, множество периферии (например, DAC), а также Baseband-часть GSM-радиотракта. BT/Wi-Fi реализовывались в отдельном комбочипе разработки RDA.
Память: 256Мб DDR1 ОЗУ/256Мб NAND-памяти в одном чипе eMCP от Hynix. Предположительно, эти чипы остались на складах ещё со времен первых Android-смартфонов, но очень быстро потеряли актуальность и их, вероятно, отдавали «за бесценок» что позволило ещё сильнее снизить цену производства таких смартфонов.
Дисплей: безоговорочно, TFT, обычно с разрешением не выше 480x320, что для 3" дисплея было нормальным, но для 5" — уже несколько маловато. Тем не менее, сами дисплеи были нормальными и глаза от них не «вытекали». Тачскрин обычно ёмкостной, на 2 касания.
Android: 2.2, на некоторых похожих моделях встречался 2.3.
Аккумулятор: ~1.500мАч, не больше. По форм-фактору напоминает BP-4L, без проблем подходит от многих S60 смартфонов Nokia тех лет.
Не густо, да? Уже в апреле того же года вышел Galaxy S4 с Snapdragon 600, 2Гб ОЗУ и 32Гб встроенной памяти, а мы тут с одноядерным чипсетом и 256Мб ОЗУ сидим. Но мне, будучи школяром, это было за счастье — чего я на нём только не делал, и на PHP какие-то WAP-сайты динамические пытался писать и на FTP заливать, и даже ADT Bundle скачал, дабы попытаться что-то своё запилить под собственный смартфон! В общем, я был счастлив, несмотря на лаги девайса. Именно того девайса у меня уже давным-давно не осталось… но память я всё ещё храню и стараюсь дать новый дом таким китайчикам, которые в большинстве своем оказались на свалке истории в новом мире современных смартфонов!
Но на самом деле, смартфоны 10+ летней давности могут быть интересны и своим форм-фактором: в современном мире едва ли можно найти хоть какие-то телефоны с полноценной QWERTY-клавиатурой (исключение — смартфоны UniHertz, которые стоят недешево) и уж тем более, боковые слайдеры. Поэтому мой интерес к подобным девайсам очень легко объяснить!
Однако, порой мне самому хочется снова пережить эти эмоции и ещё раз походить с подобным девайсом «на каждый день», даже когда на Android 2.2 особо никакие сервисы уже не работают. Отчасти, я решаю свои проблемы сам и пишу клиенты нужных мне сервисов, если они действительно нужны, дабы рано или поздно всё таки вдохнуть новую жизнь в «старенькие» девайсы. И казалось бы, это можно списать на синдром утёнка и банальную ностальгию, но мои ощущения «ламповости» отнюдь не мимолетны и всё равно меня тянет именно на те смартфоны, с тем самым интерфейсом, которые я когда-то увидел впервые!
Пожалуй, сказать что я решил портировать старый Android на отнюдь не новый смартфон «просто так» было бы ложью. Я всё ещё верю в то, что смогу в одиночку хотя бы частично вдохнуть новую жизнь в эти девайсы и позволить им работать с современными сервисами, дабы они могли приносить пользу не только мне, но и другим людям, которые намеренно занимаются дауншифтингом или вынуждены сидеть на девайсах с старыми версиями Android! Сегодняшним нашим подопытным станет один из представителей подобных noname-смартфонов тех лет, реплика Galaxy S III Mini на том самом железе, на котором работал мой первый смартфон. Однако с завода на нём стоял Android 2.3 — слишком свежая, по моему мнению, версия системы, которую я конечно-же захотел откатить до Android 2.2!
Задача облегчалась тем, что смартфоны на этом чипсете с Android 2.2 уже выходили, что позволило мне портировать прошивку путем несложных патчей скриптов инициализации и копирования Platform-specific файлов, дабы завести все необходимые для смартфона модули. А поскольку о таком простом способе портирования свежих и старых прошивок знают далеко не все мои читатели — я решил написать об этом отдельный подробный материал! Давайте же перейдём к практической части нашей статьи.
❯ Первые шаги
Перед тем, как начать портирование системы, нам необходимо разбираться в том, как вообще происходит процесс загрузки Android и какие процессы при этом загружаются. Вкратце, описать весь процесс загрузки можно так:
Загрузчик: при включении смартфона, первичный загрузчик BootROM, аппаратно-прошитый в чипсет ещё на этапе изготовления чипа, инициализирует некоторую периферию, загружает вторичный загрузчик из NAND (коим может быть SPL — Second Program Loader, занимающийся инициализацией контроллера DDR и UART) и передаёт ему управление. Вторичный загрузчик в свою очередь передаёт управление U-Boot — в задачи которого входит также инициализация периферии, обработка устройств постоянной памяти (например, NAND или контроллер SD), загрузка ядра Linux и конфигурация самого процесса загрузки. U-Boot можно считать эдакой альтернативной UEFI/BIOS в мире не-x86 устройств. В смартфонах на базе чипов MediaTek и Qualcomm, роль U-Boot выполняет LK — маленькая ОС, в задачи которой входит инициализация периферии и передача управления ядру Linux с помощью программы aboot.
Ядро Linux: после загрузки образа ядра с initrd (небольшая файловая система, которая загружается сразу в память и содержит в себе скрипты для конфигурации всего остального) и передачи управления ядру, Linux начинает выполнение программы с PID 0 — /init, в задачи которой входит выполнение скриптов инициализации userspace-окружения системы в init.rc. При этом смартфон уже фактически готов к работе — в одной из своих статей я показывал, как можно приостановить загрузку Android и выполнять свой код, используя все ресурсы смартфона для своих целей.
zygote и app_process: помимо запуска необходимых для работы смартфона служб, динамической загрузки драйверов (с помощью insmod) и определения режима загрузки (например, если телефон подключили выключенным к зарядке — необходимо показать анимацию этой самой зарядки), init.rc запускает две программы, одна из которых необходима для функционирования системы. Первая — это bootanimation, которая проигрывает анимацию включения смартфона и app_process, который в одном из режимов работы превращается в zygote — самый важный процесс для работы Android, который предварительно при старте системы загружает системный Java-байткод, отвечающий за отрисовку интерфейса, проигрывание звука и т. п. из framework.jar и другие системные ресурсы (например темы и изображения), а затем при запуске каждого приложения просто клонирует сам себя (с уже загруженными ресурсами) и начинает выполнение байткода любого запущенного Android-приложения или службы.
Каждое запущенное приложение или служба — это отдельный app_process, в том числе и лаунчер, и Google-сервисы и клиент любого мессенджера.
Всё выглядит просто и логично, не так ли? Подытожив, можно сказать что для того, чтобы система минимально стартовала, нам необходима подходящее ядро для нашего устройства, рабочий init.rc и адекватно запускающийся init.rc. Кроме того, Android зависит от некоторых платформо-специфичных библиотек: в основном, они находятся в /lib/hardware и без них система может не запуститься или что-то может не работать. Особенно осторожно надо подходить к libhardware.so.
Как я уже сказал выше, прошивку мы будем портировать от другого смартфона на том-же чипсете и что забавно — такую же реплику, просто более-раннюю! «Из коробки», мой смартфон работает на Android 2.3, значительно более стабильной, чем изначальный порт 2.2 на эту платформу. Отличий 2.3 от 2.2 достаточно: например, на 2.2 совсем иной цвет шторки, по умолчанию стоит Light-тема, нельзя закрывать уведомления смахиванием и в целом система несколько отличается внешне. Для работы нам нужно будет два образа прошивки: ту, которую будем портировать и та, которая стоковая. Прошивки в смартфонах на платформе Spreadtrum распространяются в формате pac, однако нет никаких проблем подменить образ раздела в ResearchDownload — фирменной утилите для прошивки смартфонов на этом чипсете.
Я решил взять прошивку от FeiTeng N9300 Mini, родная для моего смартфона — M-Horse 9500 Mini. В случае моего девайса, разметка и список разделов между устройствами никак не отличалась, поэтому изначально я напрямую прошил раздел system.img, дабы посмотреть что будет с устройство. Не забывайте, что ядро и init.rc хранится в образе boot.img — поэтому прошивка раздела system безопасна!
❯ Первый запуск
После прошивки чужого раздела system, смартфон стартовал… однако работал несколько странно: во первых, у нас не было сети, во вторых не работал тачскрин (при родном то ядре), а в третьих, Android ни в какую не видел аккумулятор, вися на 0% и моментально отключаясь, если смартфон не стоит на зарядке, а при попытке воткнуть кабель — смартфон показывал индикацию зарядки, но потребление было на нуле.
Поскольку тачскрина у нас нет, root доступ через adb придется включать «ручками» — для этого нам необходимо перепаковать наш родной раздел boot. Для распаковки и запаковки образов, я пользуюсь MtkImgTool — весьма удобная «кухня» для работы. Вытаскиваем boot.img из pac, закидываем в Unpack/Image/ и распаковываем с помощью Boot -> Unpack -> boot.img
В Unpack/boot/ramdisk/default.prop нам необходимо изменить ro.debuggable на 1, а ro.secure на 0. Это даст возможность отлаживать устройство даже если Android фактически не загрузился.
Теперь у нас есть root-консоль устройства, даже если смартфон висит на заставке. Прошиваем обратно образ, пишем adb shell в консоли и смотрим, что же тут не так… Вообще, драйвер тачскрина обычно статически слинкован с ядром, но в случае устройств Spreadtrum — они вынесены в динамические модули ko, которые можно найти в папке /lib/modules/, либо /sps/. Давайте глянем init.sp6820a.init.3rdparty.rc, который отвечает за специфичную для этой модели смартфона инициализацию.
Ага, видим insmod gt868.ko? Это команда загрузки драйвера тачскрина, в нашем случае — это вышеупомянутый GT868. Иногда встречаются другие модели тачскринов, но главное отличие прошивки 2.2 от 2.3 — разные названия папок с драйверами и некоторые службы. Достаём из родного образа драйвер gt868.ko, используя всё тот-же MtkImgTools, распаковывая его как обычный ext2 раздел:
И наслаждаемся тем, что у нас теперь появился тачскрин! Android сам подхватил новое устройство ввода, поскольку драйвер тачскрина — обычное устройство в /dev/input/. Чтобы драйвер грузился при загрузке, его достаточно добавить в init.sp6820a.3rdparty.rc, предварительно закинув в раздел /system/. Перед этим, раздел нужно перемонтировать для возможности записи:
После модификации rc-скрипта, нужно обратно запаковать boot.img с помощью MtkImgTools и прошить его с помощью ResearchDownload — тачскрин будет работать даже после перезагрузки!
❯ Поднимаем зарядку и сеть
Переходим к отсутствию связи с аккумулятором и нулевым потреблением АКБ. Здесь мне пришлось несколько покопаться и почитать логи ядра с помощью команды dmesg. Я обратил внимание на то, что некая служба пишет что-то об аккумуляторе, но разобраться было несложно: в папке /system/bin я нашёл программу charge, которая, очевидно, отвечает за настройку КП для старта зарядки. Что она точно делает — мне неизвестно, возможно корректирует какие-то значения в sysfs, возможно с помощью ioctl общается с драйвером КП и даёт разрешение на старт зарядки и обновление информации в sysfs. В любом случае, после замены /system/bin/vcharged на оный из родной прошивки, зарядка заработала.
Для этого мы снова перемонтируем /system/ в режим записи и копируем vcharged, не забыв вернуть обратно необходимые права:
Перезагружаем устройство и… зарядка с индикацией появилась!
Вроде всё работает на первый взгляд: и звук, и вибро, и Wi-Fi с Bluetooth… однако сети-то нет! Девайс не определял наличие SIM, а вместо IMEI у нас был null/null:
Чтобы её поднять, нам необходимо разобраться в том, как работает подсистема взаимодействия с радиомодулем в Android, которая называется ril — Radio Interface Library. RIL предоставляет API для системы, дабы оперировать не напрямую AT-командами (которые могут быть проприетарными, а на некоторых чипсетах, как, например, Qualcomm вообще отсутствовать), а удобным набором функций — например о запросе статуса радиомодуля, начале звонка, поиска сети и т. п. RIL состоит из сервиса rild в /system/bin/ и библиотеки libril.so, которую можно найти в папке /system/lib/. При запуске системы, TelephonyManager открывает сокет с rild и опрашивает его состояние. Именно из TelephonyManager система берет информацию о силе сигнала, название оператора, IMEI и другие данные.
Путем ковыряния в dmesg я понял, что система флудит из-за невозможности запустить проприетарный сервис Spreadtrum — sprd_monitor. При попытке позвонить в 112, смартфон бесконечно пытается включить радиомодуль. Я ковырялся в UI-части исходного кода Android, дабы понять логику работы, но проблема крылась как раз в упомянутых выше службах sprd_monitor. Берём их из /system/bin/ оригинальной прошивки, закидываем их в устройство, не забыв установить права и отправляем систему в ребут:
Ошибки в dmesg пропали, IMEI появился, но устройство до сих пор не хочет никуда звонить и просто висит на экране звонка. В настройках смартфон говорит о том, что уровень сигнала недоступен, а значит, радиомодуль до сих пор не работает :(
Но и мы так просто не сдаемся! Поковыляв по файловой системе, в директории /system/opl/telephony/bin/ я нашел скрипт, отвечающий за инициализацию радиотракта, который вызывает родной 3rdparty.rc! Запускаем sh-скрипт и обнаруживаем, что сеть появилась и девайс дозвонился в 112, а также увидел SIM-карту!
Теперь всё полностью работает :) Дабы радиотракт запускался при старте устройства, я перенес часть инита из boot.img от прошивки, которую мы портировали. Для кого-то, казалось бы, это всё достаточно сложно и долго. Но у меня ушел всего один день на полную отладку и запуск такой кастомной прошивки на своем устройстве! Можно сказать, это самый базовый и краткий экскурс в такое нелегкое дело, как моддинг Android-устройств.
Но мы ведь это всё не просто так делали! Давайте глянем, как будет работать такой девайс на Android 2.2 в 2024 году — спустя 14 лет после выхода системы. Всё ли так плохо, как кажется?
❯ Знакомимся с девайсом
Думаю, многие читатели вспомнят этот ламповый интерфейс, обои с одуванчиком и лаунчеры а-ля TouchWiz на тех смартфонах, где интерфейс Samsung был не предусмотрен. А эти «бульк»… их сложно забыть!
Конечно, изначально может показаться, что устройство плохо подходит для выполнения современных задач: браузер не способен загрузить большинство страниц, а из альтернатив есть только Opera Mini, где вообще нет динамического контента, а официальные клиенты ВК, WhatsApp и YouTube уже давно не работают. Опечаленный читатель может подумать, что девайс, как и многие его ровесники уже давно превратились в звонилки…
Но это отнюдь не так! Ведь как я уже говорил, я стараюсь своими силами вдохнуть в подобные девайсы новую жизнь, реализуя на них клиенты нужных мне сервисов сам! Да, пусть примитивно и корявенько, далеко не ынтырпрайз-уровень, но эти приложения выполняют свои функции и что, немаловажно, весят очень мало (до 100Кб) и работают крайне шустро! Клиент ВКшечки просто летает, несмотря на то, что фактически реализован только мессенджер с нотификациями и музыка.
Пожалуй, многие читатели удивятся — но на таких девайсах есть YouTube! Мой самопальный клиент не поддерживает стриминг из сети (да и многие девайсы объективно не потянут), поэтому предварительно загружает видео на MicroSD-флэшку и затем уже их воспроизводит. Как приятный бонус — видео потом можно посмотреть в любой момент в галерее.
Я помню насколько было лампово слушать музыку с таких девайсов. И если претензии к основному динамику не очень актуальны, то к качеству звука в наушниках были придирки — звук был громкий, но ему не хватало низких частот, из-за чего он звучал несколько плоско, хотя мне и этого хватало — ведь я слушал музыку в наушниках по 200-300 рублей с рынка! Я всё ещё помню те времена, как качал mp3-треки по 2-3 мегабайта через 2G-интернет… слушаешь один трек — как раз загрузится другой и так по кругу наполнял свою фонотеку. Эх времена то какие были! Тем не менее, для некоторых базовых мультимедийных возможностей девайс подходит и сейчас, например в машину в качестве BT-хоста с музыкой. А ещё на таких девайсах порой клёво скачать какой-нибудь Temple Run образца 2011 года и вспомнить самое начало смартфонного гейминга тех лет… ведь далеко не все игры того времени запускаются на свежих версиях Android!
❯ Заключение
В остальном же, подобные девайсы отнюдь не бесперспективны! Несмотря на совсем не новое железо, они всё ещё могут выполнять многие задачи, стоит лишь снова запилить необходимые приложения для них! Мессенджеры, соц. сети, музыкальные сервисы и даже просмотр видео — всё это доступно даже для таких, казалось бы, «устаревших» девайсов, когда есть запал энтузиазма и жгучее желание походить именно с этим конкретным устройством как с основным!
Для кого-то это просто проявление синдрома утенка или картинки «вот кому-то делать не.»… ну а для меня — это крайне интересное, захватывающее и кайфовое времяпровождение: начиная от аппаратного ковыряния с такими девайсами и копания исходников ядер/драйверов, заканчивая написанием оптимизированных клиентских приложений, которые весят не 100-200Мб, а 100-200Кб :)
Друзья, если у вас есть подобные китайчики и вы не разделяете желания пытаться вдохнуть в них жизнь, но выбрасывать их жалко — можете задонатить их мне :) Как сами видите — девайсы попадают в хорошие руки. Из недавнего — я взял нерабочую, утопленную китайскую копию 14 Pro Max из под СЦ в качестве основного смартфона. Также у меня есть канал в Telegram, куда я выкладываю бэкстейджи статей, различные заметки о ремонте, моддинге, программировании и реверс-инжиниринге и свои мысли. Кому интересно — залетайте!
Понравилась ли вам статья? Какими были ваши первые Android-смартфоны? Пишите в комментариях, будет интересно почитать!
Друзья! Многие ли из вас помнят такой телефон, как Nokia N-Gage? В начале нулевых финская компания сделала смелую попытку ворваться на рынок игровых консолей, создав устройство, которое сочетало в себе сразу две функции: полноценный смартфон на базе аппаратной платформы WD2 с Symbian на борту и игровая консоль с собственными картриджами! Год назад читатель подарил мне N-Gage QD с некоторыми аппаратными проблемами, которую я успешно оживил и подготовил подробную статью, в которой мы: узнаем историю появления N-Gage на свет и на чём он работал «под капотом», отремонтируем устройство и узнаем о самых частых аппаратных «болячках» смартфонов Nokia на платформе WD2, а также посмотрим на местную игровую библиотеку подробнее и выясним особенности разработки игр под Symbian! Интересно? Тогда добро пожаловать под кат!
❯ Что за N-Gage и как он появился?
Пожалуй, в истории мобильного подразделения Nokia, N-Gage один из самых желанных и неоднозначных устройств, когда либо разработанных компанией. Девайс прошёл долгий путь от смартфона, который ругали чуть ли не все, до легендарного устройства, которое ценится некоторыми людьми и сейчас.
По сути, N-Gage является уникальным смартфоном. За всё время существования мобильного рынка, по настоящему игровых телефонов почти и не выходило: можно вспомнить телефоны Sony Ericsson с геймпадом EGB-30,Xperia Play, японские и корейские телефоны, о которых мало кто слышал, да и китайские реплики Nokia с эмулятором NES на борту.
Я писал материал о Xperia Play год назад
В начале нулевых, рынок мобильных игр начинал активно развиваться. С ростом мощностей мобильных девайсов и появлением цветных дисплеев, стали появляться самые разные платформы для запуска мобильных приложений и продажи игр через операторские сети. Например, довольно большим успехом пользовалась перспективная платформа Mophun (Sony Ericsson T310, T610), которая использовала собственный платформо-независимый байткод. Помимо этого, в платформе были уже готовые библиотеки для упрощения разработки игр: вывод 2D спрайтов, 3D графики (программный рендеринг), звука и обработка ввода. Нельзя также не вспомнить о Qualcomm BREW — который использовался во многих CDMA-телефонах в США и была по настоящему нативной, позволяя использовать все ресурсы телефона. Но самой популярной стала, конечно же, J2ME, которая предустанавливалась на большинство телефонов до ~2014 года.
Sony Ericsson T610 - один из девайсов, поддерживающих Mophun
Само собой Nokia не могли упустить момент и не попытаться занять нишу на мобильном рынке игр. У Nokia было две основные платформы: S40, используемая в кнопочных телефонах и S60, платформа основанная на Symbian, которая использовалась в смартфонах компании. Уже в 2003 году, в платформах S40 и S60 была полноценная поддержка J2ME игр и Java показывала себя как достаточно перспективная платформа. Nokia даже реализовали свои собственные расширения для J2ME, дабы игры могли использовать больше возможностей устройства, чем предоставляет MIDP. В целом, телефоны Nokia были очень популярными, благодаря чему почти все J2ME игры имели собственную версию под S40 (а иногда и более навороченные под S60). N-Gage, который должен был объединить телефон и игровую консоль, был анонсирован ещё в ноябре 2002 года, однако вышел в свет 7 октября 2003 года.
Первая версия N-Gage
Однако N-Gage был отнюдь не первым устройством в подобном дизайне. Его предком принято считать Nokia 3300 — смартфон, который в первую очередь был ориентирован для использования в качестве мультимедийного устройства и прослушивания музыки. Тем не менее, устройство тоже поддерживало J2ME и на нём вполне можно было проходить Symbian-годноту из нулевых.
N-Gage был встречен весьма неоднозначно. В устройстве было достаточно много как аппаратных, так и программных недоработок, которые вызывали недовольство среди пользователей. Первая и пожалуй самая главная для игровой консоли — отсутствие возможности горячей смены картриджей с играми. Сами игровые картриджи были реализованы в виде обычных MMC-карт памяти, однако, судя по всему в S60 не было поддержки «горячей» замены карт памяти как таковой, из-за чего для смены игры необходимо было сначала достать аккумулятор, заменить флэшку с игрой, установить аккумулятор, включить устройство и дождаться его загрузки (секунд 15) и только потом уже начинать играть. А учитывая, что это был телефон, то довольно длительное пребывание вне сети устраивало далеко не всех пользователей.
Картриджи были проблемой и для жителей отдаленных регионов. В России, насколько мне известно, картриджи можно было купить только в Москве и СПБ, хотя возможно и ещё в каких-то больших городах. Но вот, например, у меня, жителя Ейска, едва ли была возможность купить картридж «физически» — разве что только под заказ. Другое дело Java игры, которые весили по 50-100 килобайт в те годы и без проблем скачивались даже через мобильный интернет. Впрочем, судя по всему, никакого особого DRM в N-Gage играх не было и после того, как энтузиасты научились сливать игры с MMC-карточек — на N-Gage начало процветать пиратство.
Даже с точки зрения звонков у девайса были свои нарекания. Конструктивно инженеры Nokia решили расположить слуховой динамик не с лицевой части, а с боковой. Из-за этого для разговоров приходилось переворачивать телефон боком. Выглядело это весьма необычно для прохожих, незнакомых с N-Gage. :) Тем не менее, в устройстве были и революционные решения: вспомнить хотя-бы N-Gage Arena, который объединял мобильных игроков в одну сеть с друзьями, таблицами рекордов и т. д.
Чуть меньше чем через год, в мае 2004 года вышла N-Gage QD: исправленная и доработанная версия N-Gage, в которой заметно изменили дизайн, добавили поддержку замены картриджей без выключения девайса и добавили слуховой динамик на переднюю часть корпуса. Именно эта версия N-Gage стала популярной и её чаще всего можно найти на онлайн-барахолках. И хотя N-Gage ругали за недоработки, мобильным игрокам она полюбилась за высокий уровень игр для телефонов тех лет: графика была гораздо лучше чем на GBA и была близка по уровню к PS1, геймплей разнообразнее, чем в Java-версиях, да и сами игры имели довольно большой полноценный сюжет. Это был действительно замах на уровень таких мастодонтов, как Nintendo! Приятным бонусом была полноценная поддержка Java-игр, благодаря чему на телефоне можно было гораздо удобнее проходить уже вышедшие игры для MIDP 1.0, даже если вся библиотека игр N-Gage уже была пройдена!
Не менее интересно девайс устроен и «под капотом». Как я уже говорил выше, N-Gage был построен на базе зарекомендовавшей себя платформы Nokia WD2, которая использовалась в смартфонах 3650, 3300, 3230, 6600 и.т.д. Многие годы смартфоны Nokia работали на базе чипсетов OMAP, в случае WD2 это скорее всего (не точно, есть вероятность что UPP собственной разработки — как и в случае с S40) были специализированные версии OMAP с «перевернутыми» регистрами для предотвращения портирования Linux на устройства Nokia, поскольку OMAP были доступны рядовым энтузиастам.
Характеристики N-Gage были следующими:
Процессор: ARMv4 ядро на частоте 104МГц, что было стандартом для многих телефонов в те годы (например Siemens на платформе S-Gold работали на той же частоте, а E-Gold — вдвое меньшей). Скорее всего, процессор собственной разработки Nokia.
Память: 16Мб SDRAM ОЗУ и 16Мб ПЗУ, раздельно. Иногда флэш-память изнашивалась и в СЦ её нередко меняли. Мои читатели, которые в нулевых работали в СЦ наверняка вспомнят о "бутербродах" на некоторых телефонах :)
Дисплей: 2.1" матрица с разрешением 176x208 и глубиной цвета 12-бит (4096 цветов), выполненная по технологии CSTN (хотя возможно и TN). Для тех лет, диагональ дисплея и его разрешение были оптимальными, круче были только коммуникаторы с 2.4" дисплеями 240x320. Фактически все (или почти все) смартфоны Nokia на Symbian тех лет использовали одну и ту же матрицу, с чуть разной длинной шлейфа (просто где-то её переворачивали вверх-тормашками, как на N70).
ОС: Symbian 6.1
Аудиовыход: 2.5мм джек (моно)
Как видите, ни о каком GPU и речи не шло. Вся отрисовка полагалась исключительно на процессор и результат того, что даже такие крутые 3D-игры как Tony Hawks и Tomb Raider идут на N-Gage — заслуга программистов, которые оптимизировали свои рендереры для работы на 104МГц ядре! А ведь некоторые телефоны тех лет (например, Motorola) использовали отдельные 2D GPU для ускорения отрисовки интерфейса и работы с камерой — ATI Imageon! Благодаря тому, что девайс строился на смартфонной платформе, на нем можно было не только играть, но и слушать музыку, а также смотреть видео и серфить интернет. Весьма и весьма для тех лет!
Даже спустя несколько лет после выхода телефон N-Gage, сам бренд и платформа N-Gage Arena продолжила существование на флагманских смартфонах Symbian, которые уже не имели такой игровой дизайн. Одним из N-Gage 2.0 девайсов была легендарная Nokia N95, которая в плане игровой направленности была гораздо круче, поскольку в устройстве использовался GPU PowerVR MBX Lite. Да, точно такой же, как и в iPhone 2G!
❯ Как он ко мне попал?
Конечно же, рано или поздно я и сам хотел обзавестись собственной N-Gage, с чем мне помог мой читатель, причём всё как я люблю: девайс был полурабочим и требовал некоторого ремонта. Более года назад мне написал подписчик на DTF с никнеймом «Improved white bonkle» и предложил заслать N-Gage QD и ещё одну плату под ремонт с некоторыми аппаратными проблемами: первая плата висела на белом экране, а вторая просто висела на логотипе Nokia без подсветки экрана. Помимо N-Gage, читатель положил «толстую» зарядку и флэшку на 1Гб, за что ему огромное спасибо.
Читатель рассказывал, что девайс он покупал у некого коллекционера «гаг» в России и довольно много играл на ней в эксклюзивные игры для данной платформы. После поломки устройства, девайс лежал у него какое-то время, пока он не заметил мои статьи и не решил заслать устройство под ремонт в хорошие руки. :) Ну что-ж, давайте оживим девайс!
❯ Ремонтируем устройство
Я не зря отметил то, что девайс подарили мне более года назад. Мне удалось сразу продиагностировать N-Gage и обнаружить неисправности, однако фактически отремонтировать устройство у меня не вышло: в то время я откровенно «бомжевал» и у меня даже более-менее адекватной паяльной станции не было. Дабы было понятно: тогда я перепаял коннектор АКБ, сейчас я восстановил BTEMP. На данный момент мне материально активно помогаете вы, мои читатели, поэтому за год я смог обустроить небольшое рабочее место, пригодное для проведения большинства ремонтных работ.
Разбирается девайс очень просто, как и большинство телефонов Nokia тех лет: снимается передняя часть корпуса (панелька), откручиваются винты, снимается пластиковая часть с клавиатурой, дисплей и затем плата из задней части корпуса. Кстати, панельки очень часто любили менять для придания свежего вида устройству: эдакие скины тех лет. :)
Обратите внимание на то, что некоторые детские болячки пользователь и сам мог отремонтировать. Не работает разъём ЗУ, наушники, вибромотор или динамик? Пошёл, купил за 10 рублей на ближайшем радиорынке и сам поменял! Вот уж настоящий right to repair. :)
Визуально осмотрев плату, я пришёл к выводу, что плата скорее всего не копанная китайцами: компаунд UPP'а (процессор) и Mjoelner (радиотракт) был не тронут, флэша с виду тоже в норме, все элементы стояли ровно. Однако около коннектора аккумулятора, я обнаружил следы канифоли: кто-то явно вручную перепаивал коннектор АКБ. Спросив у читателя, я получил утвердительный ответ: он действительно пытался перепаять коннектор аккумулятора с помощью советского паяльника.
Но почему же тогда устройство виснет на заставке Nokia без подсветки? Давайте взглянем на схему:
У коннектора АКБ три контакта: плюс питания, масса и BSI, который уходит напрямую в UEM (контроллер питания). Смартфоны Nokia на платформе WD2 были очень капризны к сопротивлению на BSI и UEM отказывался давать разрешение на старт при установке несовместимого аккумулятора. Казалось бы, BL-4C, BL-5C и BL-5CB по размерам почти одинаковые, но имеют разное сопротивление на BSI.
Однако даже при установке совместимого АКБ, устройство отказывалось включаться. Вывод простой: линия BSI находится в обрыве. Первым делом я сдул коннектор АКБ, перепаял его и девайс наконец-то нормально включился… ненадолго. Произошло падение в «белый экран», как и вторая плата. Причиной этому стала «стекляшка» рядом — токовый датчик LM3820: вероятно, в ходе ремонта коннектора, читатель умудрился неравномерно поплавить шары под стекляхой, из-за чего контакт нарушился. Стекляха среагировала на прогрев с флюсом и девайс снова включился…
Коннектор АКБ уже был, в скажем так, не идеальном состоянии, поэтому для точного исключения влияния коннектора я залудил контакты. Я люблю, когда платы не уколхожены, а весь ремонт близок к заводскому - поэтому коннектор "за кадром" будет заменен на норм.
Но не заряжался. :( При попытке зарядить девайс, система показывала сообщение «не заряжается» и потребление падало в ноль. Ремонт я проводил ещё тогда, когда у меня и станции нормальной не было, из-за чего я умудрился сколоть NTC-термистор прямо под коннектором аккумулятора (обычно он расположен либо с обратной стороны коннектора АКБ, либо с обратной стороны платы), прямо с пятачками.
Я знаю, что иногда меня читают опытные мастера с многолетним опытом, которые уже тянутся написать «Рукожоп! Мы в нулевых в ещё более тяжелых условиях умудрялись мобилки ремонтировать, а ты вон люкей себе не смог купить!». Но я лично считаю, что если косяк нормально исправлен, даже через год — то это не косяк. :) Поэтому лезем в схему и смотрим, куда у нас уходит BTEMP:
BTEMP идёт в UEM через обвязку в виде конденсатора C230, который расположен с обратной стороны платы, около КП. Найти его можно в Component finder'e, который можно найти в самом конце почти любой схемы на телефоны Nokia:
Подпаиваемся, включаем и девайс и… всё снова работает, в том числе и зарядка. :) На этом ремонт устройства закончен.
Отдельное слово хотелось бы сказать о дисплеях: для N-Gage обычно их принято считать достаточно редкими. Однако есть нюанс: практически все смартфоны Nokia на платформе WD2 (и пару на BB5 — например, N70) использовали одну и ту же матрицу с параллельным интерфейсом. Различия были лишь в форме шлейфа. В N70, например, этот дисплей ставился «перевернутым», однако длины шлейфа не хватало для того, чтобы поставить дисплей в N-Gage. Тем не менее, теоретически можно попробовать поставить куда менее редкий дисплей от 6630.
В процессе подготовки материала и изучения схемы, я вывел небольшой мануал по базовой диагностике N-Gage и любого телефона Nokia на платформе WD2:
Белый экран, есть звук включения и реакция кнопок. Чаще всего виноват EMIF-фильтр COM01F2: хрупкая «стекляха», которая повреждается при попадании влаги или падении устройства. Реже — обрыв сигнальных линий дисплея до коннектора дисплея, а то и отвал омапа.
Белый экран, ноль реакции: из-за бага в первых версиях прошивки, при полном заполнении внутренней памяти девайс виснул на белом экране. Реже — проблемы с питанием на OMAP, отвал процессора. Из-за попадания воды может пострадать токовый датчик.
Нет подсветки, лого Nokia: обрыв BSI или неподходящий аккумулятор.
Нет реакции на кнопку включения: замерить напряжение на входе кнопки включения (должно быть близко к VBAT), дальше смотреть в сторону UEM и его обвязки. На некоторых смартфонах Nokia (уже чуть более поздней платформы — например N70) кнопка включения идёт через EMIF-фильтр вместе с клавиатурой, из-за чего убитая стекляха может стать причиной отсутствия напряжения на PWRON.
Нет подсветки, есть изображение: проверить напряжение на C130 — если там есть 13.3В, значит бустер работает нормально. Если напряжение более 13В, то нет фидбека (т. е. катода с подсветки на самом дисплее), необходимо проверить обрыв на коннекторе дисплея. Проверить драйвер подсветки D130, при необходимости заменить (подходит с многих Nokia тех лет, иногда кустарно заменяют на драйверы подсветки с других телефонов).
❯ Знакомимся с девайсом поближе
Как я уже говорил выше, читатель задарил мне ещё и флэшку, на которой было установлено куча игр: как портов игр с других платформ, так и нативных «дампов» с картриджей, а также эмуляторов. Было ли во что поиграть на N-Gage? Давайте узнаем:
Именно на платформу N-Gage вышло не так уж и много игр: всего около 50. Однако среди них всё равно найдется во что поиграть: многие известные издатели решили рискнуть и разработать игры по собственным вселенным для N-Gage. В каких-то случаях это были порты с других платформ (например, Asphalt 2 с PSP, хотя это не совсем верно, поскольку Asphalt изначально мобильная игра), в каких-то уникальные игры, дополняющие ЛОР той или иной вселенной (например, TES Travellers). Не забываем про игры для обычных Symbian-смартфонов, порты и J2ME игры: таким образом, библиотека получается весьма и весьма обширной!
Ну и не стоит забывать и о эмуляторах! С играми для NES и SMD, игровой потенциал N-Gage увеличивается в разы. Ещё бы дисплей был чуть-чуть побольше и хотя-бы классический TN, а не немного блеклый CSTN и было бы вообще идеально.
Помимо игр, на многих Symbian-смартфонах стояли некоторые приложения, которые были must-have для тех лет: например, файловый менеджер X-Plore с диспетчером задач, а также сторонний плеер LCG JukeBox (нормальный плеер с плейлистами появился только в Symbian 8). Иногда диспетчер задач не спасал и девайс приходилось перезагружать.
Давайте же глянем на игры подробнее. Как я уже говорил ранее, все 3D-игры были софтварными: т. е. вся трансформация, обработка освещения и растеризация треугольников с текстурированием и перспективной коррекцией (если была) происходила исключительно на ЦПУ. Поскольку FPU в процессоре не было, использовались fixed-point числа.
Переходим к гоночкам. Тут у нас аж две части Asphalt, ещё тогда, когда серия не стала донатным «фритуплеем». Asphalt 2 весьма занимательная игра с оптимальной производительностью, кое-где конечно бывают просадки, но в целом более чем играбельно. Как это игралось в нулевых? Сравните скриншоты с j2me-версией, которая напоминает гоночные 2.5D игры с SMD и NES (при этом, в ней есть 3D-элементы и игра использует M3G) и версию для Symbian/PSP/NDS, думаю тут всё итак будет понятно:
Однако большинство читателей наверняка интересуют игры в известных вселенных. Взять, например, полноценный порт первой Tomb Raider. Насколько я понимаю, оригинальная TR славилась тем, что изначально разрабатывалась с расчетом на легкое портирование между разными платформами (да чего уж там говорить, игру отреверсили и переписали с нуля как минимум два раза!). Первый Pentium неплохо тянул TR в софтваре, а N-Gage справляется явно не хуже:
Не забываем и про 2D! В некоторых телефонах Motorola, Siemens и Samsung использовались внешние 2D видеоускорители ATI Imageon. В их задачи входила обработка изображения с камеры, функции контроллера дисплея, а также аппаратное ускорение некоторых 2D-операцией: блиттинг, отрисовка линий, прямоугольников и возможно ещё каких-то примитивов. Однако N-Gage, даже без помощи аппаратного блиттинга был способен выдавать приемлемый FPS и уровень графики в 2D играх. Например, в Sonic, где у нас есть параллаксовые фоны с покадровой анимацией:
Ну и нельзя не вспомнить про уникальную игру на N-Gage: TES Travels Shadowkey, которая была разработана специально для N-Gage и поиграть в неё можно только на оригинальном N-Gage, пропатченном Symbian-девайсе или EKA2L1. Вообще, это полноценная RPG от первого лица, расширяющая лор игры в Хаммерфелле и как минимум из-за этого она достойна к ознакомлению. Игра стилистически заметно напоминает Morrowind, графика близка по уровню к PS2. FPS, конечно, колеблется в районе 10, из-за чего игру можно считать пошаговой… но тем не менее, полноценная FPS RPG на мобилках — это многого стоит!
Есть также примеры отличной графики и… очень низкой производительности. Если в TES ещё можно попробовать поиграть в пошаговой манере, то как насчет шутера от первого лица в 5-6 кадров? Речь, конечно же, о Call of Duty. Игра получилась очень красочной (с трушными полигональными ландшафтами и кучей пропов), но крайне медленно работало на желез N-Gage.
❯ А как насчёт хоумбрю?
С разработкой своих приложений под N-Gage дела обстоят сложно. С одной стороны, в Symbian 6.1 ещё не было сертификатов, необходимости делать джейлбрейк и менять дату в устройстве. С другой стороны, для разработки под N-Gage требуется установка оригинального SDK для S60: приложения скомпилированные с помощью более свежих версий SDK работать не будут! Ни о каком Qt и речи не идёт и даже Carbide окажется слишком свежим для нашего устройства. Оригинальный SDK можно скачать здесь.
Кроме того, SDK использует весьма своеобразную систему сборки, написанную на Perl, которая поддерживает только древнюю версию ActiveState Perl 5.6.1 аж от 2001 года и не работает на Windows 7/8/10! С отладкой на реальном устройстве тоже возникнут проблемы: для этого необходим относительно редкий FBus-кабель (который устанавливается вместо аккумулятора и подключается к ПК через RS232-преобразователь), либо использование программатора а-ля UFS HWK. Хотите отлаживать игру на ПК? Тут есть симулятор, прямо как при разработке под iOS: однако этих симуляторов целых два (для Visual C++ 98 и CodeWarrior) и с каждым возникают проблемы при сборке (то линкер крашнется, то разработчики забудут положить часть реализации системных либ для разных симуляторов в разные версии SDK). Хотите разрабатывать игры? С симулятором об этом можно забыть — отрисовка слишком медленная. Готовьтесь писать кроссплатформенный рантайм, который под Windows будет использовать GDI, а под Symbian нативное API для графики! Программа крашнулась на реальном устройстве и инструментов для отладки у вас нет? Ничего подробнее «приложение остановлено» вы не получите!
Ну а вишенкой на торте станет весьма своеобразный сабсет C++, который используется для написания приложений. Сама система полностью построена по принципам ООП, однако ради уменьшения размера выходного кода была полностью убрана поддержка исключений: предполагается, что программист будет вручную помещать объекты на стек (для Stack unwinding'а), полностью убран RAII как концепция с введением NewL и ConstructL, где L — означает Leave (т.е исключение может выбросить только функция-фабрика, а не фактический конструктор) и кодов ошибок, а также полное отсутствие поддержки глобальных переменных (но есть частичная поддержка констант — из преинициализированных данных, судя по всему, поддерживаются только строковые литералы). Да, никакого .data и .bss, что серьёзно усложняет портирование существующих приложений под Symbian. Спасибо что есть пакет для совместимости с POSIX и реализовали часть stdlib.
Почему нет глобальных переменных?
Приложения в Symbian — это, по сути, dll-библиотеки, с которыми общается UI-фреймворк. Ради сохранения памяти, в Symbian решили сделать все загружаемые библиотеки доступными для любых процессов в системе. Поэтому Symbian и не позволяет библиотекам иметь собственную статическую память, зато можно свободно использовать динамический аллокатор. У exe таких ограничений нет, однако там свои сложности при взаимодействии с системным API. Тем не менее, с Quake поступили своеобразным грязным хаком: Приложение в меню лишь «значок», который фактически запускает соответствующий exe-файл на флэшке!
Дело улучшает кастомный SDK для хоумбрю от энтузиаста из Германии. Он портировал SDL2, Lua и адаптировал тулчейн для работы в современных системах. Но лично для меня это не трушно — нужно использовать оригинальный SDK. :)
В целом — это одно из объяснений того, почему N-Gage стала относительно провальной как платформа для игр. Конечно в своё время был жив форум разработчиков Nokia, где были как официальные сэмплы от Nokia, так и мануалы от других разработчиков, однако базовые косяки при проектировании архитектуры платформы портили всю малину. Чего уж стоит обратная совместимость: для быстрой отрисовки графики предполагалось рисовать картинку в обход графического сервера, напрямую получая указатель на фреймбуфер. В начале фреймбуфера лежала структура с описанием разных пиксельформатов, которые были отнюдь нестандартными: 12-битный, 16-битный, 18-битный. Из-за этого, игры для старых версий Symbian могли давать артефакты на 9.x, например.
Написание полноценной, пусть и небольшой игры — материал для отдельной статьи. Есть идея написать кроссплатформенную игрушку, которая работала под разными платформами кнопочных девайсов: от Motorola ROKR на Linux и китайских клонах Nokia (E71 все помнят?), до эльфов на Siemens'ах и Motorola E398. Таким образом, мы рассмотрим особенности разработки под каждую платформу (например, на моторах был 2D-ускоритель ATI Imageon).
❯ Заключение
Вот таким был легендарный N-Gage. Девайс, конечно, действительно весьма своеобразный. С одной стороны это гениальное решение: взять смартфонную платформу и сделать на её базе игровую консоль. С другой стороны, с разработкой игр под N-Gage, или, например, прямыми функциями телефона были свои проблемы. Девайс получился немного сыроватым, но лично я считаю, что концепция имеет право на жизнь, но пока ни у кого не получилось сделать действительно массовый девайс. По моему мнению, нужно сохранить как можно больше N-Gage живыми. Сложно даже представить сколько потенциально оживляемых плат уехало в чермет…
А вам понравился N-Gage?
P. S.: Друзья! Время от времени я пишу пост о поиске различных китайских девайсов (подделок, реплик, закосов на айфоны, самсунги, сони, HTC и т. п.) для будущих статей. Однако очень часто читатели пишут «где ж ты был месяц назад, мешок таких выбросил!», поэтому я решил в заключение каждой статьи вставлять объявление о поиске девайсов для контента. Есть желание что-то выкинуть или отправить в чермет? Даже нерабочую «невключайку» или полурабочую? А может, у этих девайсов есть шанс на более интересное существование! Смотрите в соответствующем посте, что я делаю с китайскими подделками на айфоны, самсунги, макбуки и айпады!
Понравился материал?
Полезная информация относительно ремонта?
У вас был N-Gage?
Понравился материал? У меня есть канал в Телеге, куда я публикую бэкстейдж со статей, всякие мысли и советы касательно ремонта и программирования под различные девайсы, а также вовремя публикую ссылки на свои новые статьи. 1-2 поста в день, никакого мусора!
Материал подготовлен при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю!
Думаю, многие мои читатели встречались с таким неприятным явлением, как отвал чипа. Эта поломка свойственна многим топовым и околотоповым гаджетам из нулевых: ноутбуки с «отваливающимися» видеочипами и мостами, первые ревизии Xbox 360 (три красных огня) и PlayStation 3 (жёлтый огонёк и моментальное выключение), телефоны-«ударники» и другие девайсы с достаточно горячими чипами. Недавно я листал барахолки на предмет интересных девайсов «за копейки» и наткнулся на топовый игровой ноутбук 2007 года выпуска всего за 1.000 рублей (~10$) — Toshiba <модель>, с просто дичайшими характеристиками для тех лет: GeForce GTS 7900 Go, Core Duo Txxx, 1гб DDR2 ОЗУ и аудиоподготовкой от Harman-Kardon.
Сегодня мы с вами узнаем: почему отваливаются чипы и как продлить жизнь старому топовому железу, «дунем» на видеочип, «воскресим» его на некоторое время и посмотрим, что же крутого было в топовых ноутбуках тех лет. Интересно? Тогда добро пожаловать под кат!
❯ Почему чипы «отваливаются»?
В мире производства электроники и плат есть несколько различных видов монтажа чипов на платы. Все они зависят от корпусировки того или иного элемента. Обычно, сложные микросхемы выпускаются в нескольких различных корпусах, которые отличаются маркировкой и иногда функциональностью. В современном мире принято использовать несколько самых распространенных типов корпусов:
DIP— один из самых старых и тем не менее, до сих пор распространенных видов корпусов для чипов. Для таких микросхем сверлятся отверстия в плате, а затем чипы вставляются в отверстия и припаиваются, благодаря чему чип надежно держится на плате. Плюсов у такого способа довольно много: удобство пайки, возможность лёгкой установки чипа в сокет и быстрой его замены (привет Arduino и чипы памяти с BIOS на старых материнских платах), большая надежность соединения, и вероятно, простота производства. Минусов у такого способа тоже хватает: невозможность сделать микросхему с очень большим количеством пинов, громоздкость чипа, без фена чипы с большим количеством ножек выпаять проблематично. Известные примеры: сдвиговые регистры, МК AVR, Z80, MOS6502.
QFP/QFN/SOIC— современный способ монтажа чипов с большим количество пинов на плату. По принципу все они похожи: по разным сторонам микросхемы есть выводы, которыми можно припаять чип к плате. Однако у QFP ножки «торчат» наружу, что даёт возможность легко припаять их к плате, а у QFN контакты спрятаны под пузом самого чипа, из-за чего их можно припаять только феном (если чип достаточно мал — можно попробовать паяльником). Плюсы: надежность пайки, относительная простота монтажа и демонтажа (дунул и чип слетел). Минусы: для таких чипов практически нет сокетов (на самом деле есть, но особо никакой унификации нет — чаще всего сокеты можно встретить в материнских платах и программаторах у ремонтников). SOIC немного другой тип монтажа, поскольку там ножки выводятся только по бокам чипа (как у DIP), но я не стал выносить его в отдельный типаж.
LGA/PGA/SMT— кристалл или кристаллы (пример — процессорное ядро и отдельно кэш-память на старых процессорах) распаяны на специальной небольшой плате, которая называютсяподложкой. Такие микросхемы обычно предназначаются для установки в сокет (процессоры), либо для пайки платы на плату (SIM800L). Даташит на SIM800C называет свою корпусировку какSMT, поэтому я отнесу его и различные системы на модуле («процессорные» платы с ОЗУ и ПЗУ) к LGA. Один раз я видел PGA-процессор AMD Geode, который запаивали напрямую штырями в плату — но может, меня обманывает память.
BGA— основной тип корпуса для сложных и компактных микросхем таких как SoC или видеочипы. Его суть проста: на плате и на нижней стороны чипа есть маленькие пятачки круглой формы (их размер отличается в зависимости от числа пинов, но стандартизирован), благодаря которым микросхема припаивается к плате. Такой корпус позволяет компактно вывести довольно большое количество пинов — например, SoC MediaTek MT6572 поставляется в корпусе аж с 428-шариками! С завода чипы приходят с уже накатанными шарами, в то время как работнику или машине остаётся их только припаять на плату. Несмотря на большое количество крошечных пинов, при наличии сноровки и должном оборудовании, пайка микросхем очень простая: физика всё сделает за вас и сама «притянет» чип к нужным пятачкам на плате. Это один из самых распространенных корпусов для микросхем и один из самых проблемных. Но почему? Давайте разбираться!
Отвал BGA-чипов далеко не всегда связан с термическим воздействием, как принято считать в широких кругах (от чего и идут советы по типу «погрей видяху в духовке»). Шарики достаточно сильно подвержены влиянию множества внешних факторов: попадание воды — в таком случае, шарики окисляются и со временем могут отгнить вместе с пятачками, падениям — такие устройства называются «ударниками» и шары могут дать микротрещину, что уже может сказаться на нестабильной работе устройства, и в немалой степени — термическому воздействию. Причём здесь мнение делится на два лагеря и сильно зависит от самого устройства.
Отвалы на смартфонах/планшетах в основном являются следствием неудачного падения и лечатся перекаткой уже установленного процессора, иногда — заменой на точно такой же «донорский» и с идентичной маркировкой (да, среди SoC бывают свои «подверсии»). Реже бывает срывает пятачки — тогда опытные мастера ковыряют плату и ставят перемычки вместо отвалившихся шаров (моё почтение вам!). В последнее время замена отдельных чипов на мобильных устройствах сильно затруднена: у девайсов есть жёсткая привязка между ID-процессора (прожжен на заводе в SoC), ID-процессора, записанного в флэш-памяти устройства (в специальном RPMB-разделе, доступный только для чтения, используется для Secure Boot, просчета ключей, шифрования и т. п.) и привязки к модему (насчет Android-устройств точно не могу сказать, но у iPhone такая привязка есть ещё с начала 10х годов: в один момент, после очередного апдейта iOS, многие девайсы с замененной NAND или процессором без замены всех трех чипов, висели на «сбое активации» — и в официальном сервисе такой аппарат не принимали), из-за чего при замене процессора или флэш памяти, придётся менять вообще всю пару на оный с донорского аппарата (а в случае iPhone — еще и не привязанный к iCloud).
Нормальные мастера обычно именно перекатывают чипы, т. е. снимают старые шары и накатывают с помощью трафарета новые, поскольку прогрев может поднять устройство, но это не ремонт, а лишь диагностика — такое устройство может в любой момент «отвалиться». Правда, есть и исключения.
Другой вопрос — отвалы чипов на ноутбуках и десктопах. На десктопных материнских платах отвал — не очень частое явление, поскольку отваливались обычно «горячие» северные мосты по типу nForce (которые славились довольно неплохими интегрированными GPU — тут уж попробуй не нагрейся при очень слабеньком пассивном охлаждении). Сейчас «северник» переместился в процессор, поэтому свежим десктопным материнкам это почти не грозит, однако другое дело — ноутбуки.
Система охлаждения на ноутбуках частенько подразумевает расположение ЦПУ и чипсета (а иногда и GPU) на одной теплотрубке, из-за чего тепло отводится заметно менее эффективно. А особенно ситуация плохая на тех девайсах, которые никто не чистит. И если процессор ещё может начать троттлить (занижать частоты) для того, чтобы понизить температуру ниже определенного порога — то что делать чипсету? После пары лет работы в таком режиме, девайсы внезапно начинают виснуть посередине работы, перезагружаться, выключаться или выдавать непонятные артефакты. Тем же самым когда-то страдала печально известная первая ревизия Xbox 360 — Xenon, которая выдавала три красных огня. Не обошла проблема и PS3 — вспоминаем желтые глазки и выключение устройства.
Даже если взять пример с Xbox 360, когда игрок нёс устройство в неофициальный СЦ, ему перекатывали горячий GPU от ATI (отваливался именно он) и снова припаивали к плате, включили — устройство работает и выдали обратно игроку. Игрок приходит довольный домой, играет день, месяц или даже год и… сталкивается с той же самой проблемой! Снова три красных огня, хотя девайс вроде бы чистый, шуба пыли из него не торчит, а при разборке оказывается, что система охлаждения визуально в норме и кулер работает… в чём же тогда дело?
Всё дело в том, как припаивается кристалл процессора или GPU к плате-подложке. По сути, подложка может быть любой, хоть LGA, хоть BGA: китайские умельцы как-то приноровились делать десктопные подложки для мобильных процессоров в BGA-корпусах. Но сам кристалл припаивается к подложке с помощью точно таких же BGA-шариков, как и подложка к плате, только гораздо меньших размеров. Перекатать такие шары доманевозможно, это можно сделать только в заводских условиях. Но поскольку сами кристаллы залиты компаундом (как раз таки с целью предотвратить внешнее влияние, в том числе и термическое — иначе кристаллы сдувались бы только так), а шарики достаточно маленькие — при прогреве устройства феном, в духовке (популярный когда-то метод), или даже перекатке шаровна подложке, из-за термического воздействия контакт между кристаллом и подложкой на время восстанавливался. Однако поскольку GPU Xbox 360, который я привожу в пример, очень и очень горячий сам по себе, вне зависимости от того, как хорошо от него отводится тепло, со временем контакт кристалла с подложкой снова нарушался и устройство переставало работать…
Происходило это по причине выбора неправильного типа припоя: в целях сохранения природы, использовался не совсем верный состав. Однако зная о проблеме, производители продолжали использовать его примерно до середины 2010-х годов: насколько мне известно, GeForce 1xxx серии и выше не страдают отвалами GPU вообще (но там своих болячек хватает — как минимум, те же банки памяти). Почему так происходило? Вероятнее всего, это изначально закладывание ресурса в технику. И если бюджетные ноутбуки со встроенной графикой и Celeron'ами от этого особо не страдали (их до сих пор очень много на юлито, живеньких и вполне рабочих), то топовые и дорогие устройства с горячими видеочипами отваливались только так…
Прогрев — это исключительно диагностический способ, им можно пользоваться либо в домашних условиях «для себя», либо для того, чтобы выявить неисправность одного из элементов устройства. Брать деньги за прогрев — прямой обман, но если делать просто «для себя», ради того, чтобы немного продлить жизнь крутому девайсу из прошлого — почему бы и нет? Предлагаю в практической части нашей статьи глянуть на топовый ноутбук 2007 года отToshiba, который я купил всего за 1.000 рублей (~10$). Девайс сам по себе очень крут, однако страдал отвалом GPU, который мы на время «вылечим»!
❯ Практическая часть статьи
Сегодняшнего подопытного продавала женщина на запчасти. Состояние было неизвестным: я не спрашивал её ни о симптомах поломки, ни о том, включается ли ноутбук вообще. Я списался с продавцом, договорился об условиях доставке и зарезервировал девайс себе. Через несколько дней ноутбук наконец-то приехал ко мне и я решив не медлить, сразу полез его диагностировать:
Внешне девайс очень симпатичный и сейчас — самое время его включить! Единственный нюанс: проприетарный трапецевидный разъем зарядки. Не беда: до этого я брал другой тошибовский ноутбук за… 300 рублей, который тоже оказался вполне живым, но у него были сломаны петли ( к буку за 3 доллара шёл и родной БП, который уже кто-то ремонтировал на скрутках, но он всё ещё оставался рабочим).
Включаем девайс, прощелкиваем нумпадом и видим, что реакция на него есть, однако изображения нет! Это значит, что ноутбук нормально проходит POST и висит на «CMOS Error, F1 to Continue», однако отсутствие картинки было для меня первым звоночком винить видеочип. Поскольку POST ноутбук проходил, то и реагировал на хоткей смены матрица/VGA: подключаем внешний монитор и видим…
Да, это самый классический отвал GPU. Ну а что вы хотели, GeForce 7900 это вам не шутки! Поскольку это ноутбук с дискреткой 7 серии, ни о каком UMA и речи не идет: отключить GPU и направить вывод на встроенный адаптер не получится. Вернее теоретическая возможность то есть, но линии LVDS/VGA идут с GPU, а не с хаба, как это происходит в современных ноутбуках. Девайс то может и включится, но никакой картинки вообще не будет — если устройство вообще пройдет POST.
Самое время разобрать красавца. Делается это не особо сложно: классическая разборка «с клавиатуры». Для обслуживания системы охлаждения придётся разбирать ноутбук полностью (в том числе снимать матрицу), но никаких особых проблем с этим не возникает: девайс хорошо продуман. При разборке выяснялась причина отсутствия изо на LVDS — матрицу банально отключили. Девайс явно обслуживали до меня и чистили, видимо в надежде что всё «оживет». А может и грели уже, кто его знает? :)
Да, «охлад» здесь и правда довольно серьезный: круче я видел только в ноутбуке с дискреткой ATI и… десктопным Pentium 4!
На ноутбуках тех лет частенько практиковались по настоящему съемные видеокарты. Помимо стандарта MXM (его сейчас вроде только Clevo как-то поддерживает), который предусматривает замену видеокарты в ноутбуке, некоторые вендоры придумывали свои коннекторы а-ля PCI-E. Наш девайс как раз из таких: видеокарту, при желании, можно было заменить на идентичную (возможно и какие-то другие от младших «тошиб» подходили, но мне это неизвестно).
Снимаем массивную систему охлаждения, которая отводит тепло и от GPU, и от чипов памяти и приступаем к прогреву. Для прогрева подойдет фен от паяльной станции, или даже регулируемый строительный фен (с ним осторожнее, есть шанс угреть чип). Для наглядности «дриставрации», я буду пользоваться именно строительным «интерсколом». Ставим температуру ~250 градусов (в случае строительных фенов — это погода на луне или попугаи, ну или средний режим) и осторожно греем кристалл по периметру. Для временного оживления чипа хватит дунуть секунд 15-30. Дольше не стоит — могут повылазить шары. Никаких утюгов и духовок — это кощунство!
Подсобираем ноутбук и включаем его. Ура, в биосе изображение есть и на первый взгляд всё нормально. Однако, после такой «дриставрации», проблемы могут вылезти где угодно: ошибка 43, артефакты в 3D-режиме, самопроизвольные ребуты и зависания системы. Самое время накатить систему и проверить это.
И таки да, они вылезли практически сразу, причём совершенно с неожиданной стороны. Девайс начал самопроизвольно отключаться в определенные моменты времени (обычно при старте Windows и игр), причём вне зависимости от подключения БП (отметаем версию, что АКБ не держит нагрузку) и заряда аккумулятора (отметаем, что не хватает мощности БП), а температуры судя по датчикам — в норме. Вероятнее всего, проблема в питальниках на GPU/CPU.
К сожалению, нормальные тесты при таких условиях сделать не получится — девайс нужно диагностировать дальше, но делать это с отвальным видеочипом такое себе. Но Proof of Concept есть: многие чипы вполне реагируют на прогрев и могут даже поработать какое-то время. Надолго ли?
❯ Заключение
Данный материал писался в эдаком «научпоп» стиле. Для опытных ремонтников, написанный текст отнюдь не станет каким-то откровением, но полагаю, было всё же интересно почитать о том, почему их любимые девайсы из нулевых «помирают».
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, , чтобы не пропускать новые статьи каждую неделю!
Размер экрана — краеугольный камень мира современных смартфонов. Кто-то считает, что дисплеи должны становиться только больше, а рамки — меньше, кто-то любит «средние» дисплеи диагональю в 5+", ну а кто-то остаётся ярым поклонником и приверженцем компактных смартфонов с крошечными дисплейчиками. В наше время, купить новый смартфон с относительно небольшим дисплеем за приемлемые деньги почти нереально — самые бюджетные модели будут слишком тормозными для современного пользователя. Некоторое время назад, я купил себе бюджетный крошечный смартфон 2012 года выпуска — Samsung Galaxy Pocket, причём всего за 100 рублей. Конечно же мне захотелось довести его до ума — а доводить пришлось руками и навыками прожженного программера! Какой смартфон можно получить за 100 рублей? Читаем в статье!
Минутка предыстории
С самого появления смартфонов на рынке, весь мир шагал к тотальному увеличению дисплеев и уменьшению рамок. В какой-то момент, большие смартфоны даже получили отдельное название — падфоны или смартпэды. Такой ход событий было не трудно предугадать: ведь производители дисплейных матриц осваивали всё более и более высокие разрешения и предлагали больше вариантов производителям смартфонов.
Однако несмотря на всеобщее засилие больших «лопат», в мире всё ещё оставались поклонники маленьких и компактных телефонов, которыми очень удобно пользоваться одной рукой. Сейчас подобные устройства представляют только небольшие бренды, известные достаточно в узких кругах — в основном, их можно купить на маркетплейсах, в обычных салонах связи их не найти. Мне известно о нескольких подобных устройствах, которые сейчас присутствуют на рынке. Первый из них «закос» под iPhone — Soyes XS11:
Но тут уж, если честно, хочется назвать такой смартфон не просто компактным, а совсем малюсеньким. На нём вполне удобно выполнять задачи звонилки, но совсем неудобно набирать текст — поэтому под наши задачи, он не особо подходит. Кроме того, эти девайсы работают на базе бюджетного смартфонного железа 6-7 летней давности, поэтому их производительность будет достаточно невысокой по меркам современного пользователя. Конечно же есть и более серьёзные варианты — например, компания Unihertz (да, тот самый продолжатель идей BlackBerry) делает смартфоны Jelly 2: дисплей с диагональю 3", Helio P61 под капотом и Android 11 на борту. Вот только цена, мягко говоря, кусачая — 18 тысяч рублей на момент написания статьи. Это слишком дорого!
Но если душа прямо таки лежит к компактным смартфонам, почему бы не обратиться к рынку Б/У устройств и не присмотреть что-то из… прошлого десятилетия? А вариантов ведь реально много — тут и LG Optimus L3 (3.2"), и Samsung Galaxy Pocket Neo (2.8"), Samsung Galaxy Star (3"), Samsung Galaxy Fame (3.5"), Samsung Galaxy Young. Все перечисленные девайсы стоят реально копейки — можно купить живой вариант до 400-500 рублей!
Я решил взять себе целых два смартфона: Samsung Galaxy Mini и Samsung Galaxy Pocket первого поколения. Оба достались мне в одном лоте за 2.000 рублей (с 20 телефонами) и обошлись мне по сто рублей, причём оба смартфона были рабочими! Чуть позже я докупил отдельно Galaxy Star (250 рублей), Galaxy Fame (250 рублей) и Galaxy Pocket Neo (~400 рублей) для полноты коллекции — вышло совсем недорого. Итак, что за характеристики мы получаем в смартфоне за 100 рублей:
Android: 2.3 Gingerbread.
Чипсет: Broadcom BCM21553 с одним ядром Cortex-A5 на частоте 832мгц. Видеочип: VideoCore IV, он же использовался в Raspberry Pi.
ОЗУ: 256 мегабайт (предположительно — DDR1).
Встроенная память: 3 гигабайта + слот для SD.
Дисплей: 2.8", 240x320, емкостной тачскрин.
Сеть: Поддержка 2G/3G. Об LTE и речи не идёт.
Выглядит не особо густо, да? И разрешение весьма низкое — большинство софта не запустится, а о клиентах современных сервисов и мечтать не приходится… или приходится?
Конечно же шаловливым ручкам захотелось вернуть жизнь этому миниатюрному красавцу и я решил использовать его как второй смартфон — при этом с клиентом ВК и музыкой, которые я запилил сам.
Разработка под старые версии Android
На самом деле, разработка под старые версии Android не особо отличается от современных версий системы. Кое-где приходится костылить, велосипедить и юзать AppCompat для реализации современных фишек на старых версий системы, но, будем честным, подобного и в последних версиях Android достаточно.
Даже сейчас нет никакой проблемы скачать последнюю версию Android Studio, подключить смартфон с включенной отладкой и отлаживать приложение прямо на девайсе — logcat тоже есть. Единственный нюанс — поиск драйверов и ручное закрытие приложений в таскменеджере, если вы деплоите под Android 2.x (Android Studio не умеет сам закрывать приложение, чтобы переустановить пакет).
В целом, за всё время разработки под старые устройства, я пришёл к следующим выводам:
Поскольку большинство устройств имеет одно ядро, для плавности интерфейса нужно минимизировать любую работу в фоне.
Взаимодействие с современными веб-сервисами может быть осложнено из-за отсутствия поддержки TLS1.2 и устаревших сертификатов (проверка сертификатов легко обходится специальным костылем, а вот TLS — нет).
У Android до 3.0 вся отрисовка интерфейса программная и она опять же, будет сказываться на скорости работы фоновых служб. Чем менее интерфейс комплексный, тем лучше.
Пушей нет — да, вообще. Однако это ничуть не помешает нам сделать уведомления практически в реальном времени с помощью… очередного костыля!
Допиливаем ВК
Я уже писал клиент ВК в рамках одной из прошлых статей. Теперь нам нужно довести его до ума — подогнать под разрешение экрана и переработать интерфейс для большей удобности, а также добавить недостающие разделы — я тот ещё любитель полистать мемчики, сидя в автобусе.
Честно сказать, вся концепция интерфейса требовала полной переработки — боковое меню банально очень неудобно использовать на подобных устройствах из-за малых размеров каждой строчки. Поэтому я решил не изобретать велосипед, а обратился к дизайнерам Apple и первоисточнику: официальному клиенту ВК для iOS 6, родом из 2012 года!
Приложение для Android выглядело +- также в те годы. Видите вкладки с разделами снизу? Они то нам и нужны — это самый удобный способ навигации на таких смартфонах! Накидав макет в layout'е, я приступил к реализации:
Изначально мне хотелось, чтобы всё приложение было плавным и анимированным: для этого я обратился к фреймворку анимаций Android. Суть очень простая — это обычный интерполятор значений от a до b за определенный промежуток времени. При этом мы не можем анимировать произвольное свойство — только те, который уже реализованы в системе (переход, поворот, масштабирование, альфа-канал). Более наглядно это можно представить вот так:
Да, это всё анимация :) Получаем примерно такой результат:
Обратите внимание, что запуск большого количества анимаций будет вызывать перерисовку даже в том случае, если элемент не видно на экране — от чего у нас будут дикие тормоза! Осторожнее с этим.
После этого, я решил доработать раздел с музыкой: я все еще пользуюсь грязными хаками для получения доступа к API музыки, поскольку «левым» клиентам такой возможности не дают. Публично его расписывать не буду, поскольку это скорее всего нелегально, да и сами ребята из ВК об этом знают (но не думаю, что будут применять какие-то санкции по отношению к «маленьким» разработчикам) — но если нужно, пишите в личку, расскажу всю концепцию.
Во первых, мне хотелось добавить возможность скачивать треки на внутреннюю память/флэшку. А во вторых, мне хотелось добавить фоновое воспроизведение — до этого возможность свернуть приложение и послушать музыку уже была, однако Android мог в любой момент прибить окно с музыкой и оставить нас с носом, остаётся только реализация в виде foreground-сервиса:
В Android есть два типа служб: background (фоновые) и foreground (видимые пользователю). Первый тип служб система может прибить когда угодно — например мало памяти или экономия заряда АКБ. А вот второй тип служб система не прибивает практически никогда, поскольку они обозначают выполнение важной операции в фоне — например скачивание файла или обновление системы. Однако у них есть одно ограничение — они должны быть привязаны к собственному уведомлению, которое нельзя закрыть. В процессе реализации возникло еще пару проблем — Wakelock'и (механизм, предотвращающий уход девайса в «сон») и WiFiLock'и (тоже самое, но для WiFi).
Точно таким же способом я реализовал механизм уведомлений — как я уже говорил раньше, пушей на старых смартфонах нет вообще ни в каком виде, поэтому пришлось реализовывать свой механизм «обновления»: каждые 3-5 секунд запрашиваем список последних 5 диалогов с сервера и сравниваем с предыдущим результатом, если есть новые сообщения — создаём нотификацию (листинг слишком длинный - пришлось перезалить на pastebin):
После этого, я начал рутинную работу по реализации интерфейса для данных с сервера — паблики, друзья, профили, лента и.т.п. В некотором смысле, реализация лента весьма занимательна: вообще, для очень больших списков существуют т.н виртуализация ListView — это когда ListView отображает только видимый пользователю кусок датасета (набора данных — например, список записей на стене) и на старых версиях Android она доступна. Однако мне было интересно реализовать вариант, который потреблял бы минимальное количество ОЗУ и где я точно знал бы, когда пользователь видит тот или иной фрагмент приложения. Поэтому я реализовал… пагинацию свайпами! Вот так привет из нулевых!
Для этого я использовал GestureDetector — встроенный в систему класс для обнаружения простых жестов — свайпов и.т.п. ВК при запросе ленты отдаёт специальную метку для получения следующей страницы новостей (поскольку она может динамически меняться и нужно хранить её стейт), мы эти метки просто сохраняем и переключаемся по странницам новостей с помощью обычных свайпов вправо-влево:
Выглядит весьма забавно.
Юзабельно ли всё это на деле?
Давайте смотреть, может ли юзать такой смартфон в наши дни. Берём наш девайс в руки, логинимся и оцениваем его производительность «вхолостую».
Работает весьма шустренько, учитывая что это бюджетник 2012 года. Как насчет нашего самопального клиента ВК? Смотрим:
Работает весьма бодро. Не сказать что также плавно, как последний айфон, но и совсем плохим результат явно не назвать!
Смартфонный функционал у девайса тоже вполне ничего: 1-2 SIM (в зависимости от версии), нормальная синхронизация контактов с ПК (однако Kies вроде-бы не работает на Windows 10, но есть vcf):
Встроенный почтовый клиент продолжает работать без каких либо проблем. Однако настраивать некоторые почтовые сервисы нужно вручную и с помощью «паролей приложений» — напрямую залогинится возможности нет. В случае «покета», придется поставить стоковый клиент из Android 2.3 вручную. Мультимедийные возможности тоже радуют: встроенный плеер тачвиза мне всегда очень нравился. Есть и настройки эквалайзера.
Единственное, что откровенно подводит — браузер. Последним вариантом осталась Opera Mini 7 — она позволяет смотреть сайты, но не поддерживает динамический контент, только статику. Ну, зайти на википедию или почитать статью на Хабре хватит. Родной браузер уже не в состоянии что либо загрузить :(
Ну а в общем, производителньость смартфона весьма радует, согласитесь? Нельзя сказать, что он уж слишком тормозной — по крайней мере, современные ультрабюджетные смартфоны (до 4-5 тысяч рублей) зачастую показывают себя гораздо хуже чем и флагманы прошлых лет, и даже бюджетники!
Заключение
И всё таки, я считаю что мне удалось в каком-то смысле вдохнуть новую жизнь в старенький девайс. Если использовать подобный девайс как второй — на случай, если сел основной смартфон, то такой миниатюрный красаввчик может неождианно выручить даже в довольно сложной ситуации. Кроме того, эти смартфоны всеядны к аккумуляторам — достаточно подпаять + и — и они будут работать хоть от BL-4C.
Главная ценность Galaxy Pocket — в его компактных размерах. А поскольку по настоящему дешевых, маленьких и шустрых смартфонов становится всё меньше и меньше, то нам остаётся лишь продлять жизнь моделям прошлых лет! Есть ли в этом смысл и получил ли смартфон новую жизнь? Пишите в комментариях!
Клиент ВК можно сказать на 4pda. Там лежит самая последняя версия (для скачивания нужна регистрация на форуме). Если по каким-то причинам не хотите регистрироваться на форуме — я выложил актуальную версию в комментариях.
Это все конечно здорово, энтузиазм дело хорошее. Может с точки зрения разработчика эта система супер-пупер крутая. Но с точки зрения пользователя - это редкостное говнище. Хуже только, наверное, виста на пк (в целом под нее и подгонялось). Судя по интерфейсу и дизайну - система делалась как раз для разработчиков, мол как у нас классно, можно вот это написать, это запрограммировать, это сделать». Но для обычных пользователей это все нахер не надо. Человек хочет достать телефон из кармана, позвонить, отправить пару сообщений, посмотреть видосики и всё. И он хочет, что бы его глазам это было приятно. Виндафон этого не давал даже на 1%. В нем было хреново абсолютно всё от интерфейса до реализации структуры. Это раз. Второе:
А вы посмотрите на свой Android-смартфон сейчас. Сколько в нём ОЗУ? 4гб? 8гб? 12гб? Смущает ли вас то, что Android умудряется неприятно подтормаживать даже с такими ресурсами? А теперь вспомните Lumia 520: Snapdragon 200, 512 мегабайт оперативной памяти. Вот так она работает из коробки.
С точки зрения разработчика это полнейшая чушь и ложь. И либо ты не понимаешь как работают системы, либо пытаешься обмануть нас. С каждым годом приложения становятся сложнее и им требуется больше ресурсов. Да может где то это не оптимально. Да, может что то можно было бы лучше. Но общая тенденция это увеличение ресурсопотребления приложений из-за улучшения графики, увеличения вычислительных процессов, усложнения логики приложений. И это все равно что сравнивать первую денди и PS5. На ПСке сколько оперативки? 32? 64? 128? И все равно некоторые игры тормозят. А вот на денди Марио не тормозил! Ну это же полнейшая чушь. Это же фактический обман. Плюс сама по себе система wp это максимально сырое тесто. Хочешь хорошо - бери напильник. А людям надо что бы ты достал из коробки и сразу стало хорошо.
Вот простое объяснение того, что это система говно и к нее нет и никогда не было будущего. Друг, это мертвая система которая никогда не будет воскрешена. Она убогая и неприятная (имхо). И яблоки снискали такую популярность всего лишь по одной причине - они дали людям то, что им нужно - красоту и простоту. К счастью они нашли ровно тот ключик который был нужен. А все вот эти архаизмы типа wp давно уже умерли и никогда не воскреснут. А ты сейчас занимаешься некрофилией. Без обид, но по фактам.