Как создать swap файл на андроид
Swapper for ROOT
версия: 2.0.3
Последнее обновление программы в шапке: 11.07.2016

Для функционирования программы необходимы права root пользователя.
Краткое описание:
Создание swap-раздела.
Описание:
Требования: Android >= 1.6, ROOT
Небольшая программа, создающая swap-раздел для увеличения оперативной памяти.
Вообще не требует создания раздела типа linux-swap (использует один из имеющихся разделов)
Возможности:
Выбрать расположение swap-файла (FAT или EXT раздел на SD-карте)
Выбрать размер swap’a
Добавить активацию swap в автозагрузку (или убрать)
Чтобы проверить, что swap создается, необходимо запустить в терминале команду free
Galaxy don’t work
Сообщение отредактировал vadeus — 11.07.16, 21:09
Включи allow debugging в настройках тела.
Добавлено 11.04.2010, 12:50:
zeleboba,
первое- root права обязятельны.
к примеру хотим своп на 128 мегабайт
— если карта памяти поделена на fat и ext ( у меня ext 512 метров и 3500 на fat) в программе ставим галку на "active swap on boot" (активация при старте), далее выбираем в каком разделе карты камяти будет хранитца свап — sd card ext или sd card fat (ставим EXT), дажее выбираем размер свапа — в нашем случае 128 метров. внизу слева тапаем "save", подтверждаем доступ root, перезагрузка. всё.
— если карта памяти не поделена на разделы а имеет только fat — выбираем в настройках программы "sd card fat", остальное всё также.
как проверить что мы сделали? — из шапки "Чтобы проверить, что swap создается, необходимо запустить в терминале команду free". терминал ставим к примеру от этот.
набираем free, смотрим.
добавил — также как выше писал Auxx, — Включи "allow debugging" (отладка usb) в настройках тела (настройка — приложения — разработка)
ksafan666, — работа сабжа не зависит от железа или версии андроида, при соблюдении указанных правил. имхо.
..также про скорости и бенчмарки — доступ к свапу медленнее чем доступ в оперативке. это азбука. зато экономия места в ram для доступа других приложений. по скрину — около 25 метров.

Сообщение отредактировал SmaLL_stv — 19.04.10, 13:28
Она не поддерживает создание файла в FAT-е. Если выделить раздел, то всё ок, конечно же.
Нету, но прикольно, разве нет? Вот тут подробней на тему того, что свап только губит производительность.
Как создать swap файл на андроид
![]()
![]()
Сегодня у нас приложение, которое поможет вам разгрузить вашу оперативную память, а также, в некоторых случаях, оптимизировать работу и ускорить ваше Андроид устройство, что будет полезно при многозадачности, при играх и если у вас просто мало оперативной памяти.
Для работы программы необходимы права суперпользователя. Помимо всего, необходим busybox. Скачать можно будет из Play-маркета, и ,как вы понимаете, поддержка создание swap раздела ядром вашего Андроид устройства. Для того, чтобы проверить, поддерживается ли ядро на создание swap -раздела, необходимо установить программу Meoryinfo&SwapCheck. Установив данную программку, вы можете протестировать — нажать Start Ramexpander test here и дождаться , пока программа отработает и скажет вам, можно ли создавать swap, и поддерживает ли ядро. Если да, то
- Выбираете подраздел, на котором вы будете создавать swap , и нажимаете “создать swap -файл”.
- Дожидаетесь, пока swap -раздел будет создан, дальше идет акивация swap . Лучше не трогать во время данной процедуры ваш смартфон.
- Нажимаете Tap for result. Если у вас появилось надпись Test finished и Congratulations — вы можете переходить к следующим действиям, и данную программку можно удалить.
Запускаем саму программу Ramexpander. При первом запуске вам необходимо нажать оптимальное значение, и дождаться, пока программа просчитает настройки и выберет оптимальное значение для вашего смартфона. Тут опять-таки, выбираем раздел, где мы будем создавать swap. И дожидаемся, пока пройдет сам процесс. Во время работы программы лучше не трогать смартфон, и дождаться, пока весь процесс пройдет от начала и до конца.
Дождались загрузки, и теперь по пунктам.
Во-первых, если swap раздел успешно создан, у вас появится заполненная полоска virtual memory.
- Ram — это оперативная память вашего смартфона.
- Swapiness — этот параметр показывает, сколько процентов процессов будет переноситься в файл подкачки. Больше 60-ти или 70-ти лучше не устанавливать. Если значение установить 0, то swap не будет использован, пока физическая память не будет использована до предела. Если же установить 100, то все процессы будут перемещаться на карту памяти, что не очень хорошо для карты, сократится срок ее использования.
- MinFree — минимальный объем свободной памяти, которая будет зарезервирована,то есть ваша система не сможет использовать эту память. Нужно для того, чтобы предотвратить замедление скорости параметра memorycreed. Не используйте большие значения. Лучше всего оставить по умолчанию.
- Запуск при старте системы — для активации автозагрузки программы,
- Дроп буфера — функция автоочистки кеша непосредственно в самом swap -файле , который создается на вашей карте памяти.
- Драйвбуфера — это параметр, который создается автоматически. Лучше его не трогать. Он выставляется после того, как протестирован раздел, на котором вы создали swap файл.
Вот, в принципе и все. Еще один такой существенный момент: Ускоряемое ядро — это применимо для игр. Там происходит активный запуск самой игры.
Помимо всего, хотим активировать ваше внимание, что на карте памяти, где вы создавали swap -раздел, будет “отрезан” участок того размера, на который вы создавали swap-файл. Если вы прекратите пользоваться программой, то этот swap-файл всегда можно удалить. Удалить его можно также из самой программы. Там есть такой пункт: Удалить все swap -разделы.
Все довольно просто: установили тестировочную программу, протестировали, установили Ramexpander, выбрали оптимальное значение. И после того, если вас размер не устраивает, вы сможете деактивировать swap и изменить размер swap-файла вручную.
Как создать Swap Файл на Андроид Магнитоле: Подробная Инструкция

Для создания swap файла на Android магнитоле вам потребуется root-доступ. Следуйте инструкциям ниже:
- Скачайте и установите приложение «Terminal Emulator» с Google Play Store.
- Запустите приложение «Terminal Emulator».
- Введите команду » su » и нажмите Enter.
- Введите команду » swapfile create » и нажмите Enter.
- Дождитесь окончания процесса создания swap файла.
- Перезагрузите магнитолу.
- Swap файл успешно создан!
2. Как удалить swap файл с Android магнитолы?
Для удаления swap файла с Android магнитолы выполните следующие действия:
- Скачайте и установите приложение «Terminal Emulator» с Google Play Store.
- Запустите приложение «Terminal Emulator».
- Введите команду » su » и нажмите Enter.
- Введите команду » swapfile remove » и нажмите Enter.
- Дождитесь окончания процесса удаления swap файла.
- Перезагрузите магнитолу.
- Swap файл успешно удален!
3. Какой размер swap файла рекомендуется для Android магнитолы?
Размер swap файла для Android магнитолы может варьироваться в зависимости от конфигурации вашего устройства и потребностей в использовании оперативной памяти. Обычно рекомендуется создавать swap файл размером от 512 МБ до 2 ГБ.
4. Как проверить работоспособность swap файла на Android магнитоле?
Чтобы проверить работоспособность swap файла на Android магнитоле, выполните следующие действия:
Увеличеваем оперативную память на андроид. Swap no root

Всем здарова, сегодня я расскажу как увеличить оперативку на андроид ну или создать файл подкачки без рута. Сначала нам надо скачать swap no root ссылка в самом низу. Теперь заходим в прогу и видим что там написано 512 мегабайт, но мы можем изменить. Изменяем на сколько нам надо и нажимаем create swap. Готово, если вы захотите удалить файл подкачки просто заходите в прогу и нажимайте delete swap и всё.
Ссылка на swap no root 4pda:


@moderator чет этот товарищ тут зачастил, не?
0609 | 31 events @ 4 min: Немецкая пятилетка

Правозащитники Mozilla Foundation прочитали пользовательские соглашения 25 автопроизводителей. Из них 21 передаёт данные третьим лицам, а 19 продают. Nissan собирает информацию о весе, поведении и интеллекте водителя и пассажиров, а Ford и GM о расе и сексуальной ориентации.
Народные умельцы поставили Firefox и другие Android приложения на Volvo. Без рута, но нужен платный аккаунт разработчика. Скачиваешь исходники программы, меняешь манифест и публикуешь в Play Store как версию для бета-теста. После автомобиль разрешает установку.
Британские айтишники нашли баг из-за которого неделю назад сломалась вся авиаотрасль. Кто-то подал план полёта, в котором две точки маршрута называются одинаково, но находятся в разных странах.
# Software
▸[4] Баг проводника Windows 11: двойное нажатие F11 [переход и выход из полноэкранного режима] ускоряет отображение и поиск файлов.
▸[5] Апдейт Xbox: добавили стрим в Discord, но не просмотр стримов, и подключение контроллеров без нажатия кнопки на приставке.
▸[6] Релиз бенчмарка Cinebench 2024: вернули тест видеокарт и обновили интерфейс.
▸[7] Апдейт часов и велокомпьютеров Garmin: добавили индекс выносливости, новые тренировки, прогноз погоды и прогноз клёва рыбы на карте.
▸[8] Zoom прокачал нейронку AI Companion: теперь умеет находить файлы, отвечать на вопросы и создавать сводки прошлых встреч. Обещают через месяц научить её отвечать на e-mail письма.
▸[9] Апдейт прошивки материнок MSI с чипсетами Intel 600-й и 700-й серии: исправили ошибку «процессор не поддерживается» при апдейте Windows 11.
▸[10] Дыра Wi-Fi роутеров ASUS RT-AX55, RT-AX56U V2 и RT-AC86U: баг в обработке строк входящих данных. Патч уже доступен.
▸[11] Релиз Android 14 перенесли на 4 октября.
# Hardpron
▸[12] Клавиатура ZSA Voyager: эргономичная механика, низкопрофильная, металлический корпус, съёмные свитчи. Цена 365 $.

▸[13] Беспроводная зарядка Nomad Base One Max 3-in-1: MagSafe, заряжает три устройства сразу. Цена 170 $.

▸[14] Камера для квадрокоптеров Sony ILX-LR1: полнокадровая, байонет E, 61 Мп, без дисплея и батарейки, вес 277 г. В продаже с декабря за 2950 $.

▸[15] Монитор Philips Creator 27E2F7901: 27″ IPS Black, 4K @ 60 Гц, 98% DCI-P3, USB-C. Цена 500 $.

▸[16] Монитор ViewSonic VG3419C: изогнутый 34″ VA, QHD @ 120 Гц, 0,4 мс, AMD FreeSync. Цены нет.

▸[17] Мышь + клавиатура Logitech Pebble 2: добавили версию для маков, уменьшили шум, корпус наполовину из переработанного пластика, пять цветов. Цена 60 $.

▸[18] Bluetooth колонка Ultimate Ears Epicboom: всенаправленный звук, сабвуфер, IP67, батарейка на 17 часов, вес 2 кг. Цена 350 $.

▸[19] Apple получила патент «Умные очки и жесты управления интерфейсом».

▸[20] Прототип навигатора Яндекс Pathfinder: подключается к бортовому компьютеру авто и к смартфону. Когда последний теряет GPS, рассчитывает положение по скорости и поворотам руля. Будет ли продаваться неизвестно.

▸[21] Смартфон Cubot Note 21: 6,6″ IPS HD @ 90 Гц, Unisoc T606, ОЗУ 6 Гб, ПЗУ 128 Гб, камера 50 Мп, Android 13. В продаже через две недели за 140 $.

# Business
▸[22] Автозавод BMW заказал у Amazon серверы для обработки данных с беспилотных автомобилей.
▸[23] Канцлер Германии придумал закон: «станции техобслуживания автомобилей обязаны установить зарядки для электромобилей». Сейчас в стране 1,2 млн электромобилей и 90 000 зарядок. Канцлер хочет видеть 15 млн авто и 1 млн зарядок к 2030.
▸[24] Конкуренты Meta переманили половину разработчиков языковой модели Llama.
▸[25] Бухгалтеры кинокомпании Warner Bros. прикинули годовую прибыль: от 10,5 до 11 млрд $. Забастовка актёов и сценаристов обойдётся от -300 до -500 млн $ упущенной прибыли.
▸[26] Apple продлила договор с Arm на поставку технологий после 2040. До какого года не уточнила.
▸[27] GoPro делает новую версию камеры Max 360˚. Даты анонса нет.
▸[28] Презентация Microsoft OneDrive пройдёт 3 октября. Покажут нейросеть для поиска файлов.
▸[29] Китай запретил чиновникам iPhone и другие импортные девайсы.
▸[30] SpaceX перенесла стримы запусков с YouTube в X.

Bada — незаслуженно забытая платформа. Какой была «iOS» от Samsung?

Мы с вами уже давно привыкли, что при покупке нового смартфона приходится выбирать всего из двух программных платформ — Android и iOS. Большинство читателей едва ли помнит, что дуополия на рынке была далеко не всегда: на заре развития смартфонов как повседневных устройств для всех и каждого, некоторые производители представляли свои собственные платформы. Но если Windows Phone всё ещё вспоминают с теплотой, то о другой системе, которая позиционировалась как конкурент Android, забыли практически полностью. И имя этой системе — bada! Недавно я купил себе парочку полностью рабочих bada-фонов с AMOLED-дисплеями по 300 рублей. Были ли у bada шансы в сравнении с Android и что из себя представляла эта система «под капотом»? Узнаете в статье!
❯ Текст
По сравнению с обычными кнопочными телефонами, современный рынок смартфонов зародился не так уж и давно — всего около 13 лет назад. На стыке нулевых и десятых шла активная борьба за карман и предпочтения пользователя: Android 1.6 потихоньку заменял современный Android 2.0/2.1 Eclair, первые три модели iPhone шли победоносной поступью благодаря наличию джейлбрейка и полной кастомизации системы, да и практически каждый крупный производитель мобильных устройств имел собственную платформу, на которой базировались её устройства.

В середине-конце нулевых, большинство пользователей были не искушены фишками полноценных операционных систем — они привыкли жить без многозадачности (за исключением пользователей Sony Ericsson и S60), без нативных приложений, без плавных анимаций и ускорения 3D-графики. Людей подкупал встроенный функционал телефонов: если там была встроенная читалка RSS и предустановлен клиент популярных в то время соц. сетей (мой мир :)), то обладатель устройства обычно пользовался именно ими. Конечно же, уже тогда были смартфоны, напоминающие нам современные устройства: помимо Apple, свои устройства предлагали Nokia (Symbian), Sony Ericsson (Symbian/Windows Mobile), HTC (Windows Mobile), но цены на них действительно очень «кусались».

Huawei U8500, или Билайн E300 — один из первых реально доступных Android-смартфонов в РФ. Ценник был около 6-7 тысяч рублей в конце 2010 года.
После выхода iPhone, производители потихоньку начинали отказываться от привычных кнопок и выпускать всё больше моделей с тачскрином. А поскольку попробовать новый способ управления хотелось всем, начали появляться относительно недорогиетачфоны— обычные телефоны, обладающие сенсорным дисплеем и кучей сетевых возможностей. Примеры одних из самых популярных тачфонов своих лет, это конечно же Samsung S5230 Star, Samsung S3650 Corby, LG Cookie и LG Cookie Fresh. В те времена, встретить человека с таким телефонов было не просто, а очень просто и в каких-то отдаленных местах это даже был предмет для хвастовства!

Когда уже было очевидно, что полноценные смартфоны в ближайшем будущем станут основным портативным устройством, Samsung решили взять предыдущий опыт и наработки SHP (Samsung Handset Platform — платформы S5230) и влить их в разработку совершенно новой смартфонной платформы, имя которой была —bada(с корейского — море). Новую платформу представили с свежей линейкой смартфонов Samsung Wave, а первым устройством был S8500 — смартфон на базе bada 1.0 с ёмкостным тачскрином и AMOLED-дисплеем. Вышел девайс в том же году, что и первый Android-флагман S-серии — Samsung Galaxy S…

И с этим связан очень интересный казус, ведь «под капотом», S8500 был очень похож на своего Android-собрата: использовался тот же чипсет Exynos 3110 «Hummingbird» (он же использовался и в iPhone 4 как Apple A4 с некоторыми доработками) с тем же радиомодулем. Конечно остальные характеристики были немного скромнее Galaxy S (384мб ОЗУ против 512мб, 8гб ПЗУ вместо 16, AMOLED-матрица немного меньше по диагонали), но и сам смартфон стоил ощутимо дешевле Android-собрата. Немудрено, что энтузиасты начали пытаться портировать Android на S8500 — и у них это получилось, хоть полноценный порт появился примерно через 2 года после выхода устройства на рынок.

Но почему большинство пользователей хотели перепрошить своё устройство на Android и чем была bada? Предлагаю узнать в практической части!
❯ Сегодняшние герои
Недавно я листал онлайн-барахолки в поисках интересных и несколько диковинных смартфонов для будущих статей. Выборка, как обычно для моего блога, стандартная: чем дешевле, тем лучше. И тут я вспомнил, что были когда-то смартфоны на базе bada — я будучи школьников даже успел потыкать Wave 525 у знакомого.

E300 я тоже решил прихватить — за 300 рублей предлагался девайс с родной коробочкой!
Однако не все бадафоны представляли для меня интерес. В первую очередь, меня интересовали смартфоны с GPU, которых не было у самых бюджетных устройств (Wave 525) и одной из главных хотелок был крутейший SuperAMOLED дисплей. После недолгих поисков, я нашёл на юлито интересующие меня девайсы за… 300 и 500 рублей.

«Дефект» первого смартфона заключался в забытом пароле. Это всё обходится буквально за 5 минут установкой свежей прошивки, но мне даже этого делать не пришлось: паролем оказался «1111» 🙂 S7250 работает на базе bada 2.0 — последней версии этой платформы от Samsung, до слияния с Tizen.

Второй смартфон был полностью рабочим и исправным. Ему не требовалось никакого обслуживания совсем, хотя можно найти целые варианты на пароле из 200-300 рублей. Что занимательно — S8500 работал на базе bada 1.0, что даёт нам возможность напрямую сравнить их!


❯ Что у них под капотом?
Я намеренно не называю bada операционной системой. По сути, это лишь программная платформа (если очень условно — лаунчер), которая предоставляет набор API и интерфейс смартфона, но при этом сама может быть запущена на любой ОС — будь это Linux, или собственная RTOS, которая применялась во всех устройствах на базе bada 1.0.

После адаптации ядра Galaxy S к S5800, многие люди переходили именно на Android, несмотря на то, что система от Google была ощутимо прожорливее. Под первый Wave выходили разные прошивки — от 4.1 JellyBean, до 4.4 KitKat, старичок долгое время оставался достаточно актуальным.

Требования платформы были отнюдь невысокими, гораздо ниже оных у Android: bada могла легко работать на смартфонах с <128мб ОЗУ (у Wave 525 завялено 80мб, по факту скорее всего 128, где 48 зарезервировано системой), чипсетом с частотой
200мгц и весьма небольшим объёмом ПЗУ. При этом в отличии от тачфонов, bada предоставляла механизм пакетов и предлагала разрабатывать приложения аж на трёх языках:
Java — в платформе была реализована полноценная поддержка J2ME приложений, что в те годы сразу устраняло недостаток приложений в магазине. При этом, Java-приложения не умели одни из самых важных фишек новой системы: уведомления и (возможно) ускорение 3D-графики. Кроме того, у Samsung не очень удобный джойстик для «кнопочных» игр.
C++ — основным языком для разработки приложений под bada были «плюсы». Платформа сразу выбрала «нативные» рельсы — что само по себе очень хорошо, однако из-за некоторых казусов, это обернулось проблемами. Найти SDK и эмулятор для разработки под bada можно и сейчас — я уже успел немного почитать документацию и посмотреть на сэмплы. И в целом, именно с точки зрения разработки, bada была весьма интересной — эдакой смесью костылей Symbian (нет исключений, полное отсутствие RAII и инициализация отдельно от аллокации) и простоты Java (приятная и удобная библиотека собственных дженериков, абстракций над базовыми типами и приятное API для построения интерфейса с конструктором форм). При этом, поддерживались все остальные фишки плюсов — в том числе и STL.
JavaScript — да, bada решила выбрать концепцию PWA, как одну из основных. При этом в JS было экспортировано часть API самой системы — что позволяло делать интерфейс как на JS, так и с использованием нативного фреймворка.
И с виду всё звучит просто замечательно, просто и понятно. Однако, серьёзные проблемы тянулись с самой первой версии платформы:
Отсутствие многозадачности — ядро, на которой работала bada, само по себе было многозадачным: в приложениях поддерживались потоки. Однако сами программы, за исключением предустановленных, всегда работали в однозадачном режиме. Почему так — неизвестно, возможно часть оптимизации под совсем слабые устройства типа Wave 525. Полноценная многозадачность появилась уже в bada 2.0.
Отсутствие адаптивности интерфейса — да, это не шутка. Samsung предлагали адаптировать приложение под каждое разрешение экрана отдельно, а всё позиционирование велось в пикселях. Если честно, именно этот шаг мне понятен меньше всего — Android с самого выхода предоставлял очень крутой механизм позиционирования интерфейса, да и в iOS тоже были какие-то инструменты для адаптивного UI. Это была одна из самых главных проблем bada — по сути, мы возвращались в эпоху Java-приложений а-ля 240×320/320×480.
Нестабильность системы — не на всех телефонах фирменная прошивка работала максимально стабильно. На некоторых моторолах ребут не был таким уж редким явлением, а некоторые китайчики могли начать перезагружаться после манипуляций в инженерном меню. Однако ожидать этого от смартфона в 2010 было странно — по некоторым слухам, даже если сторонняя программа вывалится с Access Violation (SIGSEGV), то в ребут уйдет вся система! Возможно, RTOS не умела нормально работать с MMU, однако если все программы действительно работают в «flat»-адресном пространстве, а не с виртуальной памятью, то это создаёт очень серьёзные уязвимости (и потенциал для моддинга прошивки).
Но были у системы и очень вкусные «плюшки», например — из коробки полностью поддерживалось хардварное ускорение 3D-графики (при наличии GPU), причём сразу свежий OpenGLES 2.0 — с поддержкой шейдеров! Благодаря этому, перспективы в новой платформе были и для разработчиков игр — я знаю как минимум несколько полноценных 3D-игр с iOS и Android для ОС от Samsung. Добавляем к этому потенциал реализации 3D-ускорения Java-приложений и получаем действительно годное устройство для прохождения такой годноты, как Galaxy On Fire 2 в 60 FPS! Кроме GPU, bada поддерживала виджеты и т.н «Хаб» — приложение-агрегатор событий из соц. сетей.

Именно на «болячки» жаловались пользователи чаще всего, забывая про положительные стороны устройства. И да, даже во время собственного использования, я встречал баги и сам — но всё ли так плохо, учитывая то, что Samsung действительно работала над своими ошибками и пыталась привлечь как можно сторонних разработчиков к своей платформе? Предлагаю узнать, взяв смартфон в руки самому!

❯ Смотрим на устройства
Первое, на что обращаешь внимание, когда берешь смартфоны начала 2010х в руки — это их компактный размер. Причём компактность здесь отнюдь не в ущерб юзабилити: в своё время, размер дисплея Wave был типичным среднячком — на уровне как 5.5″ сейчас. Но при этом дисплей смартфона действительно очень классный и приятно удивляет и сейчас. Однако, здесь есть нюанс — помимо S8500, выходил так-же S8530 — практически такой же смартфон, но с SC-LCD (Samsung IPS) матрицей. В те годы, корейская компания часто давала выбор между различными типами матриц в пределах одной модели. Да что там говорить, иногда даже серьезные различия в чипсетах были!
На моем экземпляре, к сожалению матрица немного выгорела, в самом проблемно месте — верхней шторке. Увы и ах, но заметно это не так сильно, поэтому я лично обратил на это внимание только на второй день использования. Во всём остальном, я не чувствую никакого дискомфорта от «старых» OLED-дисплеев — могу без проблем юзать их часами. Wave M — устройство попроще и там используется обычная TN-матрица. Но тем не менее, её размер в 2010-2011 году был весьма впечатляющим.

Сам интерфейс системы здесь напоминает Symbian и Android одновременно. Оно в целом и не удивительно: Samsung долгое время была участником Symbian Foundation и разрабатывала обновления для этой ОС, а также выпускала свои смартфоны на базе этой системы. Ко второй версии bada, концепцию UI сильно поменяли в сторону Android, из-за чего Wave M больше похож на смартфон с Android 2.x на борту — и лично по мне, этот интерфейс около-идеален!

Сам девайс работает достаточно плавно. Здесь практически нет 60, или хотя-бы 30 FPS анимаций, но зато сама платформа отнюдь не «лагучая» в отличии от ранних версий Android.
Весьма занимательный способ установки приложений придумали пользователи бадафонов в своё время: система проверяет сертификаты и покупку только во время установки приложения, при этом вся установка заключается в распаковке zip-архива в специальную директорию на SD-карточку. По итогу очень скоро обнаружилось, что можно просто скопировать уже готовую купленную игру, скачать какое-нибудь бесплатное приложение, подменить файлы в его папке на файлы игры — и получить приложение бесплатно! В bada 2.0 этот баг поправили, но всё равно это выглядело весьма забавно для компании такого уровня.

Что насчёт юзабилити бадафонов в наше время? Ну, базовые функции они точно смогут выполнять достаточно достойно. С основной функцией «звонилки» корейцы справлялись всегда хорошо — тут и удобная синхронизация контактов с Kies (программа для синхронизации с ПК), и возможность передавать контакты через BT.
Здесь, само собой, есть Wi-Fi и 3G, но ни о каком сёрфинге речи практически не идёт. Почему практически? Потому что Opera Mini 7 всё ещё работает и уходить на покой явно не собирается — а значит прочесть материал или зайти на википедию в экстренной ситуации точно получится. bada 2.0 уже поддерживала в том числе и HTML5, но судя по всему, частично (CSS3 анимации у меня не работали). В целом, если у вас есть большое желание поставить «бадафон» в строй — то можете запилить для себя PWA-приложения, которые реализуют необходимый вам функционал. Так и клиент ВКшечки можно реализовать, и почту листать, и СМСки от банков обрабатывать.

Зато почтовый клиент работает!
Один из самых важных критериев для меня — это наличие в смартфоне годного аудиотракта. У моего BlackBerry Priv качество звука просто отменное, притом что используется встроенный ЦАП в Snapdragon 810. И плеер, и качество звука здесь очень даже ничего. Плеер удобный, есть DLNA для трансляции мультимедиа на телевизор.
Лично у меня сложилось впечатление, что в середине десятых, качество звука через 3.5мм джек заметно просело у смартфонов, по сравнению с народными музыкальными Nokia — как например 5310.

Ну и не забывая про мультимедийную часть смартфона, я проверил камеру — когда-то, у Galaxy S была весьма достойная камера, учитывая его ценовой сегмент. У Wave камера тоже вполне ничего, правда с теми же «болячками», что и у других мобильных камер прошлых лет — крайне плохое качество при съемке в темноте. Ну и автофокус забрали. 🙁


Поскольку у смартфонов был GPU и Samsung всерьез старались привлечь разработчиков игр под свою платформу, на bada выходили и 3D-игры с очень годной, по тем временам, графикой.
В целом, недостаток нативных приложений в какой-то степени компенсируется наличием J2ME, но именно отсутствие нормально поддержки от Samsung и странная политика в отношении безопасности, в конечном итоге добили bada. После того, как превосходство Android стало очевидным, Samsung решили сделать упор в Tizen — идеологическом продолжении MeeGo, мобильной ОС, которая разрабатывалась Intel и Nokia. Компания выпустила сразу несколько устройств на новой платформе — Samsung Z (без Galaxy), после которого вышло ещё несколько смартфонов и Tizen окончательно обосновался на холодильниках/часах/телевизорах. Мобилок на Tizen я пока ещё не видел, хотя покопать их с технической точки зрения и сравнить с N9 было бы интересно — но в РФ они достаточно редкие.

Ну а несколько лет назад, Samsung закрыла магазин приложений Tizen, что формально означает полный провал «вертушки» 🙁
❯ Заключение
Samsung в плане самопальных платформ напоминает Microsoft — те тоже умудрились сделать действительно крутую и необычную Windows Phone, отвоевать какой-то процент рынка и заполучить фанов своей системы, но затем пришли эффективные менеджеры и решили рубить всё на корню.
И даже если команды разработчиков самих этих платформ горят идеей запилить что-то крутое, бабло и желание улучшить отчетность делают своё дело. Но раз в год и палка стреляет — не зря ведь инженеры Nokia основали свою компанию Jolla, которая пилит Sailfish OS. А ведь «Аврора» — прямой наследник Sailfish! 🙂
Но если говорить конкретно о бадафонах — то несмотря на баги и некоторые глупые решения, это были весьма годные девайсы, учитывая действительно низкую цену. Настоящим конкурентом бюджетных бадафонов была лишь Nokia 5228/5230, которая хоть и имела настоящий Symbian, но не была оснащена Wi-Fi, GPS и даже 3G. Но вот с кем bada могла конкурировать в верхнем сегменте рынка?

OPQAM, IJKL, 67890. О том, как нам реально повезло с курсорными клавишами

Клавиатура Суры ПК8000
Первый компьютер появился у меня дома в 6 лет. Это была Сура ПК8000 с черно-белым телевизором. Затем я попробовал игры на MSX-2 с цветным монитором, различные модели БК, PC и ZX Spectrum.
Последний был моим любимцем на протяжении нескольких лет. Он достался мне в корпусе от “Суры”, которую собирали на заводе в Пензе, с черно-белым монитором “Корвет” и двумя дисководами. Естественно, что в начале 90-х я понятия не имел, как выглядит настоящий “Спектрум”. Важнее было, что софта для него, в отличие от “Суры” и БК, было навалом, а клоны были во многих семьях и проблем с обменом коллекциями не существовало.
Что бесило, так это кривые сочетания клавиш управления во многих играх. Какой синклер-джойстик? Почему OPQAM? Есть же нормальные курсорные стрелки на клавиатуре?

Скриншот выбора управления в игре Rolling Thunder (Keyboard ― те самые OPQAM)
Что еще хуже, при написании программ приходилось либо долго втыкать в мелкие наклейки на клавишах, либо заучивать сочетания. Отдельных кнопок для управления курсором или того же backspace не было.
Почитав историю Синклера, я решил, что это было сделано в угоду дешевизне, минитюаризации, а еще потому, что многие использовали в играх джойстик.
Но после того, как я посмотрел на клавиатуры популярных компьютеров конца 70-х и начала 80-х, я решил, что создатели ПК не особенно заморачивались, и взяли за базу печатные машинки. Действительно, кому могут понадобиться курсорные клавиши, расположение которых будет одинаковым на всех клавиатурах, которые можно нажимать одной рукой, да еще вслепую?
Хотя нет, в Apple настолько заморочились, что на Apple Lisa и Macintosh курсорных клавиш не было вообще. Так покупателей приучали пользоваться мышкой.

Клавиатура Apple M0110
Пожалуй, все неудобства и “боль” пользователей при переходе с модели на модель можно понять только показав, как это было.
❯ Худшие из худших
На печатных машинках курсорные клавиши не были нужны, но на компьютерах для перемещения по листингам, меню, управлению в играх вроде бы необходимы?
Однако, возникает ощущение, что создатели компьютеров просто не пользовались своими творениями, т.к. на некоторых моделях типа Атари 400, 800 и 800XL клавиатура в неизменном виде существовала несколько лет.
Apple
Про Apple Lisa и Macintosh я написал в самом начале. На Apple II курсорные клавиши появились. Но… только влево и вправо. Было бы интересно понять логику.

Клавиатура Apple II
Неудобство проявлялось еще и в том, что в играх управление было совершенно разным. Например, в Ms.Pac-Man клавиши A и Z отвечали за вверх-вниз, а в Lode Runner управление было вообще без курсорных клавиш ― IJKL.

Скриншот игры Ms.Pac-Man
Полноценный блок был добавлен в модели Apple IIc и IIe

В Apple III разработчики снова учудили, и расположили клавиши, как получилось (три клавиши в ряд, а одна сверху).

Пользоваться любым из решений одной рукой неудобно. Но хуже всего, что пересесть с ПК одного производителя на на другой было реальным кошмаром.
Atari 400, 800, 800XL (1979)
Для управления курсором приходилось удерживать Control, а в младшей модели еще и мириться с мембранной клавиатурой.

BBC Micro (1981)
Раскладка уже в ряд, и без CTRL.

То есть, если вы работали на Атари, а потом вдруг решили перейти на BBC, нужно переучиваться заново пользоваться клавиатурой.
HP 9835 (1979)
Маленькие клавиши в верхней части корпуса размещены так, что положить руки, ничего не задев, не получится.

Кстати, порядок клавиш отличается и от Атари и от BBC Micro.
TRS-80 (1977) и Tandy Color Computer (1980)
Есть вверх, вниз, влево, вправо, но на разных частях клавиатуры.

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

Портативный ПК Casio FX 9000p
Commodore
Очень странным мне показалось решение в Commodore 64, который получил огромную популярность и репутацию игрового ПК. Обратите внимание — за вверх-вниз и влево-вправо отвечают по одной клавише. Хорошо, хоть кнопку shift разместили так, чтобы можно было управлять одной рукой.

Commodore 128 получил уже рядную раскладку:

А вот в Commodore Plus/4, на мой взгляд, вышло совсем неудачное решение. Блок с курсорными кнопками слишком мал и подойдет только для редактирования текста.

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

Клавиатура Amiga 1000
А вот Amiga 500 и 2000 уже получили Т-образное расположение.
❯ Под занавес. Первыми были вовсе не IBM!
Я был убежден, что изобретение стандарта принадлежит IBM, но оказалось, что еще раньше появления клавиатуры IBM Modem M (1985) по-крайней мере, две компании использовали Т-образное расположение курсорных клавиш. Но, надо отдать должное, IBM повлияла на широкое распространение этого варианта.
Я специально потратил время на поиск картинок старых компьютеров и терминалов. Первые клавиатуры с привычным нам расположением появились еще в 1970 или раньше.

Терминал ADDS Consul 880
А более современный вариант появился в 1982 году благодаря Digital Equipment.

Плохих примеров реализации курсорных клавиш очень много. Во время подготовки статьи я не раз мысленно говорил “спасибо” дизайнерам и разработчикам, благодаря которым можно легко пересесть за другой компьютер, и продолжить редактировать свой пост, не спотыкаясь, на чужой клавиатуре.
Если у вас есть предположения, почему так долго не было единого стандарта, или у вас есть объяснение логики производителей, поделитесь в комментариях!
Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.

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

К огромному сожалению, старые смартфоны всё чаще и чаще находят своё пристанище в мусорном баке. К прошлым, надежным «друзьям» действует исключительно потребительское отношение — чуть устарел и сразу выкинули, словно это ненужный мусор. И ведь люди даже не хотят попытаться придумать какое-либо применение гаджетам прошлых лет! Отчасти, это вина корпораций — Google намеренно тормозит и добивает довольно шустрые девайсы. Отчасти — вина программистов, которые преследуют исключительно бизнес-задачи и не думают об оптимизации приложений совсем. В один день я почувствовал себя Тайлером Дёрденом от мира IT и решил бросить вызов проприетарщине: написать свою прошивку для уже существующего смартфона с нуля. А дабы задачка была ещё интереснее, я выбрал очень распространенную и дешевую модель из 2012 года — Fly IQ245 (цена на барахолках — 200-300 рублей). Кроме того, у этого телефона есть сразу несколько внешних шин, к которым можно подключить компьютер или микроконтроллер, что даёт возможность использовать его в качестве ультрадешевого одноплатника для DIY-проектов. Получилось ли у меня реализовать свои хотелки? Читайте в статье!
Мотивация
Честно сказать, идея попытаться реализовать свою прошивку мне пришла ещё давно. Однако, дабы не завлекать опытного читателя кликбейтом, я сразу поясню, в чём заключается «прошивка с нуля»:
Мы всё ещё используем Linux: в качестве ядра мы продолжаем использовать образ Linux, предоставленный нам производителем. Написание прошивки полностью с нуля заняло бы очень много времени (особенно без схемы на устройство). Однако, мы вообще не загружаем Android никаким образом.
Мы не используем библиотеки AOSP: наша прошивка без необходимости не использует никаких библиотек уже имеющегося образа Android. Вся работа с железом происходит с помощью низкоуровневого API Linux. Это значит, что отрисовка графики, звук, управление ресурсами и питанием ложится полностью на нас.
Прошивка может запускать только нативные программы: да, это тоже камень в сторону Android. Изначально, наша прошивка умеет запускать только нативные программы, написанные на C. Причём она экспортирует собственное C API — дабы приложения могли использовать всю мощь нашего смартфона в виде простого и понятного набора методов.

Проектов по выкидыванию Android из, собственно, Android-смартфонов как минимум несколько: UBPorts — бывший Ubuntu Touch, FireFox OS и его наследник Kai OS и конечно же, postmarketOS. Отчасти можно сюда отнести и Sailfish OS — но там образы имеются в основном на смартфоны от Sony. Все эти проекты объединяет сложность портирования и невозможность их завести на устройствах без исходного кода ядра. Даже если у вас есть исходный код ядра, но, например, устройство использует ядро 2.6 — навряд-ли вы сможете завести современный дистрибутив на нём.
Другой вопрос в том, что можно использовать полу-baremetal подход, когда от Linux берется практически минимальный функционал. Всё, что мы имеем — busybox, libc и низкоуровневый доступ к железу, благодаря API самого ядра. Как под это всё программировать — я рассказывал впрошлойстатье. Этот же подход мы будем использовать и сейчас — как иллюстрация реального применения подобного способа.
Итак, что наша прошивка должна уметь:
Отрисовывать произвольную графику: графическая подсистема нашей прошивки должна работать с фиксированным форматом пикселя, уметь загружать прозрачные и непрозрачные изображения, отрисовывать картинки с альфа-блендингом и т. п.
Уметь звонить и работать с модемом: общение с модемом происходит посредством AT-команд — общепринятого в индустрии стандарта. Однако в случае нашего устройства, есть м-а-а-а-ленький нюанс, о котором я расскажу позже.
Иметь механизм приложений: мы ведь не будем хардкодить все «экраны» в прошивке в виде кучи стейтов, верно? Для этого у нас должен быть простой и понятный механизм слинкованных с прошивкой приложений.
Обрабатывать ввод: обработка тачскрина и жестов — это задача подсистемы ввода.
Реализовывать анимированный UI: здесь всё очевидно, наша прошивка должна иметь готовые элементы пользовательского интерфейса для будущих приложений: кнопки, текстовые поля и т. д. О деталях реализации этой подсистемы, я расскажу ниже (а реализовал я её очень необычно для такой системы).
Начинаем мы с хардварной части. Именно здесь я покажу вам, как использовать внешние шины вашего устройства.
Аппаратная часть
В качестве смартфона для нашего проекта, я выбрал популярную бюджетную модель из 2012 года — Fly IQ245 Wizard. Это простенький китайский смартфон, который работал на базе популярного в прошлом 2G-чипсета: MediaTek MT6573, да и стоил около 2х тысяч рублей новым. Однако вот в чём суть: мне удалось заставить работать «медиатековский» модем и даже позвонить с него на свой основной телефон, но… только ввод и вывод данных из звукового тракта модема происходит через звуковую подсистему Android — к которой доступа у нас нет!

Именно поэтому, мы идём на очень хитрый и занимательный костыль: мы распаяем внешний модем сами! В качестве радиомодуля у нас выступит модуль SIM800 от компании SIMCOM. И даже он очень близок к нашему смартфону в аппаратном плане: ведь в основе этого модуля лежит популярнейший чипсет из кнопочников тех лет: MediaTek MT6261D. Преимущество SIM800 в его цене — он стоит пару сотен рублей, так что по карману выбор модема не влияет.

На весу паять крайне неудобно. В финальном варианте перепаяю нормально.
Но как его подключать? SIM800 общается с другими устройствами посредством протокола UART — универсальный асинхронный приемо-передатчик. И вот тут мы включаем смекалочку. Разбираем устройство и видим то, что я пытаюсь долгое время донести до моих читателей — аж два канала UART: один практически посередине, второй справа. Нам нужны пятачки TXD4 и RXD4:

Обычно на этот канал UART летят логи ядра, которые можно без проблем отключить минорной правкой U-Boot в HEX-редакторе. Впрочем, модем никак не реагирует на «мусор» из консоли и просто отвечает ошибками — хватит лишь очистить буфер сообщений для того, чтобы все работало нормально. Подпаиваемся к UART’у с помощью преобразователя — у меня оным выступает ESP32 с выпаянным чипом.


Увидели логи? Замечательно, пора попытаться что-то отправить на ПК и с ПК. UART работают без тактовых сигналов и зависит исключительно от старт/стоп битов и бодрейта, который на устройствах MediaTek равен 921600. TXD4 и RXD4 обнаруживаются в системе на консоли/dev/ttyMT3. Пробуем что-то отправить: всё работает!

Вот теперь-то можно подключить наш внешний модем и попытаться пообщаться с ним, отправив тестовую командуAT. Модем отвечаетOK! На этот раз я работаю с смартфоном из режимаFactory mode— практически тоже самое, что и режим recovery, но позволяющий, например, получить доступ к камере устройства. Простая и понятная схема, поясняющая что и куда подключать:

На этом модификация аппаратной частипоказакончена. Пора переходить к реализации софта! Я решил разделить материал на каждый модуль, который я реализовывал — дабы вам был понятен процесс разработки и отладки прошивки!
Заставляем смартфон запускать нашу прошивку
На этот раз я решил загружать смартфон из режима рекавери. Однако никто не мешает в будущем просто прошить раздел recovery вместо boot и получить прямую загрузку прямо в нашу прошивку. Время такой загрузки будет заниматься
3-4 секунды с холодного старта. Очень даже ничего.

Я взял уже готовый образ TWRP для своего смартфона и пропатчил его, дабы сам рекавери не мешал своим интерфейсом. Для этого я распаковал образ recovery.img с помощью MtkImgTools и убрал в init.rc запуск службы /sbin/recovery. После этого, я залил прошивку обратно на устройство и получил подобную свободу действий — консоль через USB и чистый холст в виде смартфона! Старые смартфоны на чипсетах MediaTek шьются через USB только после замыкания тест-поинта — на моем аппарате его местонахождение очевидно. Замыкаем контакты между собой, подключаем смартфон без АКБ к ПК и ждем прошивки:

Теперь можно деплоить программы! Важный нюанс: в отличии от Makefile из прошлой статьи, для Android 2.3 параметр -fPIE нужно убрать — иначе динамический линкер (/sbin/linker) будет вылетать в segmentation fault.

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

Как я уже говорил ранее, графическая подсистема должна уметь загружать картинки, выводить некоторые примитивы, выводить картинки с прозрачностью и без, загружать и отрисовывать заранее подготовленные шрифты, а также управлять отрисовкой бэкбуфера на экран.
В случае с этим устройством (и большинством старых устройств), формат пикселя оказался RGB565 — т. е. 5 бит красный, 6 бит синий, 5 бит зеленый. Конвертация форматов пикселей всегда была занозой в заднице для программных рендереров, поскольку занимает дополнительное время, которое обратно зависимо от размера дисплея. Изначально я решил выделить буфер в том же формате, что и фреймбуфер, но затем решил сделать классический и самый портативный формат — RGB888 (24х-битный цвет), а при копировании кадра на экран, на лету делать преобразования цвета:

Очень важный нюанс, который я не упомянул в предыдущей статье: на устройствах прошлых лет для обновления фреймбуфера необходимо послать структуру var_screeninfo, где хотя бы что-то изменено, иначе никаких изменений мы не увидим. Этот же костыль используется в родном recovery для отрисовки, а судя по исходникам драйвера fb, «правильный» способ обновить экран — послать драйверу ioctl (который я пока что не пробовал).
После того, как я смог управлять дисплеем, я решил загрузить и отобразить какую-нибудь картинку. Пусть это будут обои для нашей прошивки:

Загрузчик TGA сильно не поменялся: я таскаю его в неизменном виде из проекта в проект. Он поддерживает любые форматы пикселя, кроме палитровых, но я его искусственн ограничиваю на RGB888 и RGBA8888 — для поддержки обычных картинок и картинок с альфа-каналом. После этого, я написал не очень шустрые, но достаточно универсальные методы для отрисовки картинок. Для больших участков кода, я буду использовать pastebin, поскольку на Пикабу до сих пор не добавили ни подсветки синтаксиса, не нормальный перенос форматирования табов 🙁
PutPixel желательно заинлайнить в будущем. В целом, сама отрисовка работает достаточно быстро, но поскольку рендеринг выполняется на ЦПУ — рано или поздно мы упремся в количество картинок на экране. Есть некоторые оптимизации: например, непрозрачные картинки можно просто коприовать сканлайнами прямо в задний буфер.
Сразу же реализовываем методы для рисования шрифтов: они у нас будут совсем простенькими — только моноширинные (все символы имеют одинаковую ширину) и растровыми (для каждого размера придется «запекать» несколько шрифтов). Для этого я написал маленькую программку, которая рисует виндовые шрифты прямо в наш самопальный формат:

1 байт говорит нам о размере шрифта и далее идут 255 изображений символов. Да, это не очень эффективно т.к попадают пустые символы из ASCII-таблицы, но в будущем это можно поправить.
Прозрачность в символах обеспечивает фоновый цвет Magena — ярко-розовый. Я не стал делать дополнительный альфа-канал, т. к. иначе будут серьезные лаги при выводе большого количества текста.
Теперь у нас есть отображение картинок и текста! Что с этим можно сделать?
❯ Обработка ввода


Пока что здесь не хватает обработки «хардварных» кнопок — домой, меню, назад и т. п. Однако в будущем это всё можно реализовать!
❯ Анимация
Не забыл я и про анимации. Ну кому с такими ресурсами нужен неанимированный топорный интерфейс? Пусть лучше будет анимированный, пусть и примитивный!
Аниматор напоминает оный из ранних версий Android: он имеет фиксированный набор свойств, которые умеет интерполировать в промежутках определенного времени. Если простыми словами: то он оперирует линейными отрезками времени a и b, в промежутке которых мы имеем значение «прогресса» — которое даёт нам результат от 0.0f (начало анимации) до 1.0f (конец анимации). Пока время тикает до необходимого интервала (duration), аниматор интерполирует заранее назначенные ему поля до нужных значений.
Именно так и получается плавность! Похожим образом реализованы анимационные системы во многих играх и мобильных ОС, только там они гораздо более комплексны: есть сериализация/десериализация из файлов, поддержка кейфреймов (несколько последовательных состояний на одном промежутке времени), поддержка кастомных свойств и т. п.

❯ Модем
Как я уже говорил раннее, работа с модемом происходит посредством AT-команд. Лучше всего обрабатывать ввод-вывод модема из отдельного потока, поскольку он может отвечать довольно медленно и тормозить UI-поток основной программы, вызывая лаги. В SIM800 уже реализован весь GSM-стек, в том числе декодирование и вывод звука через встроенный усилитель с фильтром — остается только подключить динамики и микрофон от нашего телефона. Пока что я подсобрал аудиотракт на том, что было под рукой — микрофон от нерабочего смартфона и динамик от планшета, но для проверки этого хватает:

Важный нюанс: по умолчанию, tty-устройства в Linux работают по терминальному принципу — т. е. дробят транзакции по символу окончания строки (\n), имеют ограниченный буфер и т. д. Для нормальной работы в условиях модема — когда фактически длина ответа неизвестна, а в сам ответ могут «вклиниваться» Unsolicited-команды (своеобразные флаги о состоянии от модема, которые могут прийти в произвольное время — т. е. при входящем звонке, модем начнёт флудить RING в терминал), необходимо иметь возможность точно прочитать весь буфер до конца и парсить данные «по месту». Для этого используется raw-режим терминала:
(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tio.c_oflag &=
(OPOST);
tio.c_cflag |= (CS8);
tio.c_lflag &=
(ECHO | ICANON | IEXTEN | ISIG);
tcsetattr(modemFd, TCSAFLUSH, &tio);
После чего можно запросить состояние модема:

И продолжить работу дальше. После этого, можно переходить к реализации самой прослойки между модемом и вашей программой:
Пытаемся позвонить с помощью метода Dial и видим, что всё работает! Это очень круто! А теперь, конечно же, самое время переходить к реализации того, чего вы ждали — пользовательского интерфейса!
❯ Главный экран
К выбору концепции для интерфейса, я поступил максимально просто — «слизал» дизайн первых версий iOS. Как по мне, это одни из самых красивых версий iOS вообще — все эти приятные градиенты и переливания. Конечно, я не так крут, как инженеры Apple, да и мощного UI-фреймворка у меня пока что нет, поэтому я приступил к реализации с «минимальным» функционалом.

Начал я с разделения главного экрана на модули и продумывания архитектуры основного «лаунчера». У нас есть статусбар, который рисуется поверх всех приложений, полка с приложениями — AppDrawer и сами экраны приложений, унаследованные от суперкласса CScreen.
На данный момент, отрисовка достаточно примитивная: сначала рисуются фоновые обои, затем, если нет никаких активных экранов — AppDrawer и в самом конце рисуется статусбар и всевозможные оверлеи.
Практически сразу я решил обкатать анимационную «систему» и добавить первые анимашки — выезжающий статусбар и анимация а-ля айфон:
animator = new CAnimator();
animator->SetTranslation(0, -imFiller->Height, 0, 0);
animator->Run();
Выглядит симпатичненько. Если я смогу поднять хардварный GLES, то это получится сделать в разы плавнее и шустрее — не хуже айфонов тех лет! Реализация самого статусбара примитивненькая, но вполне рабочая:
gLauncher->Graphics->DrawImage(imFiller, animator->X, animator->Y);
gLauncher->Graphics->DrawImage(imBattery[(int)gLauncher->PowerManager->GetBatteryLevel()], imFiller->Width — imBattery[0]->Width — 5, animator->Y + 5);
char timeFmt[64];
time_t _time = time(0);
tm* _localTime = localtime(&_time);
strftime((char*)&timeFmt,
sizeof(timeFmt), «%R», _localTime);
gLauncher->Graphics->DrawString(gLauncher->Font, (char*)&timeFmt, 0, 0);
Кроме этого, я сразу же реализовал предварительный механизм приложений в системе — пока что они слинкованы статически с основным лаунчером. Для этого есть структура CAppDesc, которая содержит минимально-необходимую информацию для показа информации о приложении и фабрику для создания его основного экрана.
Обратите внимание на удобство примененного подхода Immediate GUI. Нам понадобился новый элемент интерфейса, который описывает кнопку номеронабирателя? Мы просто реализовываем ещё один метод, который берет за основу стандартную кнопку и дорисовывает к ней текст. Всё крайне просто и понятно, хотя на данный момент слишком захардкожено. 🙂
❯ Звоним!
Пришло время совершить первый звонок с нашей по настоящему кастомной прошивки. Набираем номерок и…

Да, всё работает и мы без проблем можем дозвониться 🙂
❯ Заключение
Конечно же, это далеко не весь функционал, необходимый любому современному смартфону. Здесь много чего еще нужно реализовать хотя бы для соответствия уровню бюджетных кнопочных телефонов: телефонную книгу, поддержку СМС/ММС, мультимедийный функционал с играми. Однако начало уже положено и самая необходимая часть модулей реализована. Этот проект очень занимательный для меня и я горд, что смог не на словах, а на деле показать вам, моим читателям, возможности моддинга совершенно NoName-устройств, без каких либо опознавательных знаков…
Моя задача заключается в том, чтобы показать вам возможности использования старых телефонов не только в потребительских, но и в гиковских DIY-сферах. Судите сами: огромный классный дисплей, емкостной тачскрин, готовый звук, камера — и всё это за каких-то пару сотен рублей. Главное показать людям, как всю эту мощь использовать в своих целях и делать совершенно новые устройства из существующих, а не выбрасывать их на помойку!
Сейчас смартфоны, подобные Fly из этого поста стоят копейки, а портировать на них прошивку можно без каких-либо трудностей. Я очень надеюсь, что после этого поста читатели попытаются сделать что-то своё из старых смартфонов, благо свои наработки я выкладываю на GitHub!
Есть ли на 2023 год скачок в технологии смартфонов?
Я почему спрашиваю, я так скрупулёзно не разбираюсь.
Мне пару дней назад исполнилось 55 лет, но в свои годы я стараюсь оставаться в тренде в плане технологий.
У меня есть и ПК и ноут и ПС5, и помимо этого читаю хайтеч.
У меня на данный момент Xiaomi Redmi Note 8 Pro 6/128. Я его покупал в 2019 году. И уже 4 года телефон верой и правдой служит мне.
Всё что мне нужно, НФС для оплат, ИК для управления, разблокировка отпечатком и лицом, меня устраивает.
Вообще за эти 4 года были ещё внесены какие-то новшества в смартфоны или ещё могу 2-3 года пользоваться своим смартфоном?
Я почему спрашиваю, наверное тут будет люди под 30-40+, помните нулевые, тогда были кнопочные телефоны, затем в начале десятых начали появляться андроид лопатники и каждый раз вносили новшества.
Мне интересно сейчас также идёт процесс?
Онлайн кинотеатр для бедных. Часть вторая
Длиннопост по настройке TorrServe Matrix на android устройствах для онлайн кинотеатра LampaTV.
Объясню в двух словах и одной гифке как работает TorrServe, а дальше покажу как настроить.
Это как поезд (ваше кино) который едет по рельсам (тайм лайн). Впереди устанавливают рельсы, а позади их убирают. В роли топлива выступает качество вашего интернета (битрейт) и пиры ( люди которые скачали и раздают). Так этот поезд (ваше кино) и движется до конца просмотра. Все это называется кэш, участок оперативной памяти.

Сразу отвечу зачем нужно настраивать LampaTV и TorrServe, если есть жёсткий диск и куча торрентов.
Дальнейшая настройка производится из учёта что вы прочитали и настроили LampaTV из ПЕРВОЙ ЧАСТИ ПОСТА.
Часть первая. Предварительные настройки.
Устанавливаем TorrServe Matrix из уже установленного tinstaller.
ps* спасибо автору Ютуб канала DrAdler — Android TV для чайников.
TorrServe Matrix это клиент для просмотра торрентов.

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

Нажимаем на значок TorrServe, откроется меню. Выбираем Обновление.

Разбираемся, что мы тут видим. Архитектура. Может быть arm64 и arm7.
Например телефон google pixel работает на arm64, а телевизор xiaomi mi tv 4a работает на arm7.
Нажимаем Установить /Обновить сервер.

Заходим в настройки TorrServe. Выбираем настройки трёх пунктов.
-запускать сервер при загрузке.
-выбор плеера (какой вашей душе угоден, у меня это MX player ).
-показывать обложки (для визуала)

Отключаем обязательно экономию энергии на вашем ТВ в настройках андроид устройства по пути: Настройки/специальный доступ/экономия энергии.


Включаем пункт Сервис специальных возможностей. В настройках TorrServe.
Когда вы будете активировать пункт. Вас перекинет в настройки андроид устройства.
Путь такой: Настройка/Специальные возможности/TorrServe Matrix. Включаем его.

Настройки параметров TorrServe Matrix. Это как раз размер кэша который используется при просмотре кинокартины. Я не советую трогать. Если вы начали экспериментировать и возникли проблемы, всегда можно откатиться на настройки по умолчанию.


Часть 2. Запуск.
Включаем TorrServe. Заходим в приложение нажимаем Установить/ обновить сервер .
Запускаем LampaTV. Выбираем фильм. Например Властелин колец. Братство кольца.
Нажимаем воспроизвести и выбираем Торренты.

Выбираем качество кинокартины. Я делаю так. Мой ТВ Xiaomi TV UHD 4s. Поддерживает HDR, 4k.
Лично я выбираю пункт фильтр и ставлю критерии для моего ТВ. Если интернет плохой выбираем источник который тянет ваш интернет.

Нажимаем на кинокартину. Высвечивается меню.
Разбираемся что значит играть, играть/добавить, добавить.
—Играть это будет загружен и удален с сервера.
—Играть и добавить это будет загружен на сервер и останется в ленте TorrServe Matrix. Для продолжения просмотра.
—Добавить это пункт для предварительной загрузки.

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

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

Исходники закрыты, но мы не сдадимся: Пишем полностью нативное GUI-приложение под No-Name смартфон без Android

Для многих разработчиков приложений далеко не секрет, что экосистема Android не предполагает написание полностью нативных приложений: в этой платформе очень многое завязано на Java и без ART можно запустить только простые службы без какого-либо интерфейса. Однако, есть один способ писать практически под «голый» Linux, не перекомпилируя ядро и при этом пользоваться самыми интересными фишками устройства без оверхеда в виде тяжелого Android: ускорение 3D-графики (OpenGLES), микшер звука, ввод с различных устройств, OTG, Wi-Fi и если очень постараться — даже 3G. Это открывает множество разных интересных применений старым устройствам: «железо» смартфонов зачастую гораздо мощнее современных недорогих одноплатников. Сегодня я покажу вам, как написать и запустить программу, которая полностью написанное на C без Android, на No-Name Android-смартфоне практически без модификаций. Интересно? Жду вас в статье!
❯ Что нам нужно знать?
Даже относительно старые устройства флагманского сегмента обладают весьма неплохими характеристиками. Зачастую они гораздо мощнее современных дешевых одноплатников и могут выполнять самые разные задачи: эмуляция консолей, работа в качестве плееров, да даже просто сделать настольные часики самому было бы здорово. Но есть одно но — это Android. Платформа от Google может тормозить даже на достаточно мощном железе, что резко ограничивает потенциально возможные применения подобных гаджетов. Да и многие программисты не особо хотят заморачиваться и учить API Android для реализации каких-то своих проектов.

Но конечно же, есть один способ писать нативные программы, при этом используя все ресурсы смартфона/планшета. Для этого нужно понимание, как работает процесс загрузки на многих Android-гаджетах:
Первичный загрузчик (BootROM) инициализирует какую-то часть периферии и загружает вторичный загрузчик (U-boot/LK).
Вторичный загрузчик, используя определенные аргументы (например зажата ли какая-то кнопка) выбирает, с какого раздела грузить ядро системы.
После загрузки ядра Linux и подключения ramdisk начинается выполнение процессов системы.
Как раз в третьем пункте и лежит ключ к способу, который будем использовать мы. Дело в том, что в смартфоне обычно есть несколько boot-разделов и у каждого свой образ ядра Linux со своим ramdisk. Первый из них — это знакомый моддерамboot.img, который отвечает за загрузку системы и инициализирует железо/монтирует разделы/подготавливает окружение к работе (.rc файлы) и запускает главный процесс Android —zygote. При этом используется собственная реализация init от Android.

Второй, не менее знакомый многим раздел —recovery, отвечает за так называемый режим восстановления, в котором мы можем сбросить данные до заводских настроек/очистить кэши или прошить кастомную прошивку. Вероятно, многие из вас замечали, насколько быстро ваш девайс загружает этот режим, гораздо быстрее, чем загрузка обычного Android. И именно в его реализацию нам нужнозаглянуть(я намеренно выбрал бранч версии 2.3 — т.е Gingerbread для простоты):

А recovery оказывается самой обычной нативной программой, написанной на C со своим небольшим фреймворком для работы с графикой и вводом. В процессе загрузки режима recovery, скрипт запускает одноименную программу в /sbin/, благодаря которому мы видим простую и понятную менюшку. Так почему бы не использовать этот раздел в своих целях и не написать какую-нибудь нативную программу самому?
Как я уже говорил выше, в этом режиме доступны многие аппаратные возможности вашего смартфона, за исключением модема. Используя полученную информацию, предлагаю написать наше небольшое приложение под Android-смартфон без Android сами!
❯ Подготавливаем окружение
В первую очередь, хотелось бы отметить, что программы под «голый» смартфон можно писать не только на C/C++. Нам доступен как минимум FPC, который довольно давно умеет компилировать голые бинарники под Android. Кроме того, мы можем портировать маленькие embedded-версии интерпретаторов таких языков, как lua, micropython и duktape (JS).
Однако в случае нативных программ, есть два важных правила, которые необходимо понимать. Во-первых, в Android используется собственную реализацию стандартной библиотеки libc — bionic, в то время как на десктопных дистрибутивах используется glibc. Между собой они не совместимы — именно поэтому вы не можете просто взять и запустить консольную программу для Raspberry Pi, например.

А второе правило заключается в том, что начиная с версии 4.1, Androidтребует, чтобы все нативные программы были скомпилированы в режиме -fPIE — т. е. выходной код должен не зависеть от адреса загрузки программы в виртуальную память. Для этого достаточно добавить ключ -fPIE, однако учтите, что если вы разрабатываете программу под Android 4.0 и ниже, то fPIE наоборот необходимо убрать — старые версии Androidнеподдерживают такой способ генерации кода и будут вылетать с Segmentation fault.
Для разработки нам понадобится ndk — там есть все необходимые заголовочники и компиляторы для нашей работы. Я используюndk r9c, поскольку в свежих версиях Google регулярно может что-то сломать.
ndk-build, к сожалению, здесь работать не будет, поэтому Makefile придется написать самому. Я составил полностью рабочий Makefile, который без проблем скомпилирует валидную программу, вам остаётся лишь поменять NDK_DIR.
NDK_DIR = D:/android-ndk-r11c/
TOOLCHAIN_DIR = $(NDK_DIR)toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/
GCC = $(TOOLCHAIN_DIR)arm-linux-androideabi-g++
PLAT_DIR = $(NDK_DIR)platforms/android-17/arch-arm/usr/
LINK_LIBS = -l: libEGL.so -l: libGLESv1_CM.so
OUTPUT_NAME = cmdprog
build:
$(GCC) -I $(PLAT_DIR)include/ -L $(PLAT_DIR)lib/ -fPIE -Wl,-dynamic-linker=/sbin/linker $(LINK_LIBS) -static -o $(OUTPUT_NAME) main.cpp micro2d.cpp
После этого пишем простенькую программу, которая должна вывести «Test» и компилируем её.
❯ Деплоим на устройство
Несмотря на то, что грузиться мы будем в режим recovery, нам всё равно будет доступен adb, через который мы сможем запускать и отлаживать нашу программу. Это очень удобно, однако по умолчанию adb включен только в TWRP, который нужно сначала найти или портировать под ваш девайс (на большинство старых брендовых устройств порты есть, на нонейм придется портировать самому — гайды есть в интернете). Под ваше устройство есть TWRP? Отлично, распаковываете recovery.img с помощью так называемой «кухни» (MTKImgTools как вариант):

Открываете init.recovery.service.rc и убираете оттуда запуск одноименной службы (можно просто оставить файл пустым).

Запаковываем образ обратно тем же MTKImgTools и прошиваем флэшером для вашего устройства — в моём случае, это SP Flash Tool (MediaTek):

Заходим в режим рекавери и видим зависшую заставку устройства и звук подключения устройства к ПК. Если у вас установлены драйвера, то вы сможете без проблем зайти в adb shell и попасть в терминал для управления устройством. Теперь можно закинуть программу — прямо в корень рамдиска (записывается программа в ОЗУ, но при переполнении, телефон уйдет в ребут — осторожнее с этим). Пишем:
adb push cmdprog /: adb shell chmod 777 cmdprog ./cmdprog
И видим результат. Наша программа запускается и работает!

Это просто отлично. Однако я ведь обещал вам, что мы напишем программу, которая сможет выводить графику и обрабатывать ввод, предлагаю перейти к практической реализации!
❯ Выводим графику
Для вывода графики без оконных систем, мы будем использовать API фреймбуфера Linux, которое позволяет нам получить прямой доступ к массиву пикселей на экране. Однако учтите, что этот способ полностью программный и может оказаться тормозным для вашего приложения: скорость работы прямо-пропорциональна разрешению дисплея вашего устройства. Чем выше разрешение, тем ниже филлрейт. В моём случае, матрица была с разрешением 960×540, 32млн цветов, IPS — очень недурно, согласны?
Фреймбуфер Linux может работать с самыми разными форматами пикселя, имейте это ввиду. На некоторых устройствах может быть 16-битный формат (262 тысячи цветов, RGB565), на моём же оказался 32х-битный с выравниванием по строкам (имейте это также ввиду). 32х битный формат. Работать с ним легко: открываем устройство /dev/graphics/fb0, получаем параметры (разрешение, формат пикселя), делаем mmap для отображения буфера с пикселями на экране в память нашего процесса и выделяем второй буфер для двойной буферизации дабы избежать неприятных мерцаний.
void m2dAllocFrameBuffer()
<
fbDev = open(PRIMARY_FB, O_RDWR);
fb_var_screeninfo vInfo; fb_fix_screeninfo fInfo;
ioctl(fbDev, FBIOGET_VSCREENINFO, &vInfo);
ioctl(fbDev, FBIOGET_FSCREENINFO, &fInfo); fbDesc.width = vInfo.xres;
fbDesc.height = vInfo.yres;
fbDesc.pixels = (unsigned char*)mmap(0, fInfo.smem_len, PROT_WRITE, MAP_SHARED, fbDev, 0); f
bDesc.length = fInfo.smem_len; fbDesc.lineLength = fInfo.line_length;
backBuffer = (unsigned char*)malloc(fInfo.smem_len); memset(backBuffer, 128, fInfo.smem_len);
printf(«Framebuffer is %s %ix%ix%i\n», (char*)& fInfo.id , fbDesc.width, fbDesc.height, vInfo.bits_per_pixel, fInfo.type);
>
Если не сделать предыдущий шаг и запускать нашу программу параллельно с recovery, то они обе будут пытаться друг друга «перекрыть» — эдакий race condition:

После этого пишем простенькие функции для блиттинга картинок (в том числе с альфа-блендингом). В инлайнах и критичных к скорости функциям лучше не делать условия на проверку границ нашего буфера — лучше «отрезать» ненужное еще на этапе просчета ширины/высоты:
__inline void pixelAt(int x, int y, byte r, byte g, byte b, float alpha)
<
if(x < 0 || y < 0 || x >= fbDesc.width || y >= fbDesc.height) return;
unsigned char* absPtr = &backBuffer[(y * fbDesc.lineLength) + (x * 4)];
if(alpha >= 0.99f)
<
absPtr[0] = b;
absPtr[1] = g;
absPtr[2] = r;
>
else <
absPtr[0] = (byte)(b * alpha + absPtr[0] * (1.0f — alpha));
absPtr[1] = (byte)(g * alpha + absPtr[1] * (1.0f — alpha));
absPtr[2] = (byte)(r * alpha + absPtr[2] * (1.0f — alpha));
> absPtr[3] = 255; >
for(int i = 0; i < image->height; i++)
<
for(int j = 0; j < image->width; j++)
<
byte* ptr = &image->pixels[((image->height — i) * image->width + j) * 3]; pixelAt(x + j, y + i, ptr[0], ptr[1], ptr[2], alpha);
>
>
И загрузчик TGA:
CImage* m2dLoadImage(char* fileName) <
FILE* f = fopen(fileName, «r»);
printf(«m2dLoadImage: Loading %s\n», fileName);
if(!f)
<
printf(«m2dLoadImage: Failed to load %s\n», fileName);
return 0;
>
CTgaHeader hdr;
fread(&hdr, sizeof(hdr), 1, f);
if(hdr.paletteType)
<
printf(«m2dLoadImage: Palette images are unsupported\n»);
return 0;
>
if(hdr.bpp != 24) <
printf(«m2dLoadImage: Unsupported BPP\n»);
return 0;
>
byte* buf = (byte*)malloc(hdr.width * hdr.height * (hdr.bpp / 8));
assert(buf);
fread(buf, hdr.width * hdr.height * (hdr.bpp / 8), 1, f);
fclose(f);
CImage* ret = (CImage*)malloc(sizeof(CImage));
ret->width = hdr.width;
ret->height = hdr.height;
ret->pixels = buf;
printf(«m2dLoadImage: Loaded %s %ix%i\n», fileName, ret->width, ret->height);
return ret;
>
И попробуем вывести картинку:
m2dInit();
test = m2dLoadImage(«test.tga»);
test2 = m2dLoadImage(«habr.tga»);
while(1)
<
m2dClear();
m2dDrawImage(test, 0, 0, 1.0f);
m2dDrawImage(test2, tsX — (test2->width / 2), tsY — (test2->height / 2), 0.5f);
m2dFlush();
>

Не забываем про порядок пикселей в TGA (BGR, вместо RGB), меняем канали b и r местами в pixelAt и наслаждаемся картинкой на большом и классном IPS-дисплее:


Производительность отрисовки не очень высокая, однако если оптимизировать код (копировать непрозрачные картинки сразу сканлайнами и убрать проверки в инлайнах), то будет немного шустрее. Google для подобных целей сделали собственный простенький софтрендер —libpixelflinger.
Есть вариант для быстрой и динамичной графики: использовать GLES, который без проблем доступен и из recovery. Однако, насколько мне известно (в исходники драйверов посмотреть не могу), указать фреймбуфер в качестве окна не получится, поэтому в качестве Surface для рендертаргета у нас будет служить Pixmap (так называемый off-screen rendering), которому нужно задать правильный формат пикселя (см. документацию EGL). Рисуем туда картинку с аппаратным ускорением и затем просто копируем в фреймбуфер с помощью memcpy.
❯ Обработка нажатий
Однако, ни о каких GUI-программах не идёт речь, если мы не умеет обрабатывать нажатия на экране с полноценным мультитачем! Благо, даже механизм обработки событий в Linux очень простой и приятный: мы точно также открываем устройство и просто читаем из него события в фиксированную структуру. Эта черта мне очень нравится в архитектуре Linux!
Каждое устройство, которое может передавать данные о нажатиях, находится в папке /dev/input/ и имеет имя вида event. Как узнать нужный нам event? Нам нужен mtk-tpd — реализация драйвера тачскрина от MediaTek (у вашего чипсета может быть по своему), для этого загружаемся в Android и пишем getevent. Он покажет доступные в системе устройства ввода — в моём случае, это event2:

Из event можно читать как в блокирующем, так и не в блокирующем режиме, нам нужен второй. Более того, в них можно инжектить события, что я показывал в статье про создание своей консоли из планшета с нерабочим тачскрином:
// Open input device evDev = open(INPUT_EVENT_TPD, O_RDWR | O_NONBLOCK);
После этого, читаем события с помощью read и обрабатываем их. На устройствах с резистивным тачскрином, передается просто ABS_POSITION_X, на устройствах с поддержкой нескольких касаний — используетсяпротокол MT. Когда пользователь нажал на экран, посылается нажатие BTN_TOUCH с значением 1, а когда отпускает — соответственно BTN_TOUCH с значением 0. Разные драйверы тачскрина используют разные координатные системы (насколько я понял), в случае MediaTek — это абсолютные координаты на дисплее (вплоть до ширины и высоты). На данный момент, я реализовал поддержку только одного касания, но при желании можно добавить трекинг нескольких нажатий:
void m2dUpdateInput()
<
input_event ev;
int ret = 0;
while((ret = read(evDev, &ev, sizeof(input_event)) != -1))
<
if(ev.code == ABS_MT_POSITION_X) tsState.x = ev.value;
if(ev.code == ABS_MT_POSITION_Y) tsState.y = ev.value;
if(ev.code == BTN_TOUCH) tsState.isPressed = ev.value == 1;
>
tsState.cb(tsState.isPressed, tsState.x, tsState.y); >
Теперь мы можем «возить» логотип Хабра по всему экрану:
void onTouchUpdate(bool isTouching, int x, int y) <
if(isTouching)
int main(int argc, char** argv) <
printf(«Test\n»);
m2dInit();
test = m2dLoadImage(«test.tga»);
test2 = m2dLoadImage(«habr.tga»);
printf(«Volume: %i %i\n», vol, muteState);
m2dAttachTouchCallback(&onTouchUpdate);
while(1) <
m2dUpdateInput();
m2dClear();
m2dDrawImage(test, 0, 0, 1.0f);
m2dDrawImage(test2, tsX — (test2->width / 2), tsY — (test2->height / 2), 0.5f);
m2dFlush();
>
return 0;
>

В целом, это уже можно назвать минимально-необходимым минимумом для взаимодействия с устройством и использованию всех его возможностей на максимум без Android. Более того, такой метод заработает почти на любом устройстве, в том числе и китайских NoName, где ни о каких исходниках ядра и речи нет. Теперь вы можете попытаться использовать ваше старое Android-устройство для чего-нибудь полезного без необходимости изучать API Android.
❯ Звук, модем и другие возможности
Для звука нам придётся использовать ALSA — поскольку эта подсистема звука сейчас используется в большинстве устройств на Linux. Судя по всему, тут есть режим эмуляции старого и удобного OSS, поскольку устройства /dev/snd/dsp присутствует. Однако, вывод в него какого либо PCM-потока не даёт ничего, поэтому нам пригодится ALSA-lib.
Другой вопрос касается модема и сети. И если Wi-Fi ещё можно поднять (wpa_supplicant можно взять из раздела /system/), то с модемом будут проблемы — нет единого протокола по общению с ним и кое-где, чтобы его заставить работать, нужно будет немного попотеть. Не стесняйтесь изучать исходники ядра (MediaTek охотно делится реализацией вообще всего — там и RIL, и драйвер общения с модемом) и смотреть интересующие вас фишки!
❯ Заключение
Как мы с вами видим, у старых девайсов все еще есть перспективы стать полезными в какой-либо сфере даже без Android на борту. На тех устройствах, где нет порта Ubuntu или обычного десктопного Linux, всё равно сохраняется возможность писать нативные программы и попытаться приносить пользу.
Не стесняйтесь лезть и изучать вендорские исходники — это даёт понимание, как работают устройства изнутри. Собственно, благодаря такому ежедневному копанию исходников системы и появилась данная статья! 🙂

Мы сделали вам плату, а дальше вы сами: Доводим дешевый одноплатник за "косарь" до ума!

В прошлой статье, мы с вами рассмотрели на что способен одноплатный компьютер, который стоит всего 1.000 рублей. Как мы выяснили, перспективы у данного девайса весьма неплохие, однако по факту, Orange Pi продаёт практически голую железку, которую нужно дорабатывать самому. Да, тут есть Ubuntu/Fedora, да, тут выведена гребенка с I2C/SPI — однако из коробки это всё работает криво-косо, либо не работает совсем. Даже обещанные шины SPI/I2C фактически не доступны в системе «из коробки». Материалов о доработке этого одноплатника в сети мало, поэтому я решил довести его до ума сам и поделится с вами — в том числе, готовыми бинарными образами! Интересно, на что способен доработанный одноплатник по цене ящика пива? 🙂
Над чем будем работать
В прошлой статье, мы с вами определились с потенциальными перспективами такого устройства. По цене 3х ESP32, производитель предлагает нам два полноценных вычислительных ARM-ядра, 256 мегабайт оперативной памяти, 512 мегабайт встроенной NAND-памяти, контроллер питания с возможностью работы от литий-ионных АКБ и 3G модем. Но в бочке меда нашлась ложка дегтя: никто не собирался это всё поддерживать и Orange Pi практически сразу «забили» на поддержку устройства, ограничившись портом Debian/Ubuntun на устройство.

Более того, производитель даже не описал как работать с GPIO и шинами устройства — что фактически превращало его из одноплатника в обычную ТВ-приставку, только без нормального видеовыхода. Меня крайне удивило, почему над такой дешевой платой не хотело работать коммьюнити — большинство людей только видели всю ситуацию и шли оставлять негативный отзыв, не попытавшись даже разобраться. А ведь для опытного линуксоида-эмбеддера здесь работы на день-два!
Ко всему прочему, в Linux не работает GSM-стек. Да, совсем. Производитель даже не стал кооперироваться с MediaTek, чтобы попытаться реализовать работу с модемом на уровне системы. А ведь фактически, вся работа с модемом происходит лишь на уровне AT-команд. Так в чем же проблема была?

Со всем этим мне и предстоит разобраться! Клонируем репозиторий с исходниками ядра и бежим собирать!
Собираем ядро. I2C и SPI.
Вместо типичного Buildroot, Orange Pi использует свою собственную простую систему сборки на shell-скриптах: в качестве тулчейна используется уже готовый linaro. Отчасти, это связано с самими чипами, на которых работают их устройства — MediaTek, например, не использует Mainline ядро и в процессе сборке имеет ещё кучу шагов для подготовки финального образа. Там даже menuconfig не работает и все изменения приходится делать в уже сгенерированной когда-то конфигурации.
Клонируем репозиторий с системой сборки и запускаем скрипт:

Выбираем нашу плату — 3G IoT и ждем, пока система сборки фактически скачает все необходимое для сборки — исходный код ядра, папки external (драйвера, загрузчик и порт linux MediaTek). Обратите внимание, OrangePi даже систему сборки завязали на конкретной версии системы: только Ubuntu 18.04, но на самом деле, ядро соберется без проблем практически где угодно. После того, как все было скачано, переходим в папку с скриптом сборки и запускаем скрипт сборки:
А нет, не запускаем — скрипт жалуется на то, что не может поставить некоторые пакеты. Не беда — ставим bsdtar и python minimal вручную и идем править код скрипта. Находится в он scripts/ general.sh : убираем оттуда устаревшие имена пакетов.

После этого, компиляция ядра должна пройти успешно. Обратите внимание на версию вашей платы — те, что продают сейчас — именно A. Если пытаться подкинуть им ядро для B, то они будут уходить в kernel panic из-за отсутствия eMMC.

Если mkbootimg будет жаловаться на libstdc++6, то ставим его x86 версию из репозиториев.
Готовое ядро будет лежать вoutput/kernel/boot.img, которое можно прошить на устройство. С одним маленьким нюансом — оно рассчитано на загрузку из внутренней памяти, которой критически мало для дистрибутива Linux! У нас нет boot_sd.img, который есть в оригинальном дистрибутиве. Попытка разобрать образ стандартным AndImgTool не увенчалась успехом — рамдиск встроен прямо в образ zImage, а не отдельно, как это обычно бывает у Android-образов.

Покопавшись в скриптах сборки, я так и не понял логику создания boot_sd, ничего связанного с sd я не нашел даже grep’ом по всей папке. Ну что-ж, тогда попробуем обходным путем: скомпилируем нужные драйвера в виде загружаемых модулей (ko). Идём в наш конфиг, расположенный в linux/arch/arm/configs/3giot_defconfig и меняем CONFIG_I2C_CHARDEV и CONFIG_SPI_SPIDEV на m. Пояснение: y заставит систему сборки скомпоновать драйвер статически с ядром, а m выделит его в виде отдельного модуля ko, который затем можно загрузить черезinsmod.

Снова собираем ядро, на этот раз компиляция занимает не больше минуты. Нужные нам файлы появятся в linux/drivers/spi/spidev.ko и linux/drivers/i2c/i2c-d-ev.ko. Переносим их на хост-пк, а затем и на само устройство с помощью SSH:

Загружаем модули ядра:
insmod i2c-dev.ko
И та-дам! Целых две i2c шины появилось в системе (/dev/i2c-0, /dev/i2c-1). Устанавливаем i2c-tools и идем проверять с помощью i2cdetect: первая шина полностью свободна под наши проекты, а на второй по некоторым адресам висит периферия (FM-радио как вариант):

I2C теперь точно работает! Но как насчет SPI?
insmod spidev.ko
Device or resource busy.
Увы! spidev нельзя подгружать динамически, только статически линковать с ядром, чего мы сделать пока не можем. Однако техническая возможность заставить работать SPI есть: например, написать свой драйвер, который транслирует команды из юзерспейса в SPI API, которое работает на уровне ядра.
В прошлой статье, я вкратце рассказал, как работать с gpio из user-space на уровне терминала. Однако, большинство разработчиков потенциально будет пользоваться нативным API для GPIO — ну не всерьез же им парсить вывод состояния в консоль? Поэтому я решил написать крошечную библиотеку для работы с GPIO, такую же простую, как и DigitalWrite/DigitalRead!
Давайте сначала разберемся, как именно работать с драйвером GPIO. Для этого открываем исходники ядра и смотрим внимательно, что нам предлагает драйвер: в нашем случае, это вызовы IOCTL, да еще и простые и понятные. Это просто отлично! Я написал single-header библиотеку минут за 10: без проверки ошибок, но работоспособная.
void gpioInit();
void gpioSetDir(int num, byte dir);
byte gpioGetDir(int num);
void gpioWrite(int num, byte value);
byte gpioGetState(int num); byte gpioRead(int num);
void gpioSetPullState(int num, byte enabled, byte up);
Пример использования (141 — крайний пин на гребенке):
#define GPIO_IMPL
#include «gpio.h»
#include <stdio.h>
void testPin(int pin)
<
printf(«Pin state %i is %i\n», pin, gpioGetState(pin));
gpioSetDir(pin, 1);
gpioWrite(pin, 0);
printf(«Pin state %i is %i\n», pin, gpioGetState(pin));
gpioWrite(pin, 1);
printf(«Pin state %i is %i\n», pin, gpioGetState(pin));
>
int main(int argc, char** argv) <
gpioInit();
testPin(141);
>

Скажу сразу: пока что завести модем мне не удалось, но я активно работаю над этим. В этой части статьи я распишу свои находки и догадки касательно модемов на чипах MediaTek.
В устройствах MediaTek, драйвер для общения с GPS, A-GPS и модемом один — ccci, судя по всему cross chip communication interface. Именно ccci создает устройства, с в которые поступает вход с микрофона и выход на динамики, а также он создает управляющие интерфейсы для общения с различными модулями этого SoC.
При старте ядра, ccci создаёт много устройств — ccci_ioctl, ccci_ipc, ccci_fs и самое нужное нам —ttyC0/ttyC1/ttyC2— в зависимости от количества СИМ-карт в системе. Кроме ccci, в системе есть некий 6620_launcher — бинарник, который загружает прошивку Wi-Fi и gsm0710muxd — специальный сервис, который позволяет в GPRS-сетях одновременно разговаривать и сидеть в интернете.
На смартфонах MTK есть factory mode — так называемый тестовый режим, который гоняют на заводах. Вы, вероятно, когда-то видели китайские меню похожее на рекавери — это и есть factory mode. Из этого режима можно дозвонится в 911 и активировать модем без запуска Android и RIL. Как это работает? Идём читать исходники ядра!
В factory-режиме, для каждого теста, программа активирует модем заново. Для этого есть функции тестового режима для работы с AT-командами и для инициализации модема. Сначала, она открывает терминал /dev/ttyC0 — именно там происходит общение с модемом с помощью AT-команд:

После этого, программа выводит модем из режима сна с помощью команды «AT+ESLP=0», инициализирует СИМ-карту с помощью команды «AT+ESIMS» и задает режим работы с помощью «AT+EFUN=1» и «AT+CREG=1». После этого, модем начинает искать сеть и доступен для обычного общения с помощью AT-команд. Однако, написав тестовую софтину для общения с модемом из под Debian, я получал ошибки вида Device not found. Почему? Пока не знаю. Однако я продолжаю изучать данный вопрос!
Подготовленные мною файлы вы можете скачать на диске. Там скомпилированные модули ядра, библиотека для работы с GPIO и пару тестовых программ в качестве примеров.
К счастью, довести гаджет до ума мы смогли своими силами. Весьма странно, что такой крупный и уважаемый производитель как Orange Pi, банально решил «забить» на поддержку собственного устройства. И я лично считаю, что не стоит закидывать в долгий ящик их тем читателям, которые купили когда-то себе подобный девайс и забили, смирившись с отсутствием гайдов.
Немного энтузиазма, опыта и видения будущего проекта — и все получится 🙂

Одноплатный компьютер с 3G «за косарь». Что Orange Pi предлагает по цене ящика пива?

Каждый год выпускается с десяток новых моделей одноплатных компьютеров. Свежие девайсы представляют как старые и уважаемые фирмы по типу Raspberry Pi, Orange Pi или Banana Pi, так и относительные новички на рынке — Repka Pi, или, например, Lctech Pi. Одноплатники работают на достаточно большом парке железа: кто-то использует чипы AllWinner, кто-то Amlogic, кто-то Beoadcom, а кто-то… мобильные! Пару лет назад Orange Pi отличились выпуском нескольких одноплатников на базе чипсетов очень бюджетных мобильников 2013-2015 годов — 2G IoT и 3G IoT. На данный момент, выпуск 3G IoT завершен, а компания предлагает купить абсолютно новый одноплатник с 3G, Bluetooth, Wi-Fi, GPS, поддержкой Linux и Android всего за 1.000 рублей (500 само устройство и 500 доставка). На что оно способно и стоит ли его брать — узнаем в статье!
Что за устройство?
IoT устройство уже прочно закрепились в нашей жизни. Сейчас уже есть возможность приобрести полноценный внешний GSM-модуль за пару сотен рублей, который способен будет выйти в сеть или обрабатывать SM. Однако, в мире одноплатников всё не так просто: большинство из этих устройств использует планшетные чипсеты, которые обычно не обладают встроенными модемами для работы в GSM-сетях. На помощь приходят внешние модули, но чем выше необходимое поколение связи, тем выше цена. И есть 200 рублей за 2G модуль — это совсем немного, то 3G, а тем более LTE модули могут влететь в копеечку. Конечно в мейнлайн дистрибутивах уже есть драйвера на некоторые модемы Huawei, благодаря чему можно просто воткнуть копеечный USB-свисток но это не совсем спортивно.

С весьма интересным решением пришла компания Orange Pi. Несколько лет назад они представили весьма занимательное устройство: 2G IoT, которое работало на базе давным-давно забытого мобильного чипсета RDA8810, который является родственником Spreadtrum SC6820 — чипа, который использовался в очень многих китайских ультрабюджетниках 2012-2014 годов. Устройство отличалось весьма неплохими характеристиками за низкий прайс:
Процессор: RDA8810, Cortex-A5, 1Ghz.
ОЗУ: 256 мегабайт DDR2.
ПЗУ: 512 мегабайт NAND памяти + возможность загрузки с MicroSD флэшек.
Дисплей: 40-пиновый коннектор, мимикрирующий под стандартизированный. Однако производитель предлагает свой дисплей от мобильниках втридорого, а распиновка несколько отличается от общепринятой — нужно делать переходник.
Питание: 5в от USB, до 2А нагрузки при работе с сетью, 3.7в от АКБ с встроенным контроллером питания.
Звук: Микрофон + встроенный в чипсет ЦАП для вывода звука из системы.
Интерфейсы: SPI, I2C, GPIO, UART, Wi-Fi, Bluetooth.

Причина низкой цены и хорошего функционала очень проста: Orange Pi просто взяли референсную плату ультрабюджетного смартфона за 1.500-2.000 рублей и развели из нее одноплатник, который затем начали производить. На момент выхода одноплатника, смартфоны на 8810 не производились, так что отпускная цена на чипы была копеечная, в то время как на AllWinner’ы спрос весьма хорош. Год назад они продавались по 700 рублей с учетом доставки, но сейчас их окончательно распродали и найти их можно только на вторичке.

3G IoT — следующая ветвь развития IoT линейки OPi, которая на этот раз работает на базе чипсета MediaTek и имеет полноценную поддержку 3G. По сути, возможности остались те же, однако возможности вывода на HDMI до сих пор нет — теперь производитель предлагает LVDS матрицу, опять же, втридорого. Однако схема есть, чисто теоретически есть возможно купить какой-нибудь бюджетник от ZTE/Huawei, найти схему платы и сделать переходник с шлейфа нашей матрицы на коннектор одноплатника. Драйвер матрицы можно взять в исходниках ядра и без изменений перенести. Работает девайс на базе чипа для бюджетных смартфонов, однако теперь в нашем распоряжении целых два ядра!

Характеристики девайса такие:
Процессор: 2х-ядерный MT6572, Cortex-A7, 1.2Ghz.
ПЗУ: 512мб eMMC флэшка от Leahkinn + возможность загрузки с MicroSD.
Дисплей: MIPI DSI, LVDS.
Питание: 5в, до 2А в пике, 3.7в с контроллером питания.
Звук: всё так же, микрофон + ЦАП.
Интерфейсы: SPI, I2C, GPIO, UART, Wi-Fi, Bluetooth.
Весьма недурно, согласны? На момент выхода статьи, этот одноплатник можно заказать на всем известном сайте за 1.000 рублей — это с учетом доставки. Идет недели 3, поставляется в фирменной коробочке. Гребенка уже распаяна с завода.

Ну что-ж, предлагаю посмотреть, что может предложить нам такой одноплатник и стоит ли его вообще брать?
Накатываем систему
На выбор у нас есть Android и Linux. Учтите, что GSM стек работает только в Android! Теоретически есть возможность связаться с модемом из под Linux, но это требует дальнейшего изучения местного factory-режима. Впрочем, GSM под Android не так уж и плохо — нужное вам поведение, вероятно, можно реализовать в виде службы. Но управлять Android придется только, и только через ADB, если у вас нет дисплея.
Для установки ОС можно использовать как внутреннюю память (только Android, rootfs линукса туда не влезет), так и на MicroSD. Оба способа требуют прошивки eMMC с помощью фирменого флэшера — SP Flash Tool. Суть в том, что выбор варианта загрузки с SD/NAND реализован здесь в виде настройки точки монтирования: ядро так или иначе будет находится на eMMC, но в зависимости от выбранного образа boot, будет загружать систему с соответствующего носителя. Примерно как это реализовано здесь.
Мы будем ставить Linux: качаем SP Flash Tool, выбираем scatter-файл и ставим Format All + Download. Осторожно, форматирование сотрет NVRAM и IMEI, так что лучше сделать бэкапы (хотя их все равно можно легко перебить из системы вручную):

На первом проходе, флэшер переразметит внутреннюю память, но ругнется на отсутствующий раздел System. После этого, нужно вернуть режим Download only, снять галку с System и прошить устройство еще раз — после этого, плата будет загружаться с MicroSD:

Теперь нужно записать саму систему на флэшку. Образы записываются как обычно — берем флэшку на 4-8гб, вставляем в кард-ридер и записываем образ через Win32DiskImager. Флэшку желательно брать 10-класса, но у меня и «пятерка» работала с адекватной производительностью:

После записи, вставляем флэшку в устройство и запитываем его. Возможны варианты питания как напрямую от БП, так и от аккумулятора — в таком случае, при подключении БП, контроллер питания будет заряжать аккумулятор, а за статусом зарядки можно следить через устройство battery в /sys/class/power_supply/ (и в Linux, и в Android).
Для общения с системой через консоль, нам понадобится UART-преобразователь. Я для этого использую плату ESP32-WROOM с выпаянным чипом ESP32. Подтыкиваемся (или подпаиваемся) к UART’у, запускаем putty, ставим бодрейт 115200 и вперед наблюдать за консолью!


Настраиваем Linux
Тут ничего особо сложного нет, лишь некоторая подготовка к полноценному использованию системы. Если для вас написанное малопонятно — можете просто скопипастить, все должно работать без проблем.
Итак, система запустилась и требует логин, а кроме этого — сыпет логами в UART. Стандартный логин — root, пароль orangepi, лучше смените пароль сразу. Надоели логи? Пишем:

Можно сразу записать эту команду в rc.local, если не хотите после каждого ребута писать команду по новой.
После этого, нам нужно настроить Wi-Fi. В системе предустановлен wpa_supplicant, поэтому для подключения мы идем в /etc/network/ и редактируем с помощью nano файл interfaces:
nano interfaces
. Дописываем
auto wlan0
iface wlan0 inet dhcp
wpa-ssid «Имя вашей сети»
wpa-psk «Пароль вашей сети»
Жмем Ctrl + X, сохраняем и перезапускаем сервис networking service networking restart Возникли проблемы? wpa_supplicant жалуется на существующий контекст? Удаляем wpa_supplicant из /run/, если все равно не работает — отправляем систему в ребут, должно заработать.
Имейте ввиду: плата без проблем питается от стандартных 5В/0.5А USB-порта ПК, но если подключить к ней USB-устройство во время работы — то плата начнет уходить в ребут при попытке поднять Wi-Fi, даже если вытащить флэшку. Лечится легко: обесточиваем плату, затем включаем снова.

Подключиться можно хоть к точке Wi-Fi от вашего смартфона, дабы объединить их в локальную сеть. Тогда с помощью VNC можно будет вывести изображение с одноплатника на экран разбитого сяоми — чем не применение старому гаджету? Пингуем гугл, сеть есть — отлично!
Теперь ставим icewm из репозиториев, tightvnc и пошло поехало… ан нет! Debian Stretch уже выкинули из официальных репозиториев, перенеся его в архив. Пользовались старыми версиями убунты/дебиана? Тогда следующая операция для вас будет знакома:
nano /etc/apt/sources.list
.
Меняем ftp2.cn.debian.org на archive.debian.org во всех строках. Ctrl + X, сохраняем.
Пишеv apt-get update. Ждём обновления списка пакетов.

Теперь мы можем ставить официальные бинарные пакеты из репозиториев. Нам доступна куча софта, в том числе с более старших Raspberry Pi и Orange Pi — ABI то одно! Можно поставить TightVNCServer, запустить его и без проблем подключиться к нашей машинке (5900 — базовый порт, 5901 — будет для первого дисплея и.т.п).

Но сейчас у нас просто маленький и слабенький десктоп. Надо же использовать возможности одноплатника по полной, верно?

У устройства есть гребенка с 40 пинами, часть из которых мы без проблем можем использовать для наших целей. Друзья, если вы уже имели опыт с другими одноплатниками, то знаете что для Broadcom/AllWiiner и других иных чипсетов уже есть готовые библиотеки для работы с GPIO. Под MediaTek их нет, но ничего сложного в работе с ними из user-space нет. Рассмотрим схему подробнее и два способа работы с ними:

Первый из официального мануала, подразумевает чтение и запись в специальное виртуальное устройство — mt_gpio, а вернее — в его дебаг-режим. В него можно писать хоть из shell-скрипта при желании. Виртуальное устройство расположено по пути/sys/devices/virtual/misc/mtgpio/pin. Если просто начать читать из него, то мы получим список всех пинов и их состояние:
PIN: [MODE] [PULL_SEL] [DIN] [DOUT] [PULL EN] [DIR] [INV] [IES]
0:1000000-1
1:1000000-1
.
Чтобы записать состояние, нам нужно послать специальную строку:
echo -wdout<номер пина> > 1/0
Чтобы выбрать направление пина, нам нужно послать:
echo -wdir<номер пина> > 1/0, где 0 — вход
Чтобы получить состояние пина, нужно прочитать все строки устройство pin и потом распарсить, например, с sscanf (хотя поскольку одно поле — один char, можно взять абсолютное смещение от начала строки). Если читаем — то 3 столбец после двоеточия будет состоянием нашего пина. Я уже все проверил, все точно работает без каких либо проблем, главное не забывайте за режим GPIO 🙂

Пожалуйста, согласовывайте уровни! GPIO у MT6572 имеют лог. уровень 1.6в. Часть периферии чипсета работает на стандартных 3.3в.
Как это работает? См.в исходниках ядра.
Такой способ подойдет для приложений, где не требуется сильно высокая скорость работы. Для шелл-скриптов или даже полноценных нативных приложений таким методом можно управлять пинами без проблем — если вы конечно не реализовываете SPI софтварно 🙂
Есть и второй способ — использовать mt-gpio напрямую через вызов ioctl. Я этот режим пока еще не пробовал, но он гораздо быстрее — для юзерспейса самое то, а работать с ним довольно легко. См. исходники драйвера здесь.
Это второй способ коммуникации с внешним миром, доступный из коробки. На устройстве целых два канала UART, которые могут работать как минимум со скоростью 921600б/с (или 115200 килобайт в секунду). лучше всего использовать эту шину для общения с другими микроконтроллерами или ПК.

Получить доступ к UART можно благодаря соответствующему character-устройству /dev/ttyMTxx. При стандартных настройках (921600б/с), можно без проблем работать с UART из shell-скриптов, как с самым обычным терминалом: echo для записи, cat — для чтения. Из нативных программ, есть такая же возможность открыть ttyMT и читать/писать при стандартных настройках, а если конфигурацию необходимо изменить, то на помощь приходит termios.
А вот тут уже все гораздо интереснее. Как известно, в Linux драйвера шин делятся на два типа: kernel-mode, для работы с драйвером SPI/I2C из других драйверов (например, драйвер камеры хочет получить информацию о модуле через i2c) и user-space i2c-dev/spi-dev. Последние два есть из коробки в большинстве дистрибутивов для «взрослых» одноплатников, но их забыли включить в текущий релиз ядра 3G IoT. Почему? Не ясно — драйвера для i2c и spi у MediaTek точно есть.
На гребенке есть один I2C и один SPI. Исходники ядра для платы можно найти на гитхабе OrangePi. Чуть позже надо будет попробоваать скомпилировать i2cdev и spidev в виде отдельных модулей ядра, которые можно будет загрузить через modprobe.
Я хочу бэйр-метал, а не эти ваши линуксы.
И такая возможность есть, но лишь частично. Orange Pi открыли исходники вторичного загрузчика MediaTek — lk (альтернатива u-boot) или Little Kernel. При некоторой модификации логики lk, можно реализовать свою прошивку используя почти всю мощь чипсета. За этим — сюда.
Для чего он еще может пригодится?
Давайте смотреть сами. У нас есть полноценный десктопный Linux, есть Android, есть 2 неплохих ARMv7 ядра, работающих на частоте 1.2ггц, есть 256 мегабайт ОЗУ. Чем он может еще пригодится:
Сервер: Нет, речь конечно же не о NAS. Однако поднять простенькую домашнюю страницу, или попытаться реализовать на нем умный дом можно вполне.
Сбор информации с датчиков: В паре с микроконтроллером, на таком устройстве можно собирать, обрабатывать и хранить довольно большое количество данных с высокой скоростью опроса.
Ретро-машинка для эмуляторов: При условии, что Вы купили фирменный дисплей, поскольку через VNC поиграть не получится. К сожалению, ни одного вывода на ТВ, данный чипсет не имеет, поэтому либо пытаться прикрутить дисплей от китайчика, либо покупать фирменный.
Хитрая и дешевая сигнализация с GPS: В целом, для сигнализации такую плату можно рассматривать как System On Module: сразу и линух есть, и GPS из коробки, и 3G. Выйдет дешевле, чем купить отдельно GPS, ESP32 и 3G модуль.
В целом, можно найти еще кучу всяких разных применений данной плате в embedded.
Я считаю, что подобных ультрадешевых плат должно быть гораздо больше на рынке, ведь не все готовы платить несколько тысяч рублей за одноплатники. Однако, такие решения не подойдут для тех людей, которые хотят «купить и чтобы работало, с кучей гайдов» — у таких плат банально околонулевая поддержка. Да, Orange Pi уважаемая компания, они предоставляют полный исходный код не только ядра, но и загрузчиков — чего они делать не обязаны были, но по сути они просто произвели на свет эту плату, а разбираться в ней придется конечному пользователю. Без мануалов, без гайдов.

Стоит ли такую себе брать? Я лично не пожалел 🙂 Плата очень перспективная, а ковыряться в исходниках ядра я люблю. Попробую сделать из неё что-то полезное!

Nokia N9 — уникальный Linux-смартфон, опередивший своё время на много лет вперед

Многие из нас помнят компанию Nokia, как одного из лидеров мобильного рынка и производителя самых разных, необычных устройств, которые опережали свое время на много лет вперед! К сожалению, нынешняя Nokia — это уже совсем не та компания, которую мы любили и которой отдавали предпочтение при выборе мобильного девайса. Однако ещё во времена перехода под крыло Microsoft, практически под самый закат, финны сделали шедевральное устройство на десктопном Linux, которое до сих пор находит отголоски в современном мире смартфонов. И имя этому шедевру — Nokia N9! Недавно мне написал почётный хабровчанинdlinyjи предложил подарить этого красавца мне: причём с полным комплектом! Почему он оказался прорывным и что общего имеет с Lumia 800? Читайте подробнее в статье!
❯ Что за гаджет?
Когда-то у Nokia было две основных платформы, на базе которых они выпускали свои портативные гаджеты: S40, на которой работали функциональные Java-телефоны, сейчас их называют «фичефонами», и S60 — версия Symbian, на которой работало большинство смартфонов этой компании. Финская корпорация смогла занять серьезный процент практически в каждом сегменте рынка: бюджетники (1110, 1202 «фонарик», 2700c), средний класс (5310 XpressMusic, 5230/5228, 6300), флагманы (N95, N91, N72/N73) и, конечно же, бизнес-сегмент (8800 Arte/Luna, E90, в каком-то смысле Vertu).
Однако помимо выпуска девайсов на стандартных платформах была у Nokia и команда разработчиков, отвечавшая за гиковские устройства, которые были предназначены исключительно для энтузиастов. Началось всё с выпуска одного из первых устройств в классе «интернет-планшетов», имя которому было Nokia 770 Internet Tablet. Устройство, вышедшее за 5 лет до появления iPad, предоставляло обычному пользователю почти все возможности портативного компьютера тех лет: серфинг интернета через Wi-Fi, прослушивания музыки и просмотр видео с флэшек RS-MMC, а также работа с документами.

Но это если смотреть с точки зрения обычного пользователя. На самом же деле устройство обладало огромными возможностями для разработчиков благодаря тому, что работало на базе ОС Maemo — адаптации десктопного окружения Linux под мобильные устройства. Nokia не просто выпустили на рынок занимательный продукт: они полностью открыли исходный код всей системы, позволяя кастомизировать прошивку как угодно, реализовали «магазин приложений» в виде репозитория с различными пакетами и позволяли запускать абсолютно любое Linux приложение, скомпилированное под ARMv5.

В то время это было как глоток свежего воздуха. Конечно же, уже существовали КПК на базе Windows Mobile, где пользователи вовсю кастомизировали прошивки: подменяли драйвера из устройства в устройство, делали патчи и твики реестра/ядра, русифицировали и подменяли встроенные программы. Однако WinMobile оставалась проприетарной операционной системой, где хоть и был доступ к исходному коду ядра для любого желающего (Platform Builder), без BSP (Board Support Package — порт системы на определенную материнскую плату) в этом практически не было смысла. Другое дело — пользователи планшетов от Nokia: там была полная свобода во всем!

Отдельной особенностью Maemo оставалось то, что даже пользовательский интерфейс строился по принципам обычного ПК и на базе тех же библиотек. В качестве официальной библиотеки интерфейса, Nokia предлагала GTK с набором виджетов для построения общего Look&Feel системы, но никто не мешал использовать Qt, или, например, wxWidgets.
И вот так, из года в год, выходили всё новые и новые устройств на базе Maemo. После 770 был успешный N800, а позднее в том же году появился и N810 с QWERTY-клавиатурой. В репозиториях появлялось всё больше и больше софта и, хотя едва ли обычный пацаненок с района мог увидеть у кого-то в руках такое устройство, именно они, в паре с КПК, стали прообразами современных смартфонов. Но был ещё один важный нюанс: ни один из интернет-планшетов от Nokia не имел радиомодуля. Выходить в интернет предлагалось с помощью Wi-Fi или через Bluetooth. Таким образом, эти девайсы нельзя было назвать полноценными коммуникаторами и смартфонами…

До 2009 года. Ведь именно в этом году Nokia представляет коммуникатор N900 с QWERTY-клавиатурой, который снабдили радиомодулем, благодаря которому он оказался способен как звонить, так и выходить в интернет через 3G. Кроме того, у N900 были все характеристики современного смартфона: достаточно мощный ARM-чипсет TI OMAP с частотой 600мгц, способный запустить Linux; 256 мегабайт оперативной памяти (топовые коммуникаторы имели 128мб); GPU PowerVR SGX530 (что вообще было редкостью в мобильниках тех лет и только Qualcomm встраивали Adreno вообще во все свои чипы); магазин приложений и, конечно же, тачскрин, пусть и резистивный! Подробнее про N900 читайте в моей соответствующей статье.
В 2010-2011 годах Android уже начал идти победоносной поступью, будучи предустановленным на самые разные гаджеты: от телефонов и планшетов до тв-боксов и электронных книг. iPhone уже успел полностью согнуть свою линию и доказать, что за гаджетами с емкостными тачскринами и мощным железом будущее. Symbian уже было тяжело конкурировать с мастодонтами рынка: не помогал даже Qt, а о нативном API системы говорить вообще не стоит (оно неплохое, но своеобразное), нужно было думать, куда двигаться дальше. Сделать свой Android смартфон? Продолжать работу над Maemo? Microsoft уже начали потихоньку потирать руки и пытаться прибрать мобильное подразделение Nokia к себе: сначала поставили в кресло CEO Стивена Элопа, а затем сменили курс компании с Symbian/Maemo на Windows Phone.

Symbian развивали и поддерживали до последнего, до 2012 года, когда Nokia совсем сдалась и прекратила выпускать серьезные апдейты, коим стал Symbian Bella. Nokia уже успела выпустить первые смартфоны линейки Lumia на базе Windows Phone и пыталась удержаться на плаву. Но у компании припасен ещё один козырь за пазухой. О котором знали в Microsoft, который действительно имел все шансы перевернуть мобильный рынок с ног на голову, и который развивали вместе с Intel. И имя ему — MeeGo!

Nokia действительно могла перевернуть мобильный мир, если бы ей не мешала Microsoft. И не нужны были бы ей смартфоны на Android, когда у них самих была такая классная система. И ведь кто-то подумает «ну было и было», ан-нет, отголоски MeeGo раздаются и сейчас. Часть инженеров Nokia ушли развивать MeeGo в виде отдельной компании Jolla с смартфонами на базе Sailfish OS — дальнейшее развитие перспективной системы от Nokia. И как бы необычно это не звучало, сейчас Sailfish развивают в… России! Ростелеком выкупил контрольный пакет акций Jolla, что позволило реализовать свой форк под знакомым многим из вас названием Aurora OS! Я даже рискнул оставить заявку на закрытое бета-тестирование, авось и я смогу подержать в руках устройство на Авроре и даже что-то запилить на него, например, 3D-игрушку! 🙂

Nokia N9 стал первым и последним гаджетом на базе MeeGo, на который будет крайне интересно взглянуть и… понять, что мы пришли ко всему тому, что Nokia реализовала много лет назад! N9 мне подарил мой читатель, наставник авторского дела и просто крутой мужик Сергей «@dlinyj» Долин! Этот человек сыграл довольно большую роль в становлении меня, как автора: давал советы касательно фотографий, стилистики текста, кое-где поправлял меня. И в один день он скинул фотографию N9 в родной коробочке со словами «хочешь же?))», заранее зная мой ответ! Сергей и сам успел поработать над Авророй, поэтому наличие у него N9 не вызывает вопросов.
Этот материал я решил подготовить на круглую и праздничную для меня дату — день рождения моего блога! Ровно год назад, 16 июля 2022 года, я написал свою первую статью — обзор на Samsung X450. 🙂
❯ Распаковываем.
Поставлялся девайс в большой коробочке, фирменного синего цвета и с гравировкой логотипа, как и свойственно всем флагманам Nokia. В N900 на коробке гравировали даже кнопки QWERTY-клавиатуры на силуэте устройства — даже над дизайном такой мелочи поработали знатно. Нас сразу встречает заветная надпись: Nokia N Series!

Открываем коробочку и видим там комплект из: смартфона, буклетов, наушников и ЗУ. Всё весьма компактно и в чем то даже напоминает стиль iPhone.

Основные интерфейсные разъемы устройства расположены сверху: там и слот под SIM, и разъем для ЗУ, причем на магнитах (!).
Что самое интересное — у N9 был параллельный «собрат» на Windows Phone в виде Lumia 800. Несмотря на то, что работают они на совершенно разных чипсетах и имеет немного отличающийся тачскрин, у этих девайсов очень похожий дизайн корпуса, конструкция, полностью совместимые дисплеи с немного разной диагональю, у них даже есть некоторые сходства в разводке материнской платы.
Характеристики нашего устройства такие:
Чипсет: TI OMAP 3630, одно ядро Cortex A8 на частоте 1ггц.
GPU: PowerVR SGX530. Весьма неплохое видеоядро по тем годам, немного более мощное использовалось, например, в первом iPad. Есть поддержка OpenGL ES 2.0.
ОЗУ: 1гб. Очень серьёзный объем по тем временам, некоторые флагманы комплектовались лишь 512мб ОЗУ, что было стандартом индустрии в 2012-2013 годах.
ПЗУ: 16 или 64гб. По тем временам, очень серьезный объем памяти.
Камера: 8мп фотокамера с оптикой от Carl Zeiss. Данная оптика стала стандартом и визитной карточкой многих камерафонов от Nokia. Помимо съемки фото, смартфон способен записывать видео в 720p при 30 кадрах в секунду.
Дисплей: 3.9″ AMOLED матрица 854×480.

Сергей прислал изначально полностью рабочий гаджет, что для моего блога обычно не свойственно — я люблю покопаться и в нерабочих девайсах. Однако некоторой адаптации под современные реализации смартфон всё же требовал и в первую очередь — обновление репозиториев.
❯ Патчим в программном плане
Поскольку MeeGo — это по сути, полноценный десктопный Linux, адаптированный под мобильные платформы, он точно также, как и Maemo, использует менеджер пакетов dpkg. Все приложения для этих систем распространяются в виде знакомым большинству линуксоидов пакетов .deb.
Однако есть целых два важных нюанса: в устройстве нет предустановленного файлового менеджера, откуда можно было бы установить минимально-необходимые программы, и устройство не всегда может установить «левые» dpkg даже после включения установки приложений из сторонних источников в настройках.

Установить файловый менеджер можно скачав соответствующий .deb и скинув его через Bluetooth. Я выбрал FileBox. Затем его можно установить в списке переданных файлов обычным тапом. Обратите внимание, что пакеты для MeeGo имеют подпись а-ля Symbian, поэтому если у вас не устанавливается ничего — проверьте дату и время.

Некоторые программы можно установить только в терминале, вручную вызвав dpkg -i с необходимым пакетом .deb. Для активации режима разработчика, который добавляет возможность связи с ПК и эмулятор терминала, нам нужно сначала обновить зеркала репозиториев с пакетами, установивэтот .debи затем активировать девмод в настройках. Смартфон докачает и установит нужные пакеты, перезагрузится, и мы сможем свободно пользоваться терминалом.

Теперь гаджет полностью работает и может оказаться весьма полезным. Так в чем же N9 оказалась шедевральна? Какие её концепции до сих пор заимствуют?
❯ Смотрим на MeeGo
В первую очередь, MeeGo ещё в 2011 году вводила концепцию полного управления системой жестами. Здесь вообще нет никаких кнопок «домой», «назад», «диспетчер приложений» — все это инженеры Nokia посчитали не нужным и реализовали всё взаимодействие благодаря простым и понятным свайпам. Обратите внимание, ничего не напоминает? Неужто кто-то с выходом десятки полностью позаимствовал фишку финского гиганта?
Кроме того, Nokia посчитали, что мобильной системе не нужен рабочий стол в его классическом виде. Схожий подход, где на домашнем экране сразу расположены все приложения, уже реализовала Apple еще в первом айфоне. Однако в айфоне домашний экран поделен на страницы, в то время как в MeeGo это список с возможностью создания подпапок. Причем рабочий стол с виджетами был до этого в Maemo, но Nokia решили не переносить его в MeeGo.

UX системы вообще очень необычный. Он пытается сочетать все лучшее из iOS, WP и отчасти Android. Да, здесь есть шторка уведомлений, но выглядит она максимально минималистично и единственная настройка — громкость звука. Да, часть параметров приложений можно найти в настройках — прямо как в iOS. Да, здесь уже был относительно строгий полу-Flat стиль, немного напоминающий стиль iOS 7 (который вышел на 2 года позже MeeGo). Даже меню опций нет, лишь значки действий снизу — как и в N8 на Symbian.

Кроме того, здесь довольно удобно реализован диспетчер задач. В Android он только-только появился в 3.0 Honeycomb, а в iOS он был реализован жутко неудобно. Однако, судя по всему, MeeGo не умеет сама закрывать или отправлять в сон приложения, как это делает Android и iOS — такова нативная линуксовая натура системы. Из-за этого, если открыть слишком много приложений, можно наблюдать небольшие лаги. Вообще, система действительно не сказать что работает уж очень плавно: яблочки тех лет работали гораздо шустрее и плавнее, однако по тем временам плавность системы достаточно приемлема.

Я решил установить некоторые приложения и использовать N9 в современном мире. И в целом, для каких-то базовых действий он отлично подойдёт и сегодня!
В системе есть браузер на базе WebKit — тот самый браузерный движок, что используется и в Safari на iOS, и долгое время использовался в стандартном браузере Android. Благодаря дисплею, страницы выглядят очень сочно, но только те, которые загрузятся 🙂 И дело даже не в веб-стандартах, большинство страниц браузер сможет худо-бедно переварить. Однако встает проблема с сертификатами — браузер их не умеет игнорировать, если они просрочены, и вываливается в ошибку, отказываясь загружать сайт. Кроме того, браузер не поддерживает SSL 1.2, который использует большинство сайтов на данный момент.

Зато в системе полностью функционирует почтовый клиент, причем довольно удобный. И здесь открывается еще одна фишка системы: один менеджер для всех аккаунтов на устройстве. Подобную концепцию имеет Android почти с самого начала, но в MeeGo она выделена в отдельное приложение. Не исключено, что в будущем туда хотели добавить и менеджер паролей — было бы весьма удобно!
Что же касается самого клиента почты, то его без проблем можно настроить на Яндекс почту, и на gmail — только не забываем включить SSL (по умолчанию отключен) и использовать одноразовые пароли — двухэтапную аутентификацию большинство старых гаджетов не поддерживает.


И, конечно же, девайс подойдет для прямого применения — звонков. Помимо весьма удобного приложения номеронабирателя, N9 полностью поддерживает Nokia PC Sync и без проблем позволяет синхронизировать как контакты из vcf/outlook, так и фото/видео/музыку. Есть поддержка и CalDAV и некоторых других сервисов для синхронизации по сети.
Помимо всего прочего, у девайса отличный аудиотракт. Музыка в наушниках звучит отлично, кроме того, есть улучшалки от Dolby, благодаря чему девайс вполне можно юзать как плеер. Сергей похоже так и юзал его, судя по трекам в плейлисте. Само приложение не менее удобное и создавалось для взаимодействие с Ovi Music — аналогом iTunes от Nokia. Уже потом, музыкальный сервис от Nokia начали использовать в устройствах на WP.

А ещё устройство неплохо подойдет в качестве камеры. На 2011 год качество снимков весьма на уровне! Как уже сказано выше, девайс умеет записывать и видео в 720p при 30 FPS.


Полный фотосет есть на imgur.
А ещё смартфон сможет статьи отличной платформой для прохождения отличных мобильных игр — без доната и таймеров!

❯ Заключение
N9 получился первым гиковским устройством, которое могли без проблем использовать и обычные пользователи. Nokia вложили много сил и времени для того, чтобы привнести в N9 революционные по тем временам идеи, да так, что некоторые фишки потом у неё «позаимствовали» сами гиганты индустрии!
И очень хорошо, что история MeeGo не закончилась на этом. Кто знает, быть может эта система когда-нибудь сделает камбэк и скинет обросший кучу легаси Android? А вы как считаете? Жду ваше мнение в комментариях!

Заголовок съел журавль


Play off/on
Эмуляторы и немного собственного опыта, или как прикрутить PS ко всему что можно.
Немного воспоминаний из детства.
Скорее всего у многих в детстве была какая-нибудь консоль. В моем случае денди.

Поначалу играть было практически невозможно (мне лет 5, наверное, было). Причиной тому было то, что в доме (2 этажа, 12 квартир) все хорошо друг друга знали и спокойно заходили к соседям без стука попить чаю. Играл весь дом, были драки за пульт (джойстик). И пока дойдёт очередь до тебя можно было немного подрасти, да ещё этот чёртов кинескоп, который можно было посадить (и другие детские психотравмы). У нас первых во дворе появилась денди и знали об этом тоже все, ещё до того, как купили.
У жены в детстве была сега.
Вот такая прибуда (SEGA) есть у нас, которая через sd карту читает игры.

И в Mortal Kombat на ней, она выносит меня в пух и прах.
Но история не об этом, а о том, как поиграть в PS 1-3 и другие консоли, не имея этих самых консолей.
Для начала задался поиском всевозможных эмуляторов на ПК, перебрал достаточно и остановился на (RetroArch, RPSX3). А так как современные смартфоны вполне себе производительные, на них с лёгкостью устанавливаются те же эмуляторы и коннектятся джойстики. Плюс ко всему можно на тв поставить трансляцию экрана со смартфона и сиди играй, ностальгируй.
К телефону прикрутил (AetherSX2) PS1-2 игры запускал, к примеру вот:



Запустить что-то из PS2 на телефоне было больше спортивным интересом. Попробовал, получилось, даже можно играть. В моем случае телефон — это Sony Xperia xz1 восстановленный, прямиком из Китая.






Не всё играбельно, но во многое можно поиграть, и как я понял пройти. К примеру, сесть с женой вечерком и навалять друг другу в Mortal Kombat или TEKKEN — это многого стоит))
Характеристики пк есть в в этом посте: Неприятности случаются или поиск мастера.
Появилась необходимость приобретения джойстиков, вариантов масса, полазив на сайте объявлений нашёл за 600 рублей пару аналогов dualshock 4 (немного глючных с залипающими кнопками). Перед покупкой попробовал подключить к телефону, все поочерёдно подключились. Отправился домой с надеждой что хотя-бы один получиться собрать полностью функционирующим. Дома не долго думая разобрал, почистил от пыли, поправил залипшие мембраны, собрал и все заработало, без глюков, оба два.

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

Но я упрямый, я пошёл дальше. На данный момент к телеку подключена маленькая коробочка с установленной в неё RetroArch. Если подробнее, то вспомнил про находку коробочки без опознавательных знаков с 4х usb, hdmi, micro usb и lan портами (нашёл в квартире когда переехали в другой город), не зная на тот момент что это такое, убрал в ящик с надписью "может пригодится". Три года ждала своего часа. Любопытства ради раскрутил её посмотреть что это за зверь такой, а это raspberry pi 3, тут щелкнуло что на сайте retroarch видел упоминание о них. Несколько несложных манипуляций (скачивание, запись образа на microsd) и есть коробулька которая может воспроизводить консоли до PS-1.

Игры загружены на usb флешку, джойстики по bluetooth подсоеденены.
Чуть не забыл рассказать про Bluetooth адаптер приобретённых на озоне за недорого, заработал и на raspberry pi.

Делюсь опытом, может кому-то да и сгодится, а я пошёл проходить medal of honor пока жены нет, придёт отберёт.

P. S. По настройкам эмуляторов подсказать не смогу тут я не очень умный, настраивал методом "научного тыка"
Спасибо что дочитали.
"Аквариумист_2_группы"
"Болею аквариумом, увлекаюсь рассеянным склерозом"

Редчайший прозрачный смартфон на FireFox OS — прошиваем и смотрим на LG Fx0 2014 года выпуска

Друзья! Много ли гиковских серийных смартфонов вы знаете на текущее время? PinePhone, Pixel, Nothing Phone, да даже AYYA — выбор не так уж и велик. В 2014 году компания LG представила смартфон для гиков на базе FireFox OS эксклюзивно для рынка Японии — Fx0, который был интересен не только своей системой, но и прозрачным стильным дизайном, под которым можно было рассмотреть некоторые внутренности смартфона. Кроме того, это был самый мощный серийный смартфон на FireFox OS из когда-либо выпущенных. Несколько месяцев назад мне написал читатель с Хабра, предложив подарить такой девайс и попросил написать подробную инструкцию о перепрошивке на Android. Предлагаю сегодня посмотреть на этот уникальный и коллекционный смартфон поближе!
❯ Что за гаджет и почему FireFox OS?
Вероятно, многие читатели вообще никогда не слышали про такую систему, как FireFox OS, но вполне возможно, продолжают использовать её потомка и сейчас. Ещё в начале десятых Mozilla решила выйти на мобильной рынок, припася несколько тузов в кармане:
Тотальная открытость. Вся операционная система должна была быть открытой и свободной для модификации, а не только AOSP — как в случае с Android (маркет, сервисы — всё ещё закрытые и проприетарные продукты Google).
Низкие системные требования. Android по первой вполне неплохо работал и с устройствами с 256мб ОЗУ и одноядерными ARMv6 чипсетами частотой
600мгц. Но FF OS умудрялась чуть ли не летать при таких характеристиках.
Веб-приложения. Концепция системы заключалась в том, что все приложения должны быть написаны с использованием HTML5 + JS. Если очень условно, то это аналог современных PWA приложений (только на FFOS было доступно больше API). А благодаря Cordova, приложения с FFOS можно было бы легко портировать на iOS/Android.
Портируемость. Здесь всё серьёзно: FFOS умеет работать через прокладку libhybris, позволяющую загружать библиотеки и драйвера (формально) от стоковых Android-прошивок. Благодаря чему систему можно было портировать почти на любое устройство с доступными исходниками ядра.

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

Как уже было сказано выше, все приложения под эту систему пишутся на связке HTML5 + JS. Однако немногие знают, что большая часть системы и интерфейса тоже написаны на JS, в том числе некоторые сервисы. Приложениям предоставляются упрощенные, но типичные для мобильных систем API в виде доступа к базе данных мультимедиа/контактов, API для файлов, диалогов и т. п. При этом, несмотря на «веб» корни интерфейса, работает он очень шустро даже на слабых девайсах и имеет некоторую многозадачность.

Из самых известных моделей на FFOS, можно вспомнить ZTE Open, Alcatel Fire E, про который я уже писали конечно же Fx0! Девайс был выпущен эксклюзивно для рынка Японии в 2014 году, под местного оператора au (KDDI), лого которого красуется и на нашем девайсе. В первую очередь интерес к устройству вызывает его прозрачный дизайн, наводящий некоторые мысли о киберпанке. LG видимо хотели подчеркнуть гиковскую составляющую своего нового устройств.

Сама прозрачность корпуса даёт нам разглядеть светодиоды подсветки дисплея, подключенные шлейфы, АКБ, слоты под сим и строение кнопки домой. Кроме того, задняя крышка покрыта интересным рельефом, приятным на ощупь. Кому-то этот дизайн кажется отталкивающим, но как по мне — он классный. Не менее интересна и железная начинка девайса:
Процессор: 2-х ядерный Qualcomm Snapdragon 400 с видео-ускорителем Adreno 305.
Оперативная память: 1.5гб ОЗУ.
Дисплей: 4.7″ IPS матрица с HD-разрешением.
Камера: 8мп/2мп.
ОС: FireFox OS 2.
Для 2014 года это вполне неплохие характеристики для средне-бюджетного аппарата. Похожими хар-ками обладает, например, Galaxy S4 Mini.

Fx0 подарил мне мой читатель Артём с Хабра. Несколько месяцев назад он написал мне и предложил прислать два таких девайса: один в качестве подарка для статьи, другой для того, чтобы я перепрошил его на Android и отправил обратно. Под Fx0 уже был готовый порт CyanogenMod, поэтому в процессе прошивки ничего сложного нет, но Артёму нужна была подробная инструкция, дабы не убить девайсы. У него их оказалось несколько: в своё время он купил по вкусной цене и так они у него лежат новыми, а некоторые даже не распакованы!

Конкретно про опыт использования FireFox OS в 2023 году я писал в статье про Alcatel Fire E. В этом материале давайте прошьём наш Fx0 и посмотрим, на что он способен сейчас!
❯ Прошиваем
Собственно, в этом нет ничего сложного. Работы буквально на 15 минут, благо уже есть готовая и рабочая прошивка CyanogenMod под наше устройство.
Первым делом качаем саму прошивку и TWRP — раздел recovery. Пригодятся драйверы и adb/fastboot.
Теперь нам нужно включить режим разработчика. Идём в настройки -> О телефоне -> Больше информации и включаем галочку режима разработчика. Теперь идем в соответствующее меню для разработчиков и выбираем режим работы USB — нам нужен режим adb.
Подключаем устройство к ПК и открываем командную строку (cmd.exe). Переходим в папку с скачанным adb (например, C:/adb/) и запускаем терминал:
adb shell su

После этого нам нужно сдампить три важных раздела — с специальным режимом обновления lg и настройками модема. Пишем:
dd if=/dev/block/platform/msm_sdcc.1/by-name/laf of=/sdcard/laf.bin
dd if=/dev/block/platform/msm_sdcc.1/by-name/modemst1 of=/sdcard/modem0.bin
dd if=/dev/block/platform/msm_sdcc.1/by-name/modemst2 of=/sdcard/modem1.bin
И затем загружаем их к себе на ПК из памяти телефона:
exit
exit
adb pull /sdcard/laf.bin
adb pull /sdcard/modem0.bin
adb pull /sdcard/modem1.bin

Далее в папке с adb появятся наши бэкапы. Это важно! Можно и систему забэкапить, если хотите потом вернутся на FireFox OS (раздел system). Теперь нам нужно получить доступ к fastboot, дабы загрузить кастомное рекавери. У устройства изначально разблокирован загрузчик, поэтому заморачиваться с разблокировкой не нужно. Однако для того, чтобы войти в него, нужно затереть раздел с режимом обновления LG — тот самый laf. Почему так? Загрузчик LG, при переходе в режим прошивки фирменным софтом, пытается загрузить специальный образ ядра и системы из раздела laf. Если он его не находит — то «сваливается» в обычный режим fastboot. Это работает и на некоторых других устройствах LG тех лет. Снова идем в командную строку:
adb shell su dd if=/dev/zero of=/dev/block/platform/msm_sdcc.1/by-name/laf
Готово! Варнинги в консоли — это нормально.

Теперь пишем в консоли reboot и выполняем команду, одновременно зажав громкость вверх, устройство перейдет в режим fastboot. Теперь нам нужно загрузить recovery, пишем:
fastboot boot twrp_302-madai01.img
Устройство загрузится в режим recovery. Свайпаем ползунок и попадаем в главное меню.

Теперь у нас два варианта: закинуть прошивку на MicroSD флэшку и вставить её в устройство (судя по всему, девайс поддерживает горячую замену), либо загрузить прошивку вообще не прибегая к MicroSD. Я выбрал второй вариант: заходим в Advanced -> Sideload и свайпаем полузнок. После этого, устройство «переподключится» к ПК и мы можем просто написать:
Готово! Теперь девайс прошьется сам. Можно сделать вайпы и перезагрузится в систему. Вероятно, кто-то спросит, почему всё так легко и откуда тут даже разметка памяти под Android? Потому что изначально FireFox и использует стандартную разметку андроида, что и позволяет легко портировать их на устройства под управлением каждой из них.
Если мы хотим вернуться на FFOS, то можно взять образ /system/ вот тут. Прошить можно из под TWRP через adb с помощью команды:
dd if=/sdcard/jp-system.img of=/dev/block/platform/msm-sdcc.1/by-name/system
Делаем вайпы и ребут. Дальше всё как обычно — настраиваем язык, подключаемся к сети и т. п.
❯ Юзаем девайс
Ну что ж. Устройство прошито и теперь работает на базе чистого Android 4.4 — никаких гугл-сервисов, ничего лишнего. Как оно работает теперь? Давайте узнаем!

Сама по себе прошивка достаточно стабильная. Нет ни зависаний, ни особых багов, а сам девайс работает очень шустро. Но к сожалению, уже даже 4.4 потихоньку начинает умирать: например, WhatsApp перестанет работать осенью этого года. Однако, некоторая часть нужных приложений все ещё работает и поэтому смартфон может оказаться полезным!


Например, здесь все еще работает клиент ВК Kate Mobile, через который можно посидеть не только в ВКшечке, но и послушать музыку через местный стриминговый сервис. Однако могут возникать проблемы при воспроизведении видео, причем только некоторых. Работает и Telegram, который пока ещё поддерживает все устройства с Android 4.2 и выше.

Стандартный браузер уже сильно устарел и едва ли открывает современные страницы. Поэтому накатываем последнюю версию Chrome для 4.4 — 81. Он пока еще может открывать большинство сайтов, но на Pikabu/DTF уже ломается верстка.


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

Кроме того, здесь очень неплохая камера для своих лет. 8мп матрица выдает достойную картинку, на уровне флагманского Galaxy S4 2013 года выпуска. Однако есть важный нюанс: в предпросмотре кадра картинка получается мыльная, но сами фотографии сохраняются вполне неплохими. Оцените сами:





Ну и конечно же игры! Как раз отличная возможность вспомнить 2012-2014 годы в мобильном гейминга и поиграть в годноту тех лет. Балдеж!
❯ Заключение
Смартфон получится очень интересным, но для некоторых весьма противоречивым. Ещё во время анонсов я слышал от своих читателей мнение о том, что он невзрачный, но лично я считаю что он наоборот, весьма и весьма симпатичен! Это действительно необычный, шустрый и интересный гаджет, который должен был получить продолжение!
Но увы, LG уже более года назад закрыли свое мобильное подразделение и ушли с рынка мобилок. А жаль, ведь зачастую у них выходили очень годные девайсы — абы какую компанию к работе над Nexus не привлекут! А вы как считаете? Жду ваше мнение в комментариях!
Статья подготовлена при поддержке компании TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать новые статьи каждую неделю!

Топовые КПК из нулевых — что могли тогда и что могут сейчас?

Прошло уже целых 16 лет с момента выхода первого «Сталкера» — игры, которая получила статус культовой на территории пост-советского пространства. Одним из самых важных геймплейных атрибутов сталкера всегда был карманный персональный компьютер, или кратко — КПК. Этот класс устройств был очень популярен в середине нулевых среди тех, кому было мало функционала обычного кнопочного телефона или даже Symbian-смартфона. Недавно мне подарили целых два таких гаджета, да ещё и с аксессуарами, которыми потенциально могли пользоваться сталкеры — SDIO GPS-модуль и карточка MMC. Давайте посмотрим на эти крутейшие штуки спустя почти 20 лет после выхода!
Зачем вообще нужны были КПК?
Сейчас многие школьники и студенты слышать не слышали о таком классе устройств, как КПК. Их функции уже давно выполняет любой дешевый смартфон за пару тысяч рублей, да и сами портативные гаджеты стали в разы мощнее. Однако, так было не всегда: ещё в начале-середине двухтысячных, телефоны уже стали достаточно функциональными для того, чтобы через них можно было чатиться в аське, играть в 3D игры и даже сёрфить в примитивном WAP-интернете.

Однако некоторому проценту пользователей и этого было мало. Кто-то предпочитал иметь почти полноценный компьютер в кармане, с которого можно было и вордовский документ подправить, и в топике на linux.org.ru отписать и почитать книгу на большом экране высокого разрешения — целых 240×320! Кроме того, портативные девайсы сами по себе хранили некоторую часть личности хозяина, что для гиков было очень важно: кто-то делал свои темы на сименс, а кто-то разрабатывал свои виджеты для экрана «Сегодня» на своем КПК.

Именно поэтому в нулевых было не редкостью встретить человека, который имел при себе сразу два устройства — простой кнопочник для связи/СМС и КПК для всех остальных задач, включая развлечения. Со временем, производители объединили два разных устройство в одно, которое называлось коммуникатор.

В ноутбуках тех лет часто можно было встретить слоты расширений — PCMCIA, которые позволяли расширять функционал устройства не только за счёт уже набравшего популярность USB, но и подключая настоящие карты расширений напрямую в шину PCI ноутбука. Не обошла эта тенденция и КПК, которые также поддерживали возможность расширения функционала устройств за счёт карточек SDIO. Эти карты вставляются в слот для SD-флэшек и дополняют функционал устройства, например, GPS-модулями, FM-тюнерами, ТВ-тюнерами и даже цифровыми камерами! У некоторых владельцев КПК было несколько подобных модулей на все случаи жизни, а поскольку Flash-памяти на устройствах было мало, частенько можно было видеть 2-3 карточки в бумажнике + SDIO модули. Одна флешка для музыки, другая для видео, третья для программ.

На чём работали?
Строго говоря, КПК далеко не ограничивались известными моделями от HP и Dell. За рубежом также были популярны модели Palm Tungsten на базе собственной операционной системы PalmOS. Кроме того, отчасти КПК (они всё же ближе к коммуникаторам) можно было назвать ранние устройства от BlackBerry, которые отличались наличием физической QWERTY-клавиатуры и бизнес направленностью.

КПК от Palm же отличались тем, что их система была однозадачной, но при этом весьма стабильной, шустрой и под неё было относительно легко программировать. Благодаря этому, под Palm начали появляться программы, в том числе и платные шаровары, а для их распространения служили различные сайты — например, таковым является hpc.ru . В РФ же, вообще частенько на развалах с дисками продавали не только игры/программы, но и различный контент, как для телефонов, так и для КПК!

Но сегодня речь пойдет о КПК на базе ОС Windows Mobile — адаптации встраиваемой системы Windows CE под управление стилусом. В своё время, именно WinCE занимала ту нишу, которую занимает сейчас Android — полностью кастомизируемая, открытая (исходники можно было посмотреть и скомпилировать в Platform Builder, но системане свободная) ОС, на которую можно деплоить любой код и под которую достаточно легко программировать.
Сегодняшние герои
Сегодня мы с вами рассмотрим два КПК от компании HP, настоящего мастодонта мира портативных компьютеров тех лет, с которым серьезно конкурировал только Dell с серией Axim и в какой-то степени Samsung с серией SCH. Оба гаджета мне подарили читатели!

Первым станет iPaq rx3715, поступивший в продажу в 2004 году по цене 499$, или около 13.500 рублей по тому курсу. Это было дорогое High-End устройство, которое было нацелено не столько на бизнес-сектор (как это обычно бывает с таким ценовым сегментом), а на мультимедийные возможности и развлечения. И действительно: помимо стандартных фич типа проигрывания музыки и просмотра сконвертированного AVI видео, у устройства появилась камера аж на целых 1.2мп, с соответствующей программной поддержкой в виде фоторедактора.

Процессор: Samsung S3C2440 на частоте 400мгц. Один из первых ARM-процессоров, сравнившийся по производительности с Intel XScale. Его продолжали использовать вплоть до 2008-2009 года в бюджетных RoverPC.
ОЗУ: 64мб SDRAM — стандартный «джентльменский» набор. Довольно часто, моддеры практиковали операцию замены двух банок по 32мб, на две банки по 64, получая удвоенный объём оперативной памяти! Такую услугу оказывали даже в Москве когда-то.
Память: 128мб Flash памяти. По тем временам это было действительно довольно много.
Дисплей: 3.5″ 240×320 матрица, выполненная по технологии TN.
Камера: модуль на 1.2мпкс, плюс «зеркальце» для съёмки селфи.
ОС: Windows Mobile 2003
Внешние интерфейсы: разъём для крэдлом для возможности синхронизации с ПК, 3.5мм джек, SD
Весьма нехило, да?
Вторым устройством станет легендарный КПК iPaq hx2490, вышедший в 2005 году по цене 399$. Несмотря на несколько меньший ценник, чем у rx3715, hx2490 тоже был High-End устройством, в котором заметно улучшили часть аспектов, по сравнению с предшественником! Помимо стандартных возможностей КПК, он выделяется наличием сразу двух слотов под флэшки — CF (CompactFlash) и SD, оба которые можно использовать для подключения внешних аксессуаров. Кроме того, HP поставили свежий процессор XScale, в котором подняли частоту более чем на 100мгц. Для мобильного процессора, это очень достойный результат!

Процессор: Intel PXA270, работающий на частоте 520мгц. Несмотря на то, что Intel в даташите заявляет о возможности разгона до 624мгц, многие устройства продолжают работать на частоте 400мгц (для меньшего энергопотребления).
ОЗУ: 64 мегабайта SDRAM памяти. Где-то пишут что 128, возможно, в каких-то других ревизиях устройства (у меня hx2490b).
Память: 192мб Flash памяти — это очень хороший объем по тем годам! А учитывая возможность установить CF и SD флэшку одновременно, можно было получить что-то близкое к тому, что мы сейчас ощущаем с айфонами на 1тб. Не зря ведь Стив Джобс в свое время рассказывал про 1.000 песен в кармане!
Дисплей: Всё та же 3.5″ TN матрица с разрешением 240×320. Конечно, маловероятно что она взаимозаменяема с матрицей rx3715 (это вообще беда с поиском дисплеев на коммуникаторы), но выполнена по той же технологии.
ОС: Windows Mobile 5
Внешние интерфейсы: док-станция, CF (PCMCIA), SD, ИК-порт, Bluetooth.
Смотрим на систему
Лично у меня, WinMobile в любых его проявлениях до сих пор вызывает умиление и приятные ностальгические чувства. Думаю, многие помнят то ощущение (особенно будучи детьми-подростками), когда ты берешь в руки КПК и видишь, что визуально он очень похож на обычную десктопную винду с классической темой оформления. Подобные попытки перенести интерфейс Windows на мобильные рельсы были даже в начале 10’ых, с всякими Windows Vista Launcher и.т.п

В отличии от большинства кнопочников тех лет, у WM была самая настоящая многозадачность, а с специальным виджетом, который реализовывал подобие панели задач, можно было моментально переключаться между приложениями. При этом, в WM не система управляет, какое приложение когда должно работать, а именно пользователь. Запустил порт «героев» и оставил на недельку в памяти висеть? Развернешь — и ничего абсолютно не изменится, никаких «скриншотов», которые показываются пока приложение перезапускается, как на айфоне пользователь не увидит.

И конечно же, у WM были два самых известных атрибута Windows в СНГ: сборки и зависания. И если зависания заканчивались максимум артефактами на экране и последующим зажатием кнопки RESET, то сборки — это отдельная тема. И если у сборок десктопной «винды» обычно репутация не очень хорошая, то сборки WM наоборот стремились серьезно улучшить аппарат и привнести в него новый функционал. На HTC Kaiser, например, люди вручную ставили драйвер на GPU, который там не был задействован, а на многих устройствах люди портировали новые версии системы, даже на КПК 5-6 летней давности!

Для разработки своих прошивок были т.н «кухни» — наборы программ, позволяющие распаковывать архив с системой (nb0) и модифицировать ядро (nk), менять программы, подменять драйверы — в общем, делать всё что угодно с устройством. Довольно много людей было вовлечено в эту моддерскую кухню, поэтому найти «стоковый» КПК было достаточно сложно.
Какие возможности были доступны людям? Вообще, на самом деле практически такие-же, как и современному пользователю смартфонов. Чего стоит хотя-бы полноценный интернет через Pocket IE, и не менее полноценный, но экономичный через Opera Mini:

Естественно, в любом мультимедийном гаджете должен быть продвинутый аудио и видеоплеер. С первым отлично справляется Windows Media Player, интерфейс которого, даже сейчас наводит приятные флешбеки со времен использования WinXP. Кроме WMP, под WinMobile был порт WinAMP, который, тем не менее, был довольно сырым. С музыкальной точки зрения, тут есть и 3.5мм разъём. С видео WMP справлялся так себе: там был только софтовый декодер, который вытягивал 3gp и специально сконвертированный avi. Негусто, но нам хватало для потребления контента!

Гораздо круче были устройства с видеоускорителем, поскольку у них была возможность декодировать h263 видео в реальном времени и необходимость в конвертации отпадала. Когда-то, с таких гаджетов можно было даже YouTube смотреть!

Легендарный Portege G900 имел встроенный GPU GoForce 5500… без поддержки 3D графики! В зависимости от модели лицензирования, Nvidia предлагали GPU с поддержкой 3D ускорения и видео или… только видео? Какие мощи пропадали!
Кроме того, КПК использовали как читалки электронных книг. По тем временам, 3.5″ считался большим дисплеем, а в отличии от CSTN матриц обычных телефонов, на их яркой и цветастой матрице хорошо читался текст. Немудрено, что под WM было кучу программ для чтения книг — от FB2, до PDF. Кто-то даже использовал КПК (хотя скорее всё же коммуникаторы с QWERTY-клавиатурами) для подготовки диссертаций и Pocket Word или подготовки таблиц в экселе.

Ну и конечно-же игры, много и разных! Из-за простоты программирования под WinMobile и предоставления Microsoft специального API, довольно многие разработчики шароварок быстро перешли на КПК и делали свои игрушки. Даже PopCap, разработчики Plants Vs Zombies, портировали Bejeweled на КПК. Microsoft предоставляла два API для разработчиков: GAPI (GameAPI) — позволял получить прямой указатель на буфер кадра (фреймбуффер) поверх всего остального интерфейса системы и писать картинку в него напрямую, в обход медленного GDI, а также D3D Mobile — эдакую упрощенную реализацию Direct3D 9, которая в основном работала в режиме программного рендеринга.

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

Кроме того, есть конечно-же и 3D игры от Gameloft — тот же Asphalt Urban GT 3 например

Библиотека игр под КПК расширяется благодаря JBlend — реализации J2ME на Windows Mobile, которая позволяет играть в игры с обычных кнопочников и эмуляторам всех сортов. Тут и NES, и SEGA, и иные старые платформы. Про PS1, конечно же, можно сразу забыть.

Ну а ещё у hx2490 есть ИК-порт, который позволяет ему быть пультом для многих устройств. Софта для ИК-порта под WM достаточно, поэтому даже в роли пульта, КПКшник может пригодится!
Сталкерские страсти
Одной из самых известных игр, где КПК был неотъемлемой частью был конечно же Сталкер! У каждого сталкера был свой личный PDA, подключённый к общей сталкерской сети, которая учитывает ранг, группировку и геолокацию владельца, а также содержит в себе карты зоны и разделы с информацией о фауне/локациях и.т.п. Кроме того, сталкерам был доступен радиоканал с текстовыми и звуковыми сообщениями. Как такое могло бы работать в реальном мире? Например, с помощью SDIO RF-трансмиттера, который вставлялся бы в КПК и ловил сигнал с эдакой базовой станции, которая была бы на каждой заселенной локации.

Теоретически, для коммуникаций мог использовать и Wi-Fi модуль: уже тогда были возможности покрытия достаточно больших территорий одной Wi-Fi сетью. Организовали себе эдакую «локалку» и сидим все вместе, парой сотен человек. Но что делать с геолокацией? Здесь к нам на помощь приходят внешние GPS-модули, коих было много-много самых разных. И Bluetooth:

Этот у нас от RoverPC N7

И даже CF (PCMCIA):

Конечно в то время уже были настоящие тру-Linux КПК от Nokia, которые они называли интернет-планшетами. Но обычные WM PDA уже успели достаточно подешеветь к 2007 году и сильно-БУ модели стоили довольно небольших денег, поэтому выбор разработчиков КПК как устройства для коммуникаций очевиден. И какой же вайб ловил человек, который купил себе в 2007 году диск с игрой, вставил, а там КПК, очень похожий на iPaq/Samsung SCH? 🙂
Логическое заключение
КПК есть за что ценить и любить. В конце концов, именно они стали ближайшими предками таких знакомых нам смартфонов и планшетов. И если внимательнее присмотреться, то действительно приходишь к выводу: а ведь не так уж и много и изменилось за всё это время! Да, подросли мощности, интерфейс стал шустрее и симпатичнее, но возможности, по сути, остались те же!
Цените гаджеты из молодости и не выкидывайте их! Это же память, которую можно и нужно хранить! 🙂

113 лет со дня рождения Конрада Цузе – всемирно признанного изобретателя компьютера

О биографии Цузе написано немало. Мы не будем повторять уже написанное, а рассмотрим в деталях – как же был создан первый компьютер и что послужило для изобретателя «вдохновением».
Конрад Цузе родился 22 июня 1910 года в Берлине. Столица тогдашней Германской империи, последующих Веймарской республики, Третьего рейха, ГДР и нынешней ФРГ на протяжении большей части прошлого века играла роль одного из центров Европы. Не только политических – как колыбель трех крупнейших войн (двух мировых и одной «холодной»), – но и научных. В Берлине Планк создал квантовую физику, а Эйнштейн – общую теорию относительности. К ним можно добавить и Цузе с его первым программируемым компьютером.
В двухлетнем возрасте будущий компьютерный гений вместе с родителями переехал в городок Браунсберг в Восточной Пруссии, где потом окончил школу. Там продвинутый ученик сконструировал действующую модель сложного устройства – еще не вычислительной машины, а «всего лишь» машины для размена монет. И проектировал город будущего – на почти 40 миллионов жителей!
Потом семья перебралась в город Хойерсверда под Дрезденом, где Цузе закончил колледж. И в 1928 году вернулся в столицу, где поступил в знаменитую Берлинскую высшую техническую школу (ныне Берлинский технический университет).
Я специализировался в области машиностроения. Упражнения по технической графике отрезвили меня. Они оставляли мало свободы для творчества, все стандартизировалось и фиксировалось: толщина линий, вид мерок, даже места, где должны были располагаться мерки. Изучение архитектуры показалось для моего внутреннего художника заманчивым миражом. Перешел на факультет архитектуры — и снова разочаровался. Дорические и ионические колонны меня совершенно не заинтересовали. Может, из меня и вышел бы сносный архитектор, кто знает? Однако я снова переключился; на этот раз на том же факультете, но на другой специальности. Инженер-строитель теперь казался мне идеальным сочетанием инженера и художника. Однако я испытывал ярко выраженное отвращение к статическим расчетам, которыми мы, студенты-строители, мучились. Я восхищался профессорами, которые освоили эту арифметику, как полубоги из другого мира.
Несколько позже молодому Цузе в голову ещё придет идея, как оптимизировать работу с расчетами, но в то время его интересовали несколько другие вопросы. Например, дорожное движение. В то время в Берлине только-только появились светофоры, и на дорогах творился «полный хаос». Цузе придумал идею «зелёной волны», но…

….с помощью графиков я попытался применить эту идею к берлинскому Фридрихштадту, что мне не удалось. В пределах берлинского Фридрихштадта такая система также не может нормально функционировать. Это сегодня мы уже знаем, что «зеленые волны» можно использовать в первую очередь на магистральных дорогах, где приходится идти на компромиссы в отношении пересечения дорог.
Также Цузе увлекался и фотографией – и как искусством, и как процессом.

Я занимался всевозможными мелкими и крупными разработками — от автоспусков до полностью автоматических аппаратов, но у меня не было опыта для практической реализации этих идей. И я был очень расстроен, когда автоматические фотобудки, которые я хотел изобрести сам, были представлены под названием Photomaton. Они работали по методу, обратному моему, и предоставляли готовые изображения за восемь минут.
В 1935 году Цузе покинул свою alma mater с дипломом «гражданского инженера». Поработав какое-то время в немецком представительстве компании Ford Motor (где он занимался в основном рекламой), он перешел на работу на авиастроительный завод компании Henschel в берлинском пригороде Шенфельде. Там молодого сотрудника ждала уже «работа по специальности» – инженерно-конструкторская.
И именно там, проделывая ненавистные утомительные вычисления на бумаге, Конрад Цузе наконец задумался не о фотобудке или светофорах, а о сказочной «палочке-выручалочке», которая избавила бы его от этой бумажной рутины. О вычислительной машине.

…вскоре я бросил эту работу и устроил изобретательскую мастерскую в квартире родителей. Я хотел полностью посвятить себя компьютеру… Конечно, мои родители не были в восторге от этого проекта, но они были настолько уверены в моих способностях, что поддерживали меня, как могли. Позже мне даже разрешили использовать самую большую комнату в их квартире для установки первого, еще несколько [устройство весило полтонны] неуклюжего аппарата. Меня поддерживали и друзья с учебы. Они помогли деньгами, которые сегодня могут показаться скромными, но без которых я не смог бы получить даже необходимые материалы для работы. Первыми спонсорами стали старый школьный друг Герберт Вебер из Браунсберга и моя сестра. Конечно же, всегда помогали и родители. Те, кто не мог помочь финансово, вызвались помогать мне в мастерской [приятели Цузе вручную выпилили 20000 пластин для переключателей].
К 1938 году машина была собрана. Она получила название Z1 – по первой букве фамилии своего создателя. Примечательно, что изначально Цузе назвал изобретение V1, то есть, ФАУ, что называется «без задней мысли» — он не знал, что спустя несколько лет так назовут известные на весь мир ракеты. Это еще сослужит службу, но позже.
Как выше мы уже отметили, вес компьютера составлял около 500 кг и занимал он самую большую комнату в родительской квартире. Для ввода данных установили клавиатуру из переделанной печатной машинки, а для вывода результатов — панель с мигающими лампочками. Машина работала на моторе от пылесоса, но у неё были почти все элементы современных компьютеров: регистры памяти, арифметико-логическое устройство, интерфейсы ввода и вывода.
У Z1 был отдельный блок памяти из 64 слов по 22 бита. Он умел работать с 22-битными числами с плавающей запятой. Машина складывала числа в течение 5 секунд, умножала — 10 секунд. Чтобы получить результат, она смещала пластины в определённом порядке. Условных переходов и циклов не было. Программы (а у компьютера была система из 9 команд) в памяти не хранились, поэтому каждый раз их вводили вручную.
Конечно, Z1 был демонстрационной моделью без возможности практического применения. Он постоянно ломался и ошибался в вычислениях. Но прототип доказал, что создать программируемую машину возможно. Сегодня копия первого в мире компьютера, воссозданная в 80-х под руководством Цузе, хранится в Немецком технологическом музее.

Тем временем политические события в Германии шли своим судьбоносным ходом. На дворе стоял конец 30-х годов. Цузе вовсю работал над Z2, когда его призвали.
…это может показаться наивным, но для всех нас стало горьким разочарованием то, что разразилась война. Политические события застали меня совершенно неподготовленным. Меня оторвали от работы и из-за краткого обучения в рейхсвере призвали в пехоту. Устройство Z2 близилось к завершению, когда меня призвали. Доктор Паннке [обратился в мою контору с просьбой об отпуске на том основании, что я должен сдать свою работу должным образом. Он написал, что я работаю над большой научной вычислительной машиной, которую также можно использовать в самолетостроении. Я передал это письмо моему капитану, который немедленно переслал его. Командир батальона, майор, вызвал меня, сначала сказал мне, что я, как совсем молодой солдат, все равно не имею права уходить, и продолжил: «Что вы имеете в виду, что ваша машина может быть использована в самолетостроении? Немецкие ВВС безупречны, на что еще рассчитывать?» – Что я должен был сказать в ответ? Отпуск не был предоставлен.
Благодаря ходатайству влиятельных инженеров и ученых, в 1940 году Цузе демобилизовался, вернулся в Берлин и стал членом гитлеровской научной элиты. Работа над созданием релейной электронной вычислительной машины возобновилась. Цузе и помогавший ему Шреер обратились за финансовой поддержкой к военному руководству, предлагая разработать современное устройство для военно-воздушных сил Германии. Такая машина могла быстро обрабатывать сложные расчеты, повышая тем самым эффективность тактической авиации. По предварительной оценке, на создание подобного аппарата потребовалось бы около двух лет. Но руководство вермахта было убеждено, что за такой срок нацистская Германия уже достигнет мирового господства. В итоге – отказ.
Зато обращение к директорам берлинского авиационного завода «Henschel», производившего тактические бомбардировщики, принесло успех. Руководство завода решило использовать компьютерные технологии в процессе создания военной техники. Цузе был предоставлен специальный отдел с лучшими инженерами-электронщиками компании. И уже в конце 1940 года Z2 была введена в эксплуатацию. Новый компьютер был оснащен цифровым процессором на основе реле и электровакуумных ламп (использование ламп – идея Шреера). Z2 автоматически высчитывал ряд параметров геометрии стабилизаторов авиационных бомб, преобразовывал их аналоговое значение в двоичную систему счисления, вычисляя необходимые данные по заранее введенным оператором формулам, и выдавал готовый результат в виде десятичных чисел. Результаты отправлялись сразу в производственный цех.
В том же году Цузе начал разработку Z3 — машины, полностью построенной на реле, но с логической структурой от Z1 и Z2. Она была готова к эксплуатации в 1941 г., за 4 года до разработки американских ученых — электронного цифрового компьютера ENIAC. Отчасти к Z3 и особенно к Z4 относятся слова «машина для фюрера».
В 1942 году мы начали производство Z4, улучшенного варианта Z3. Z4 также был ориентирован на электромеханику. Арифметический блок и элементы управления были построены с реле и шаговыми переключателями. Чтобы придать устройству большую гибкость со стороны программирования, было запланировано несколько этапов расширения с несколькими сканерами и перфораторами. Работа над Z4 была сильно затруднялась бомбардировками. Пришлось трижды менять местоположение в Берлине во время войны. В одну из бомбежек я в очередной раз ходил по дому искать упавшие зажигательные бомбы и, оказавшись на лестничной площадке, услышал над собой треск. В последний момент я прыгнул под дверной косяк, и рядом рухнула лестница. Я с трудом пробирался по обломкам в подвал. Начался пожар, и мне не удалось потушить огонь в ручным распылителем. Дом сгорел.
Сам изобретатель не пострадал, но под развалинами погибли все чертежи и прототипы его вычислительных машин – Z1, Z2 и Z3. Лишь частично законченная новая модель Z4, над которой Цузе работал начиная с 1942 года, была спасена, потому что незадолго до бомбардировок он догадался переправить чертежи и «железо» в другое место. Сначала – в новое помещение на другой берлинской улице, а затем на простой подводе накрытые ветошью части новейшего компьютера увезли в тихую баварскую деревню Альгой, для военной авиации союзников никакого интереса не представлявшую. Туда же в феврале 1945-го, за считанные месяцы до падения Берлина, перебрался и сам Цузе.
В баварской глуши, где ничего не напоминало о стремительно шедшей к своему исходу войне, Конрад Цузе сделал свое второе замечательное изобретение, которое обеспечило ему заслуженное место в компьютерной истории. Он разработал – как раз специально для упомянутой модели Z4 – первый в мире высокоуровневый язык программирования – «Планкалкюль» (Plancalcul – буквально «плановое счисление»), содержавший многие стандартные детали современных машинных языков. До всем известного FORTRAN оставалось еще целое десятилетие… Кстати, на этом же языке была составлена и первая в мире шахматная компьютерная программа.

Незадолго до падения Берлина вермахт решил эвакуировать машину Z4 на запад, в Гёттинген. Конрад Цузе продолжил работу над Z4 в Гёттингене, но ему пришлось снова перевозить устройство, чтобы оно не оказалось ни у советской армии, ни у союзников. Нацисты хотели, чтобы Цузе и его Z4 перебрались в Дора-Миттельбау, концентрационный лагерь, в котором узники строили ракеты Фау. Цузе решил иначе и сбежал на юг, в небольшой немецкий городок Бад-Хинделанг почти на границе со Швейцарией. Старое название машины очень пригодилось, когда пришлось прятать незавершенную Z4. Патрули, наслышанные о Фау-1 и Фау-2, беспрепятственно пропускали груз с названием Фау-4, даже не заглядывая в кузов. Так вычислительная машина, создававшаяся «для фюрера», или, точнее, для вермахта ушла на гражданку.
Он спрятал компьютер в сарае и переждал войну, продавая гравюры из дерева местным фермерам и американским войскам, а в 1946 создал фирму Zuse-Ingenieurbüro Hopferau. Капитал был привлечен благодаря швейцарскому ETH Zurich и продаже опциона на патенты фирме IBM.
В дальнейшем под его руководством и при непосредственном участии были созданы еще три модели «линейки Z» – Z5, Z11 и Z22. В последней модели для памяти были впервые применены магнитные носители.
К 1967 году Zuse KG всего продала 251 компьютер на общую сумму около 100 миллионов марок, что тогда, в эпоху «до персоналок», можно считать успехом. Но затем наступили финансовые проблемы, и компания была продана электронному гиганту Siemens AG. Главе купленной фирмы новый владелец предложил пост специалиста-консультанта, который был с благодарностью принят.
Завершив свою бизнес-деятельность, от научной Конрад Цузе отказываться не собирался. И занимался ею до последних лет жизни, свободное время отдавая своему хобби – живописи. Сегодня несколько этих красочных завораживающих полотен можно посмотреть в экспозиции берлинского Музея немецкой техники (Deutsches Technikmuseum). Рядом с другими, гораздо более известными свершениями Конрада Цузе – дюжиной его вычислительных машин.


Больше интересных статей в нашем блоге на Хабре. Недорогие сервера для ваших проектов — здесь.