Существует огромное количество кастомных прошивок для различных устройств. Кастомные прошивки вселяют новую жизнь в старые девайсы, добавляют новые возможности и позволяют получить больший контроль над устройством. Однако иногда можно встретить прошивки с экзотической и нестандартной функциональностью. Сегодня мы познакомимся с Maru OS — основанной на Android 5.1.1 прошивке, которая при подключении смартфона к монитору превращает его в полноценный комп на базе Debian. Мы не только погоняем прошивку, но и пообщаемся с ее создателем.

 

Требования и установка

Пока что прошивка находится в стадии закрытого бета-тестирования и доступна только для Nexus 5. Чтобы получить функцию десктопа, также понадобится переходник SlimPort и HDMI-кабель. Автор заявляет об официальной поддержке определенных моделей переходников, но на самом деле подойдет практически любой (например, китайский Qumo за 990 рублей). Дополнительно понадобятся беспроводная мышь и клавиатура, которые могут работать с мобильными устройствами без специального USB-ресивера.

Обычные мышь и клаву подключить не удастся, так как, хоть в адаптере SlimPort есть гнездо microUSB (или полноценный USB-выход), в которое можно воткнуть OTG-кабель, контакты data и ID на него не выведены. Но можно использовать эмулятор Bluetooth-клавы и мыши True Mouse/KB, установленный на другой смартфон или планшет.

Десктоп Maru
Десктоп Maru

Устанавливается прошивка из образа, который прошивается через fastboot. Однако есть вариант поставить ее рядом с основной с помощью MultiROM. Для этого необходимо получить root, установить MultiROM Manager из маркета, прошить с его помощью кастомное рекавери, патченное ядро и необходимые файлы. Далее следует закинуть прошивку на виртуальную карту памяти, перезагрузиться в recovery и установить ее через меню Add ROM.

Установка прошивки с помощью MultiROM
Установка прошивки с помощью MultiROM

Maru OS базируется на чистом Android 5.1.1 Lollipop, собранном из AOSP, а потому не включает в себя ни маркет, ни другой софт Google. Чтобы обеспечить синхронизацию с Google и возможность устанавливать софт, необходимо дополнительно поставить gapps’ы. Причем, так как свободного места в /system в прошивке почти нет (все отдано под Debian), установить удастся только пакет gapps-pico, включающий в себя лишь маркет и синхронизацию контактов.

Приложения телефона после первой загрузки
Приложения телефона после первой загрузки
Экран «О телефоне»
Экран «О телефоне»

На прошивку нормально ставится SuperSU, Xposed framework, работают обычные проги, однако иногда отваливается радиомодуль (секунд этак на тридцать). В общем, обыденный, ничем не примечательный Android.

 

Debian

Все становится намного интересней, если в смартфон воткнуть переходник SlimPort и подключить к HDMI-входу телевизора или монитора. Спустя некоторое время на экране появится полноценный рабочий стол Debian.

Запущенный терминал, браузер, проводник
Запущенный терминал, браузер, проводник

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

С установкой дополнительного софта нет никаких проблем. Обновляем индекс пакетов (в ответ на запрос пароля вводим maru):

sudo apt-get update

Ставим пакет imagemagick:

sudo apt-get install imagemagick
Установка софта
Установка софта

Все о’кей, пакет благополучно выкачивается из Сети, устанавливается, и нам становятся доступны имеющиеся в нем команды (import, convert, montage...). Таким же образом можно ставить любые пакеты Debian, собранные для платформы ARM. По уверениям автора, они все должны работать. Что касается предустановленного софта, то в качестве офиса на десктопе стоит LibreOffice, а в качестве браузера — Iceweasel (по сути — переименованный Firefox). Нормально работают Vim, Google Docs, GCC, Node.js, Bluefish, Yeoman, GIMP. Доступен SSH-сервер.

Если же необходимо обменяться файлами с Android, то можно закинуть их в один из подкаталогов /mnt: DCIM, Downloads, Movies и Music. Но можно переконфигурировать Maru так, чтобы открыть полный доступ к карте памяти. Для этого достаточно добавить в конец файла /data/media/0/multirom/roms/maru-v0.2.2-update-hammerh/data/maru/containers/jessie/ строчку

lxc.mount.entry = /sdcard mnt/sdcard none bind,optional,rw,create=dir

Сделать это можно из рекавери или с помощью проводника, у которого есть root-доступ.

Fun fact

Иногда пользователи видят на экране телефона интерфейс Android и Debian в режиме split screen. Как признал разработчик, это секретная фича для отладки, которую не должны были увидеть простые смертные. Происходит это из-за некорректной отработки вывода HDMI.

В связи с тем что прошивка сырая, на десктопе наблюдаются следующие баги и недостатки:

  • Не работает звук, так что послушать музыку и посмотреть видео не удастся.
  • Аудио с телефона передается через HDMI на монитор.
  • В проводнике не работает Browse Network, выдает ошибку.
  • Часы десктопа не синхронизируются с часами телефона.
  • Не работают кнопки на подключенных к телефону Bluetooth-наушниках и автомобильных устройствах. Система мониторит клавиатуру и мышь, поэтому часть команд перехватывается и не отрабатывается.
  • Ресурсоемкие проги начинают заметно тормозить, а поставленная для теста игрушка сhromium-bsu после запуска выдает слайд-шоу на 5–10 fps (хардварное ускорение пока не поддерживается).
  • Не получится поставить GNOME или KDE, по умолчанию используется десктоп на основе XFCE.
  • На данный момент не поддерживается многопользовательский режим (фактически в системе только два юзера: root и maru).
  • Десктоп отображается, пока работает экран устройства. Когда экран потухнет, потухнет и десктоп. Чтобы избежать этого, автор рекомендует включать режим Daydream (Настройки -> Дисплей -> Заставка).

Ну и самый главный минус — ужасная прожорливость системы при запущенном десктопе. Причем это наблюдается даже с подсоединенной зарядкой. С подключением к порту USB на компе живучесть устройства составляет около четырех часов. Однако, используя зарядник на 1 A, можно удержать батарею на одном уровне. С другой стороны, без подключения к монитору минималистичная система выдает больше жизни батарейки, чем моя основная 6.0.1.

 

Рубрика «Спросим у разработчика»

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

 

Привет. Расскажи немного о себе.

Привет, меня зовут Preetam D’Souza. Я из Индии, но еще в детстве переехал вместе с семьей в США. Благодаря моим родителям я вырос с твердой уверенностью, что ничего невозможного не существует. Родители всегда поощряли мои интересы, которые большей частью касались электроники и компьютеров — ими я был окружен еще с младенчества. Мой отец инженер, причем лучший инженер из всех, кого я знаю, поэтому у меня осталось много детских воспоминаний о том, как я бесконечно листал журналы и брошюры, сравнивая частоты процессоров AMD и Intel в девяностых, и учился собирать ПК.

Я окончил Университет штата Пенсильвания со степенями в области бизнеса и информатики. За время учебы я успел поработать над двумя интересными проектами. Первым был dampOS, UNIX-подобная ОС, работающая в пространстве пользователя (как обычное приложение. — Прим. ред.) и оснащенная собственным планировщиком, основанной на FAT файловой системой и консолью. Вторым проектом был RFIDash, система управления товаром для розничных магазинов с помощью RFID-меток. На каждый товар клеилась метка, и можно было с удобством вести учет, быстро считывая метки в параллельном режиме. Ну и как полагается, я играл на соло-гитаре в рок-группе колледжа.

После третьего года обучения я проходил стажировку в Amazon Web Services (AWS), а затем перешел к ним на работу. Я провел год в AWS в составе небольшой группы, работавшей над новым облачным сервисом. Моей задачей была оптимизация производительности и разработка приложения для Android. В начале 2015 года я покинул AWS, чтобы отдохнуть от корпоративного мира, и сосредоточился на своих собственных проектах, в том числе на том, что позже стал известен как Maru.

Preetam D’Souza
Preetam D’Souza
 

Как появилась идея создать Maru?

Впервые мысли об использовании смартфона в качестве десктопа возникли в конце 2012 года, когда я обдумывал идеи для дипломной работы и говорил с отцом о возможностях беспроводных мониторов. Тогда у меня еще оставались сомнения относительно перспектив данной идеи, но, когда весной 2013-го я увидел презентацию Samsung Galaxy S4, эти сомнения развеялись. Восьмиядерный процессор в мобильном телефоне просто взорвал мой мозг. С тех пор я начал изучать возможности объединения смартфона и десктопа в единое устройство.

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

 

Как работает Maru?

Когда я только начал проект в феврале 2015 года, я планировал использовать гипервизор для одновременного запуска Linux и Android в виртуальном окружении. Я потратил много времени, чтобы изучить Xen и наладить работу такой связки, результатом чего стал рабочий прототип для платформы Exynos 5410 ODROID-XU. Но очень быстро я пришел к выводу, что проще и гораздо эффективнее использовать виртуализацию уровня пользователя, с разделением одного ядра Linux между двумя системами с помощью LXC (LinuX Containers — инструмент для создания изолированных друг от друга контейнеров, позволяющий одновременно запустить несколько основанных на ядре Linux систем. — Прим. ред.). Сегодня Maru использует именно этот подход.

 

Насколько я знаю, LXC требует, чтобы ядро было собрано с поддержкой пространств имен (namespaces) и cgroups, которых нет в стандартном ядре Android.

Я собрал кастомное ядро для Nexus 5 на основе исходников ядра Android 5.1 с включенными опциями namespace и cgroups.

 

Чем твой способ запуска Debian лучше, чем GNURoot и Linux Installer?

Все эти инструменты работают одинаково: получаем на смартфоне root, берем файлы дистрибутива Linux для ARM, кладем их куда-нибудь в /data, затем делаем chroot в этот каталог и запускаем виртуальный X-сервер (стандартный для Linux графический стек. — Прим. ред.), отдающий картинку по протоколу VNC. Затем подключаемся к нему с помощью VNC-клиента для Android. Ну и подсоединяем смартфон к монитору по HDMI, если нужно вывести Linux-десктоп на большой экран.

Недостаток такого подхода, кроме низкой скорости отрисовки картинки, в том, что пока запущен клиент VNC, ты не сможешь использовать другие приложения или, например, ответить на звонок, — при запуске другого приложения картинка изменится и на экране смартфона, и на мониторе. Maru же позволяет использовать два интерфейса независимо друг от друга. Разделение картинки на разные дисплеи здесь работает на самом низком уровне в обход стандартного фреймворка Android. Ты можешь работать в Debian и при этом звонить, писать СМС и делать все, для чего ты привык использовать смартфон.

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

 

Были ли проблемы совместимости Debian с используемым в Nexus 5 ядром?

Нет, никаких проблем вообще. Дистрибутив отлично работает на ядре Nexus 5; респект разработчикам Linux за то, что сделали ядро настолько универсальным и портируемым.

 

Расскажи об интересных технических проблемах, с которыми ты столкнулся по ходу разработки Maru.

Проблем было действительно много. Я не очень хорошо разбирался в Linux и Android и только в 2013 году стал углубленно изучать эти системы. На это ушло действительно много времени, но это необходимо было сделать перед тем, как начать воплощение моей идеи в жизнь. При разработке я постоянно заходил в тупик и начинал все сначала, чтобы в итоге встретиться с новым тупиком. Проблем было столько, что я мог бы написать о них книгу, поэтому остановлюсь только на самых запомнившихся.

Самой сложной задачей было заставить работать графику одновременно в Android и в Linux. Первый работающий прототип на базе LXC я создал для Samsung Galaxy Nexus. Мне удалось запустить Debian в выделенном контейнере и подключиться к нему, используя VNC. И хотя для меня это было большое достижение, я знал, что такой метод запуска не позволит использовать обе системы одновременно. К счастью, Galaxy Nexus базировался на TI OMAP4460, самом открытом и дружелюбном чипсете для мобильных устройств. Так что я прочитал всю документацию по чипсету, какую мне удалось найти, и попробовал выяснить недостающую информацию с помощью sysfs (псевдофайловая система ядра Linux, с помощью которой можно узнать низкоуровневую информацию о железе. — Прим. ред.).

В результате я таки нашел способ переконфигурировать контроллер дисплея так, чтобы привязать HDMI-порт к выделенному framebuffer device (fbdev — драйвер ядра Linux, позволяющий напрямую работать с видеопамятью. — Прим. ред.), вообще не трогая код Android. Далее оставалось только добиться правильной ориентации дисплея и выставить корректный видеорежим для HDMI.

Но когда дело дошло до портирования прошивки на Nexus 5, я сразу столкнулся с проблемами. Документации на Qualcomm Snapdragon 800 не было никакой, а контроллер дисплея использовал совсем другую схему привязки подключенных дисплеев к fbdev. После двух недель безуспешных попыток переконфигурировать контроллер мне стало понятно, что такой подход не будет работать. Нужно было идти совсем другим путем, который бы не зависел от используемого в смартфоне железа. Так я пришел к той архитектуре графического стека, которая используется в Maru сейчас (к сожалению, автор прошивки уклонился от ответа на вопрос о том, как именно это работает. — Прим. ред.).

Если же говорить о вопросах, не связанных с графикой, то больше всего проблем возникло с тем, чтобы заставить Android и Debian работать без конфликтов. Помню один интересный баг, связанный с просмотром видео: плеер (например, YouTube) отказывался работать в то время, пока работает Debian, но, как только последний отключался, видео начинало воспроизводиться. После многих часов, проведенных в попытках выяснить причины такого странного поведения, я нашел проблему. Она была вызвана кодом поддержки Snapdragon, который динамически загружал firmware с реализацией аппаратного декодера видео в ядро Linux при начале просмотра видео. За данную операцию в Android отвечает демон ueventd, однако Debian (а точнее, его демон udevd) реагировал на запрос загрузки firmware раньше, так что до ueventd запрос не доходил и декодер так и не загружался в ядро. Решение проблемы было простое — запретить udevd реагировать на запросы загрузки firmware.

 

Учитывая, что Maru теперь не завязан на конкретное железо, будут ли порты на другие устройства?

Конечно, единственное требование Maru к устройству на данном этапе — это поддержка HDMI, а именно одной из технологий HDMI-over-USB: SlimPort или MHL. Сейчас у меня есть доступ только к Nexus 5 и 5X, но, если кто-то заинтересован в портировании Maru на другие устройства, он может связаться со мной. Уже есть люди, желающие выполнить порт на смартфоны Sony, Samsung, ASUS и Nexus.

 

ОK, но хотелось бы сразу иметь доступ к исходному коду. Ты говоришь, что Maru — это open source проект, но когда будут доступны исходники?

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

 

Спасибо за ответы и удачи в развитии проекта.

Спасибо за проявленный интерес. Следите за обновлениями.

 

Заключение

Проект получился очень интересным. Автор — очень коммуникабельный человек и оперативно отвечает на все вопросы как в email, так и в закрытой группе для бета-тестеров. У него уже есть много новых идей для воплощения, в том числе подсказанных пользователями. Среди них запуск альфа-тестирования прошивки на базе Android 6.0, управление десктопом с телефона и даже запуск Debian без необходимости подключать смартфон к монитору. Мы будем следить за развитием.

1 комментарий

  1. Аватар

    roman.rrv

    08.06.2016 в 12:15

    У Ubuntu была такая идея, жаль не поддержали производители телефонов 🙁

Оставить мнение