Установка linux на arm

Установка linux на arm

Установка Linux на at91 — ARM 9 от atmel

Плата atmel at91sam9263ek — исходный отладочный набор (http://www.at91.com/)
На ее основе mentor — плата. http://wiki.mentorel.ru/doku.php?id=wiki:me-ms1000b
Руководство для поднятия всей системы из нор-памяти.

Программа для первичной прошивки процессора — SAM-BA от Atmel

SAM-BA нужна для записи в память прошивки-загрузчика, когда чип совсем пустой.

— Установить сам-ба. Для работы с платой ментора необходимо пропатчить По (патч от ментора http://wiki.mentorel.ru/doku.php?id=wiki:sam-ba)
— Установить драйвера ftd-devices для COM портов.
— Подсоединиться к dbgu-порту, запустить терминал (hyperterm windows), для нашей платы скорость обмена 115200, 8, 1, без паритета.
— Далее все будет отражаться в терминале

Кросс-компиляторы

Используем кросс-компиляторы и библиотеки от CodeSourcery (бесплатный arm-none-linux-gnueabi компилятор). Также на сайте codecourcery есть eabi компилятор — он тоже под arm, но не линукс, используется для сборки загрузчиков. Рекомендуется собирать компилятором arm2009q1 ядро, ФС и все что связано с linux arm-2007q1 — для загрузчиков. Существует мнение, что более поздние компиляторы создают больший по размеру код, но более ранние могут некорректно собирать проект. В любом случае лучше использовать один компилятор для загрузчиков, другой для всех утилит linux-системы, чтобы потом не искать ошибки, связанные со сборкой системы разными компиляторами.

Загрузчики Bootstrap u-boot

Bootstrap — первичный загрузчик, производит начальную инициализация контроллера и загружает второй загрузчик — u-boot. Загрузчики можно собирать и из исходных кодов, можно взять уже готовые бинарные файлы, если нет необходимости доработки загрузчиков. Про сборку загрузчиков часть информации есть на сайте производителя.

Для того чтобы прошить первичный загрузчик вытаскиваем перемычки загрузки из внешней памяти, открываем терминал dbgu-порта, включаем питание. В этом случае контроллер начнет ROM-загрузку, то есть войдет в режим прошивки загрузчика. Далее открываем SAM-BA, открываем вкладку нор-память, выполняем следующие действия:
— Execute память — разрешаем запись (то же относится и нанд и датафлеш — обязательно очищать перед записью)
Т.к. Bootstrap является первичным загрузчиком (первой исполняемой программой), он записывается по 0 адресу во флеш-память. Прошиваем файл bootstrap.bin.

u-boot пишется по адресу 0х08400 в dataflash, в norflash по адресу 0х10000. Это адрес, на который bootstrap перепрыгнет, выполнив начальную инициализацию. Если u-boot собирается из исходных кодов, необходимо перед компиляцией задать адрес старта u-boot и размеры (подробнее у ментора на сайте), если адрес задать неверно (например, там не окажется u-boot или u-boot будет больше указанного размера) ничего после выполнения bootstap происходить не будет. Следует понимать, что u-boot не обязательн, bootstrap может сразу грузить ядро Linux, но из u-boot намного проще обновлять ядро Linux и файловую систему по сети, что важно если после изменений в КФС Linux проиозошли изменения и Linux перестал грузится. Если обновлять Linux не имеет смысл, то u-boot можно вырезать, но тогда часть кодов u-boot придется переносить в bootstrap. Также отсутствие второго загрузчика значительно сокращает время загрузки устройства, что часто важно для встраиваемых систем.
Далее устанавливаем джамперы включения памятей, подаем напряжение на плату заново. Смотрим терминал.
Start AT91Bootstrap. — Значит bootstrap грузится корректно. Далее идет загрузка u-boot.

U-Boot 1.3.4 (Jan 25 2011 — 12:49:27)

DRAM: 64 MB
Flash: 64 MB
In: serial
Out: serial
Err: serial
Net: macb0
macb0: Starting autonegotiation.
macb0: Autonegotiation complete
macb0: link up, 100Mbps full-duplex (lpa: 0x4de1)
Hit any key to stop autoboot: 0

— U-boot загрузился. Могут быть и другие строчки еще, в зависимости от функционала и сборки u-boot. В данном варианте u-boot не работает с нанд (при этом linux работать будет с norflash).

Далее при помощи u-boot будем устанавливать ядро и файловую систему (ФС) (linux состоит из двух частей — ядро и ФС) по сети ethernet при помощи tftp — trival file transfer protocol.

Установить на PC tftp-сервер, с которого будем качать ядро и фс. Расшариваем папку на tftp сервере (у меня это папка под названием "1") на PC, втыкаем ethernet кабель в девайс и компьютер.

Устанавливаем переменные в u-boot (CRC-ошибка на самом деле не ошибка, просто не заданы переменные окружения u-boot, когда зададим, ошибка пропадет).

u-boot> setenv ipaddr 169.254.216.190
u-boot> setenv serverip 169.254.216.190

— стоит заметить, что для этого надо знать ip своего PC (возможно стоит задать статический ip адрес для компьютера, если такого нет по умолчанию)
u-boot> setenv ethaddr 1
— Мак-адрес девайса. Вобщем-то 1 подходит для наших целей, по большому счета в сети компьютер-девайс адреса особого значения не имеют.

u-boot>saveenv
— Записываем переменные окружения в память (около половины минуты)
Проверяем что записалось
U-Boot> printenv
bootdelay=3
baudrate=115200
ethact=macb0
ethaddr=1
initrd=10400000
init=10400000
bootargs=console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2
filesize=149414
fileaddr=22000000
ipaddr=169.254.216.190
serverip=169.254.216.198
bootcmd=cp.b 10100000 22000000 149414 ; bootm 22000000

Environment size: 288/131068 bytes

Примерно такой лог должен быть, когда все прошло правильно.

u-boot> tftp 22000000 1/uImage
— Загрузка ядра Linux из папки компьютера 1 по tftp. u-boot выдаст размер ядра в десятичном виде и 16-ом в скобках.
u-boot> erase 10100000 +
u-boot> cp.b 22000000 10100000
Ждем несколько минут для 1.5 Мб ядра, size — размер ядра
u-boot> setenv bootcmd cp.b 10100000 22000000 ; bootm 22000000
u-boot> saveenv

Далее аналогично закачиваем ФС. (а сайте ментора подробно)
И задаем bootargs.
Размер ФС — около 30 Мб. cp.b выполнятся примерно 30 минут. И при этом ничего в консоль не выводится, не стоит думать что процессор завис.

Немного про ядро и ФС linux.

Проще всего взять готовые скрипты с сайта производителя (у меня это папка me_rootfs) и сборку файловой системы и ядра запуском скриптов.
sudo ./build_fs.sh — ФС
sudo ./build_kernel.sh — ядро
Добавлять поддержку оборудования можно в me_rootfs/linux/linux-2.6.27/arch/arm/mach-at91/board-sam9263ek.с.
Скачать ядро linux-2.6.xx. В моем случае xx = 27. make ARCH=arm menuconfig — конфигурирования ядра. Многое есть в поддержке. Нор-память добавлена в скриптах, не является стандартной для данной платы.
По поводу ФС. ФС есть штука в некотором смысле универсальная и фактически определяет систему. Для встраиваемых систем (малый объем памяти и ресурсы) придумали busybox — "швейцарский нож". После загрузки ядра управление передается busybox. Busybox — быстрый вариант командной строки, содержит много системных утилит (mount, mkdir, ls, cp). То есть вместо множества программ mount, ls p, mkdir будет одна — busybox, которая выполнет функции всех основных программ (каких именно задаеся конфигом перед компиляцией busybox).
Я использовал собранный Busybox производителем. Так же в ФС производителя есть все необходимые файлы и папки для инициализации linux.

Если загрузка linux прошла успешно, система спросит логин и пароль через консоль DBGU. По дефолту у многих встраиваемых простых систем linux — пользователь root, пароль пустой. При помощи busybox можно по tftp, flash-usb, SD-Card переносить и модернизировать ФС на системе. После входа в систему мы находимся в пустой папке пользователя.

* Компилятор обычно лежит в /opt/arm-2008q1. Если компилятор не тот или лежит где-то еще, надо править скрипты build_fs.sh и build_kernel.sh — в самом начале лежит путь к компиляторам. ФС должна быть преобразовать к виду .jffs2 использую специальные утилиты. После этого можно загружать linux и настраивать.

Некоторые особенности кросс-компиляции.

Обычно сборка приложения для linux-системы производится тремя командами:

./configure
make
make install

В этом случае все соберется под х86 машину (ну или ту, на которой вы работаете). Нам же надо кросс-компилировать. Для такой нестандартной задачи делаем команду ./configure —help И вылезает help, который подробно расскажет нам что мы можем включать, что нет. Если непонятно, что обозначают некоторые вещи — google по названию.
Далее определяем переменные, такие как библиотеки для кросс-компиляции, путь кросс-компилятору и т.д. http://tw.myblog.yahoo.com/stevegigijoe/article?mid=317&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BeagleBoard+%28BeagleBoard.org%29 Некто собирает веб-сервер под beagle-board (тоже арм, но кортекс a8) У него как раз прописано как и что надо предопределять перед тем как собирать. Все ключи я собрал в исполняемый файл my_arm_config.sh, чтобы не набивать все вручную в консоли.
* Не получилось собрать с первого раза — make clean и можно опять собрать заново.
Получившиеся файлы переносим их на платформу, я использовал для этого tftp.

Почему не стоит заниматься сборкой софта прямо на латформе (ARM)? Ответ простой: слишком мало ресурсов, слишком слабый процессор, сборка программы hello_world занимает около половины минуты, да еще надо собрать или найти gcc, make и т.д. под платформу.

Про сборку Toolchain, если кого-то не устраивает от CodeSourcery:

Особенности некоторых команд в busybox

tftp -g -l tftp_server_folderfile 169.254.216.198

Получить файл с тфтп сервера.

ifconfig

ifconfig — найстройка сети. При старте я выполняю в inittab несколько конфигурирований ethernet’a
ifconfig eth0 down
ifconfig eth0 169.254.216.190 up
Настройка сети с IP адресом 169.254.216.190

Подключение CAN-драйвера, из переписки с mentorel.com

Ядро линукса я взял 2.6.36
При конфигурирование ядра включить драйвера CAN.
В корневую фс включить пакет iproute2, из меню Networking applications. И вот после этого начинается интересно. В системе появятся две утилиты ip одна в директории /bin, из состава busybox, а другая в /sbin из пакета iproute2. busybox-вая про CAN ничего не знает, но при вызове из командной строки запускается именно она. Поэтому путь до нужной утилиты прописывать надо полностью:
1 Вкл. устройство
# /sbin/ip link set can0 type can
2. Настройка бит тиминга (если при конфигарации ядра не включена опция "CAN bit-timing calculation") при включенной не надо.
# /sbin/ip link set can0 type can tq 125 prop-seg 6
phase-seg1 7 phase-seg2 2 sjw 1
3. Установка скорости bit-rate
# /sbin/ip link set can0 type can bitrate 1000000
4. Старт
# /sbin/ip link set can0 up
Можно посмотреть, что получилось
# /sbin/ip -details -statistics link show can0

Посетитель нашего сайта прислал такой любопытный вопрос:

Читайте также:  Факс для ip телефонии

Это очень интересная для меня тема, друзья, поскольку я профессионально занимаюсь администрированием Linux-серверов. На серверах это интересно, но для меня уже буднично и обыденно. А вот установка дистрибутивов Linux на устройства с ARM-архитектурой — это интересней на порядок.

В чем разница между компьютером и смартфоном или планшетом?

На самом концептуально разница небольшая — и мобильные и десктопные устройства, или даже серверы сделаны по одним и тем же принципам. Однако, для мобильных устройств используют иную архитектуру процессора. CPU для десктопов разработаны на архитектурах x86 или amd64. А в большинстве мобильных устройств установлен процессор на ARM-архитектуре. Исторически, это связано с тем, что такие процессоры имеют значительно меньшее энергопотребление, что есть жизненная необходимость для мобильных устройств.

Какие ОС можно установить на мобильные устройства?

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

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

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

Debian — старейший дистрибутив, славящийся своей стабильностью, комьюнити и большим количеством софта. Он портирован практически на все ныне существующие платформы, в том числе и ARM.

Ubuntu — это прямой потомок Debian, унаследовавший от него все положительные качества и обросший собственными, не менее привлекательными. В первую очередь это удобство установки и использования, более продвинутый интерфейс по-умолчанию, user-friendly. И ещё большее комьюнити, растущее гигантскими темпами. В далекоидущих планах даже специализированная версия, Ubuntu Phone, призванная конкурировать с Android, но проект был приостановлен.

Arch и Gentoo — это дистрибутивы Linux, которые также стоит отметить. Они славятся своей гибкостью и «хардкорностью». Они значительно сложнее в установке и управлении. И если Arch имеет лишь любительский порт под мобильную архитектуру, то Gentoo в количестве поддерживаемых платформ не уступает Дебиану.

Оказалось, информации об использовании Linux на android-устройствах довольно много.

Что такое мини-PC?

Но для начала, нужно разобраться что это за устройство — мини-компьютер UG 802. В данном случае, его можно назвать даже микрокомпьютер, пожалуй. Это устройство чуть больше обычной флешки, размером с небольшой мобильный телефон.

Внешний вид и комплектация

UG802 поставляется в небольшой чёрной коробке из плотного картона:

На втором уровне находятся аксессуары:

кабель в плотной оплётке:

Зарядного устройства в комплекте нет.

Устройство без опознавательных знаков и множеством вентиляционных отверстий (в обновлённой версии уже присутствует логотип):

Вентиляционные отверстия со всех сторон:

Сбоку находится слот для microSD карт памяти:

Снизу microUSB(для подключения питания), USB для подключения мыши/клавиатуры/хаба:

Под колпачком находится HDMI-male, что позволяет подключать миниПК непосредственно к телевизору. Если HDMI-порт направлен в стену, то можно воспользоваться HDMI-удлинителем, который входит в комплект:

Вес составляет 31г:

UG802 выполнен полностью из пластика. Сравнение размеров с флешкой:

Я подключал различные устройства через вот такой активный хаб:

Питание для UG802 я тоже брал из него. Внешние HDD-накопители, flash-накопители, USB-клавиатура, USB-мышь — всё распознавалось и работало как положено. Единственное, что можно отметить — при вводе с клавиатуры наблюдается некоторая задержка появления символов на экране.
Полноценная клавиатура и мышь — это не сильно удобные средства управления. UG802 позиционирует больше как мультимедийное устройство, и намного удобнее им управлять устройством, которое совмещает в себе мышь и клавиатуру. Например, в Песочнице есть обзор пульта Mele F10. Либо ещё есть интересное устройство iPazzPort, с русскими буквами:

Программное обеспечение и способы применения

В UG802 установлен лаунчер оптимизированный для работы в качестве мультимедийного центра:

Различные дополнительные настройки:

Можно выставить рамку изображения:

Режимы работы HDMI:

Для пользователя доступно 2Гб внутренней памяти, которую можно расширить с помощью microSD карт:

При подключении веб-камеры через USB-хаб можно производить видео звонки через Skype:

Можно использовать телевизор для просмотра веб-страниц:

Короткое видео где показана навигация по интерфейсу + Angry Birds + просмотр страниц + Youtube-ролик:
(извиняюсь за качество и горизонт, снимал на калькулятор то что было)

Уровень сигнала Wifi рядом с точкой доступа:

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

В меню присутствует настройка Bluetooth, но встроенного BT в UG802 нет. USB Bluetooth тоже не заработал. Возможно в следующих прошивках появится поддержка USB Bluetooth донглов:

Видео

Full HD видео проигрывается плавно.
Пример проигрывания FULL HD и обычного mp4:

Даже с частотой 1.2ГГц производительности хватает для «тяжелых» игр:

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

Информация о системе и тесты производительности

Частота 1.2ГГц сказывается на результатах теста (при частоте 1.6ГГц Rockchip RK3066 набирает более 8000 баллов).
Тест Quadrant не захотел запускаться (чёрный экран).

Вскрытие

Разбирать UG802 легко, нужно лишь аккуратно провести медиатором по периметру:

И станут видны внутренности:

С одной стороны:

Rockchip RK3066 и 2х256 модуля памяти Micron:

4ГБ NandFlash от Micron и вторая пара модулей памяти:

WIfi-модуль Realtek RTL8188EUS:

Получение Root-прав доступа

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

1. Скачать Moborobo
2. Скачать модифицированную версию SuperOneClick (ссылка взята с ресурса Slatedroid, некоторые антивирусы могут считать программу вирусом, скорее всего из-за её предназначения)
2. Установить Moborobo и запустить
3. Включить опцию USB Debugging в настройках UG802
4. Выбрать опцию Connect to PC в настройках UG802:

5. Дождаться обнаружения устройства в Moborobo
6. Распаковать архив и запустить SuperOneClick.exe
7. Нажать Root и дождаться окончания процесса

Выводы

Плюсы:

+ компактный в размерах и лёгкий
+ можно подключать напрямую к телевизору
+ высокая производительности достигается даже при работе на частоте 1.2ГГц
+ не греется
+ можно сделать Smart TV из любого телевизора с HDMI входом

Минусы:

Я покупал свой UG802 по цене $74.99. Цена сейчас снизилась до $64.99

Это android-девайс. Соответственно, в нём по-умолчанию должна быть установлена Android. Которая, фактически, и есть Linux. Но с некоторыми серьёзными ограничениями. Установка какого-нибудь другого Linux, может значительно расширить возможности мобильного устройства. Возможности использования становятся фактически безграничны. Ну представьте себе, использовать мобильник в качестве сервера! Множество инструментов становятся доступны. Если это планшет, подключив к нему периферийные устройства через OTG-кабель, можно использовать его как полноценный компьютер! Зачем? Это уже другой вопрос. Надеюсь, наш читатель поделится своими затеями в комментариях.

Как установить Linux на android-устройство?

Вариантов два — можно сделать полноценную установку, что называется — на «железо». Это фактически перепрошивка устройства. При этом, мы теряем нативный фунцкионал устройства, предусмотренный производителем. А это может быть совсем не тем, чего нам хотелось. К примеру, мини-компьютер UG 802, за который интересуется наш читатель — это устройство, предназначенное для расширения фунциональности телевизоров. Ибо его можно вставить прямо в HDMI-порт любого телевизора, превратив его в Smart.

К счастью, есть второй способ установки Linux — прямо внутри основной операционной системы устройства, в данном случае Android. Это позволяет запустить так называемое chroot-окружение внутри Android. При этом вы получите две родственных операционных системы, работающих параллельно на одном ядре — андроидовском. И между ними можно будет переключаться.

Такой подход удобен для смартфонов и планшетов, но может не подойти для UG 802. В случае с ним, может понадобиться перепрошивка нужной операционной системы. А это уже некоторый риск, что можно испортить устройство.

Читайте также:  Как переключить камеру на леново

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

Руководства и советы по установке Linux на ARM-устройства

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

https://xakep.ru/2012/10/22/android-tablet-linux-install/ — статья об установке Linux на смартфоны в старейшем журнале, который как раз является отражением сути хакерства.

https://habrahabr.ru/post/221543/ — хабр, не менее старый и даже более известный ресурс. А статья здесь свежее, и очень подробно описывает опыт установки Arch Linux поверх Android, в виде chroot-окружения.

http://4pda.ru/forum/index.php?showtopic=371225 — ветка по компьютеру UG 802 на популярном форуме о мобильных девайсах — довольно много информации об устройстве. Если вы собираетесь серьёзно модифицировать устройство (а установка ненативной ОС точно относится к таким модификациям) — я рекомендую изучить опыт использования этого устройства другими людьми. В специфичных случаях, вы также можете пообщаться с этими людьми, задать вопросы. Возможно кто-то уже проделывал нечто подобное и может что-нибудь подсказать, поделиться результатами. Но прежде чем задавать вопросы, следует всё же прочитать всю ветку — иначе можно нарваться на негатив. Ведь очень может быть, что ответы на все интересующие вас вопросы уже были даны ранее в этой ветке. Люди не любят повторяться, а особенно заядлые форумчане.

https://geektimes.ru/post/44220/ — гиктаймс — сайт от создателей хабра, и на нем нашелся подробный мануал по установке Debian поверх Android на смартфон. Статья хоть и очень старая, но затрагивает фундаментальные вещи, которые необходимо понимать прежде чем приступать к такой операции. Это если и не поможет вам установить, но поможет набраться знаний, без которых невозможно дальнейшее развитие темы и решение проблемы. А изучив такие статьи, вы будете чувствовать себя уже более уверенно и сможете искать информацию по теме уже более точечно, на конкретные вопросы, которые нужно будет решать при установке.

К примеру, наверняка, на вышеупомянутых сайтах эти статьи по теме не единственные. Можно всегда попробовать поискать ещё статьи об этом на таких специализированных ресурсах. Я нашел и просмотрел пару топиков об установке linux на мобильные устройства на 4pda.ru вот так, например

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

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

Admin

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

Содержание статьи

Прошло совсем немного времени с момента выпуска первых смартфонов под управлением ОС Android до того, как энтузиасты научились запускать на них полноценные дистрибутивы Linux. Сегодня методики установки Linux-дистрибутивов на Android-устройства широко известны, а в репозитории Google Play есть даже автоматизированные системы установки и запуска Linux. В этой статье я попытаюсь аккумулировать весь накопленный опыт работы с Linux на смартфонах, расскажу, зачем это нужно, и покажу, как избежать возможных подводных камней при переносе Linux на смартфон или планшет.

Зачем?

На первый взгляд может показаться странным, что кто-то пытается запустить на мобильном устройстве операционную систему, в принципе не предназначенную для работы с экраном небольших размеров и без достаточно точного манипулятора (мышь) и клавиатуры. Однако не стоит делать поспешных выводов. Дистрибутив Linux может дать владельцу смартфона достаточно много преимуществ, среди которых набор старых проверенных инструментов, таких как утилиты командной строки, продвинутые редакторы, FTP- и SSH-серверы, сетевые инструменты и средства разработки приложений. Запустив Linux без графической оболочки на смартфоне с хардварной клавиатурой (Motorola Droid, к примеру), можно достаточно комфортно всем этим пользоваться прямо на ходу без необходимости покидать сам Android. Все инструменты доступны в любой момент, а смартфон продолжает оставаться смартфоном, позволяя принимать звонки и слушать интернет-радио.

Второй аргумент за установку Linux на смартфоне — это возможность использовать его в качестве переносной рабочей станции, которую можно подключить к любому ПК и тут же получить доступ к терминалу с помощью SSH/Telnet-клиента либо клиента VNC/RDesktop. Это по определению лучше, чем флешки с установленным Linux, так как нет необходимости, во-первых, перезагружать машину, а во-вторых, гонять туда-сюда данные; результаты твоей работы будут доступны сразу после того, как отключишь смартфон от компа.

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

Перенести Linux на Android действительно просто, и главную роль здесь играет ядро Linux. Любой Linux-дистрибутив представляет собой набор приложений и библиотек, работающих поверх ядра Linux, а так как Android сам основан на почти неизмененном ядре Linux, эти приложения и библиотеки можно без каких-либо проблем запустить внутри среды Android. Достаточно лишь подыскать дистрибутив, для которого существует порт на платформу ARM (не забываем, что 99% всех Android-девайсов работают на ARM), установить его с помощью ARM-эмулятора на виртуальный жесткий диск (то есть в файл), скинуть этот файл на SD-карту устройства, открыть терминал, смонтировать образ в качестве loopback-устройства и сделать chroot внутрь. Все! Это так же просто, как запуск FTP-сервера в chroot-окружении — простой и проверенный десятилетиями метод.

Единственный камень преткновения, когда ты решаешь запустить дистрибутив Linux внутри Android, — графическая среда. В то время как с доступом к консоли никаких трудностей не возникает благодаря наличию полноценного эмулятора терминала, с графическими приложениями начинаются проблемы — нативного X-сервера для Android нет, а запустить обычный X-сервер внутри самого дистрибутива невозможно из-за коренных отличий в архитектуре графической подсистемы зеленого робота. Несмотря на то что в основе она использует стандартный Linux Framebuffer, поверх которого можно запустить X-сервер, эксклюзивное право его использования изначально принадлежит более высокоуровневым библиотекам Android, поэтому остается либо загружать Linux-дистрибутив вместо Android (что совершенно непрактично), либо придумывать обходные пути.

Проверка работы необходимых модулей

Имей в виду, что поддержка loopback-устройств и файловых систем ext2/ext3, необходимых для подключения образа, имеется далеко не во всех ядрах Linux, установленных на смартфонах под управлением Android. Проверить наличие поддержки можно с помощью команды lsmod | grep -e loop -e ext2.

Энтузиасты вышли из этой ситуации, используя простой метод «удаленного» подключения к рабочему столу с помощью любого доступного для Android VNC-клиента. Внутри chroot-окружения запускается X-сервер Xvnc, и все приложения работают под его управлением. Пользователю остается лишь установить VNC-клиент, вбить локальный адрес — и вуаля, на экране появляется полноценный рабочий стол.

Единственное узкое место при использовании удаленного рабочего стола — это производительность. Даже работая локально, VNC не может обеспечить должный ее уровень, которого бы хватило для плавной прокрутки или перемещения окон без лагов. Решить эту проблему пока не удалось, проекты разработки нативного X-сервера, который бы использовал графическую подсистему Android, еще очень сыры и не могут быть использованы для запуска полноценных графических сред. Впрочем, никто не запрещает их использовать; к примеру, X Server от Darkside Technologies Pty Ltd (goo.gl/ap3uD) вполне сгодится для запуска простого софта.

Изначально Linux для Android существовал только в виде образа с уже установленной системой, а также пояснительной инструкции, как этот образ подключить и использовать. Затем появились скрипты, которые автоматизировали процесс подключения образа и запуска Linux, но и они требовали некоторой работы головой. Наконец, в последнее время появились инсталляторы, доступные в Google Play (например, goo.gl/RSA1j), в некоторой степени автоматизирующие процесс запуска дистрибутива, хотя, по сути, это все то же руководство по установке, но интерактивное, с прямыми ссылками на скачивание образов и скриптов.

Альтернативные варианты

Выше я уже упомянул о том, что дистрибутив Linux вполне может быть загружен вместо Android, благодаря чему удастся задействовать Framebuffer для прямого доступа к видеоадаптеру и существенно ускорить работу графического интерфейса. Однако делать это на смартфоне практически бессмысленно — Linux непригоден в качестве основной системы на небольших экранах, к тому же принимать звонки и пользоваться интернетом будет невозможно. А вот на планшете Linux будет выглядеть вполне достойно.

Обычно на устройство, изначально работающее под управлением Android, так называемая нативная версия Linux-дистрибутива устанавливается следующим образом. На внутреннем NAND-накопителе планшета создается дополнительный раздел, на который копируется Linux-дистрибутив. Затем загрузчик U-Boot (он применяется в большинстве планшетов) настраивается таким образом, чтобы использовать этот раздел в качестве загрузочного. В результате планшет будет автоматически загружать Linux-систему после включения питания.

Чтобы оставить возможность загрузки Android, загрузчик U-Boot перенастраивают таким образом, чтобы раздел с Linux-системой был не основным, а выполнял функцию «раздела для восстановления» (Recovery Mode), доступного с помощью включения устройства с зажатой клавишей громкости (тот самый, который используется для перепрошивки устройства и выполнения различных восстановительных операций). Таким образом удается получить устройство с двойной загрузкой: Android по умолчанию и дистрибутив Linux при загрузке в режиме восстановления. Сам Recovery Mode при этом остается доступным только с помощью специальных инструментов.

Читайте также:  Обработка json в php

В случае если NAND-памяти оказывается недостаточно для размещения полноценной Linux-системы, ее части (обычно раздел /usr) выносят в образ или раздел на SD-карте. Кстати, ext2-раздел на карте памяти также можно использовать для установки Linux, запускаемого в chroot-окружении.

Установить нативный Linux-дистрибутив сложнее, чем работающий в chroot-окружении, но это стоит того, если у тебя есть планшет и OTG-кабель, с помощью которого можно подключить клавиатуру и мышь.

Практическое занятие

Как я уже говорил, для запуска под управлением Android пригодны только дистрибутивы, портированные на архитектуру ARM. Прежде всего это Ubuntu и Debian, причем первый по понятным причинам пользуется гораздо большим интересом среди роботоводов. Также можно установить Gentoo и несколько специализированных дистрибутивов, например Backtrack. Рассмотрим самый типичный случай, то есть установку Ubuntu по стандартной схеме, без использования каких-либо автоматизированных инсталляторов и прочего.

BackTrack, запущенный на планшете

Хакер #164. Железный дуршлаг

Для начала нам нужен образ жесткого диска с установленным дистрибутивом. Его можно создать самому, воспользовавшись эмулятором QEMU, однако в связи с тем, что процедура установки абсолютно стандартна и типична, описывать ее я не буду, а просто направлю тебя по адресу goo.gl/9nvBi. Здесь лежит архив с образом, на который предустановлен Ubuntu 12.04 с графическим окружением LXDE (было бы неразумно запускать Unity/Gnome на телефоне/планшете). Архив следует распаковать и положить файл ubuntu.img на карту памяти.

Далее надо смонтировать образ и сделать chroot в окружение дистрибутива. Для этого нужны права root, прошивка с поддержкой блочных loopback-устройств и установленный busybox (ищем в Маркете по запросу «busybox installer», в CyanogenMod есть по умолчанию). Последовательность действий:

    Открываем эмулятор терминала в Android (если нет, можно установить из Маркета Terminal Emulator). Либо подключаем смартфон/планшет к компу и получаем доступ к терминалу с помощью adb:

Не забываем, что режим отладки в этом случае должен быть включен: «Настройки -> Для разработчиков -> Отладка Android».

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

  • Подключаем все необходимые для работы дистрибутива виртуальные ФС:
  • Настраиваем так, чтобы из chroot-окружения можно было получить полноценный доступ в Сеть:
  • Переходим в chroot-окружение:
  • Собственно, на этом установка заканчивается. Теперь можно запускать консольный софт, производить обновление системы, стартовать сетевые сервисы и делать почти все, что можно сделать с обычной десктопной Linux-системой, не забывая, конечно, что некоторый софт, напрямую взаимодействующий с железом и различными специализированными псевдодевайсами, работать не будет. Также не забываем, что виртуальные ФС после завершения работы следует размонтировать.

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

    1. Обновляемся и устанавливаем TightVNCserver:
    2. Создаем файл /root/.vnc/xstartup и пишем в него следующее:

    Третья команда здесь нужна, чтобы пофиксить проблемы, которые могут возникнуть из-за физического отсутствия на устройстве клавиатуры.
    Запускаем Xvnc с помощью враппера vncserver с правами root:

    В результате выполнения последней команды на экран будет выведен запрос на пароль для доступа к VNC-серверу, лучше указать что-нибудь простое вроде «123». Разрешение можно установить фактически любое, однако лучше, если оно будет совпадать с физическим разрешением экрана устройства.

  • Устанавливаем на смартфон приложение AndroidVNC, запускаем его, указываем IP-адрес и порт 5901, подключаемся. На экране должен появиться рабочий стол LXDE.
  • Чтобы не заморачиваться с ручным вводом всех команд, можно использовать скрипт ubuntu.sh, расположенный здесь: goo.gl/xSpK4. Просто положи его и образ ubuntu.img в каталог ubuntu на SD-карте и запусти скрипт командой sh ubuntu.sh, а через 5–10 секунд подключись к рабочему столу с помощью AndroidVNC. Имей в виду, что скрипт монтирует образ к каталогу /data/local/mnt.

    AndroidVNC — подключаемся к рабочему столу

    Установка Gentoo на ext2-раздел

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

    Проект «Ubuntu for Android» в действии

    Возьмем в качестве подопытной системы Gentoo. Чтобы установить его на ext2-раздел, нам понадобится карта памяти объемом не меньше 2 Гб и рутованный смартфон с установленным busybox. Последовательность действий следующая.

    1. Делаем бэкап данных с карты памяти и создаем на ней дополнительный раздел, объемом не меньше двух гигабайт. Сделать это можно с помощью любой программы для разбивки дисков, однако имей в виду, что если ты хочешь продолжать использовать SD-карту по прямому назначению, то создавать FAT32-раздел следует в начале карты, так, чтобы он стал первым, а дополнительный раздел для установки дистрибутива должен быть вторым.
    2. Форматируем разделы SD-карты:
    3. Берем телефон, заходим в «Настройки -> О телефоне» и смотрим, какой установлен процессор. Далее переходим на страницу goo.gl/PRfux и выкачиваем stage3 для нужной архитектуры, например stage3 для ARM v7 лежит в каталоге current-stage3-armv7a.
    4. Монтируем ext2-раздел карты памяти на компе и распаковываем в него содержимое полученного архива:

    Сразу редактируем конфиги и все, что нужно, по вкусу, включая правку /etc/resolv.conf по образцу из предыдущего раздела.

  • Запускаем эмулятор терминала (или выполняем «adb shell»), монтируем все необходимое и переходим в chroot (почти так же, как в случае с Ubuntu):
  • Доступ к рабочему столу производится таким же способом, как в Ubuntu, за исключением того, что теперь прямо на телефоне придется собрать кучу софта :). Впрочем, можно настроить среду для кросс-компиляции на компе, но это уже тема для отдельной статьи.

    Ubuntu на Galaxy Tab 10.1

    Нативная установка

    Запустив Ubuntu с использованием VNC-сервера, ты заметишь неторопливость его работы, которая связана с издержками протокола VNC на передачу картинки «по сети». Чтобы избежать этой проблемы, можно установить Ubuntu в качестве основной системы рядом с Android, так, чтобы она смогла использовать видеоадаптер напрямую. К сожалению, универсального способа сделать это не существует. Каждое устройство по-своему уникально, включая различные таблицы разделов NAND-памяти, на которую производится установка, различные устройства и драйверы для их работы.

    Нативный X-сервер для Android

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

    • Отдельный или основной NAND-раздел. Linux-дистрибутив может быть установлен как в заблаговременно созданный раздел в NAND-памяти, так и в основной загрузочный раздел. В первом случае разработчик прошивки обычно оставляет возможность загрузки Android с помощью специального скрипта либо через загрузку Linux-дистрибутива в режиме восстановления, во втором он будет установлен вместо Android и для возвращения возможности загрузки робота придется заново перепрошивать устройство.
    • Возможность двойной загрузки. Если Linux-дистрибутив будет установлен на отдельный раздел, разработчик может оставить возможность загрузки Android. Однако стоит сразу обратить внимание, как эта загрузка происходит: с помощью режима восстановления либо скрипта, запускаемого с обычного компа. Все-таки второй способ будет неудобен в дороге.
    • Поддержка оборудования. Оригинальное Linux-ядро Android-прошивки уже включает в себя все необходимые драйверы, которые могут понадобиться для работы полноценной Linux-системы, однако далеко не во всех Linux-прошивках все заведется само собой. Часто возникают проблемы с Wi-Fi-адаптером и сенсорным экраном, который неадекватно реагирует на прикосновения. Поэтому перед установкой прошивки стоит внимательно прочитать о возможных осложнениях.

    В любом случае будь готов к тому, что во время установки Linux-дистрибутива все твои данные будут уничтожены. Без этого никак.

    Запуск Ubuntu с помощью стартового скрипта

    Что дальше

    Linux-дистрибутив, установленный рядом с оригинальной Android-системой, может стать очень удобным рабочим инструментом, однако на данный момент «Linux внутри Android» считается скорее игрушкой и способом покрасоваться перед друзьями, нежели серьезным решением. Уверен, что в скором времени, когда для Android появится полноценная реализация графического сервера Wayland, ситуация начнет меняться и мы увидим дистрибутивы с адаптированным для небольших экранов интерфейсом, а также полноценные Linux-приложения, распространяемые в форме обычных APK-пакетов. Также не стоит забывать о проекте «Ubuntu for Android» — в его рамках идет работа над официальным портом Ubuntu для Android, который позволит использовать смартфон в качестве переносного системника, подключаемого к любому монитору.

    Ссылка на основную публикацию
    Adblock detector