Содержание статьи
- Требования и установка
- Debian
- Рубрика «Спросим у разработчика»
- Привет. Расскажи немного о себе.
- Как появилась идея создать Maru?
- Как работает Maru?
- Насколько я знаю, LXC требует, чтобы ядро было собрано с поддержкой пространств имен (namespaces) и cgroups, которых нет в стандартном ядре Android.
- Чем твой способ запуска Debian лучше, чем GNURoot и Linux Installer?
- Были ли проблемы совместимости Debian с используемым в Nexus 5 ядром?
- Расскажи об интересных технических проблемах, с которыми ты столкнулся по ходу разработки Maru.
- Учитывая, что Maru теперь не завязан на конкретное железо, будут ли порты на другие устройства?
- ОK, но хотелось бы сразу иметь доступ к исходному коду. Ты говоришь, что Maru — это open source проект, но когда будут доступны исходники?
- Спасибо за ответы и удачи в развитии проекта.
- Заключение
Существует огромное количество кастомных прошивок для различных устройств. Кастомные прошивки вселяют новую жизнь в старые девайсы, добавляют новые возможности и позволяют получить больший контроль над устройством. Однако иногда можно встретить прошивки с экзотической и нестандартной функциональностью. Сегодня мы познакомимся с Maru OS — основанной на Android 5.1.1 прошивке, которая при подключении смартфона к монитору превращает его в полноценный комп на базе Debian. Мы не только погоняем прошивку, но и пообщаемся с ее создателем.
Требования и установка
Пока что прошивка находится в стадии закрытого бета-тестирования и доступна только для Nexus 5. Чтобы получить функцию десктопа, также понадобится переходник SlimPort и HDMI-кабель. Автор заявляет об официальной поддержке определенных моделей переходников, но на самом деле подойдет практически любой (например, китайский Qumo за 990 рублей). Дополнительно понадобятся беспроводная мышь и клавиатура, которые могут работать с мобильными устройствами без специального USB-ресивера.
Обычные мышь и клаву подключить не удастся, так как, хоть в адаптере SlimPort есть гнездо microUSB (или полноценный USB-выход), в которое можно воткнуть OTG-кабель, контакты data и ID на него не выведены. Но можно использовать эмулятор Bluetooth-клавы и мыши True Mouse/KB, установленный на другой смартфон или планшет.
Устанавливается прошивка из образа, который прошивается через fastboot. Однако есть вариант поставить ее рядом с основной с помощью MultiROM. Для этого необходимо получить root, установить MultiROM Manager из маркета, прошить с его помощью кастомное рекавери, патченное ядро и необходимые файлы. Далее следует закинуть прошивку на виртуальную карту памяти, перезагрузиться в recovery и установить ее через меню Add ROM.
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.
Как появилась идея создать 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 без необходимости подключать смартфон к монитору. Мы будем следить за развитием.