Препарирование Android, или получаем на планшете полноценный Linux

6 Фев
2012

Загорелся идеей приобрести себе недорогую планшетку на Андроиде. Заказал с Китая Zenithink Z102. Пока жду ее прихода решил посмотреть что-же из себя представляет эта ОСь.
Поставил на свою Fedoru VmWare Player, скачал дистрибутив для x86, запустил — понял, что работать на этом Ведроиде нереально. А хотелось бы чтобы все как у людей: консоль, удобное рабочее окружение и остальные плюшки.

После вдумчивого курения форума 4PDA, были найдены решения:

— установка на рабочий Андроид дополнительного окружения Debian или Ubuntu и подключение к удаленному рабочему столу. 4PDA.RU, Linux Installer;
— установка Debian (Ubuntu, Fedora), заточенного под ARM с нуля. Тот же 4PDA, Установка Fedora;
— ждать когда KDE допилят свою оболочку до приемлего уровня Планшет с KDE;
— пилить Android самому до рабочего состояния.

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

Итак, выбрал вариант номер 4 — пилить самому.
Для начала поковыряв гугль и прочитав статью Переселение души: linux на android планшете, понял что надо копать в сторону запуска сервисов с помощью INIT.
Эта процедура выполняется при загрузке системы и описывается в файле init.rc, который запакован в ramdisk.img.

Для того чтобы начать препарирование скачиваем подходящий дистрибутив Android_x86 Android x86 (У меня завелся от Lenovo Ideapad S10-3T ).
Устанавливаем систему в VMWare Player, осматриваемся и расстроившись даем команду PowerOff в плэере.
Далее идем в настройки виртуальной системы и монтируем ее образ через Utilites. Заходим в смонтированный каталог и копируем оттуда файл ramdisk.img.

Ramdisk.img представляет собой cpio-архив, впоследствии сжатый GZip. Для извлечения переименовываем ramdisk.img в ramdisk.gz и распаковываем gunzip ramdisk.gz, получаем архив дерева каталогов который извлекаем с помощью ARK или cpio -i -F ramdisk (положить в отдельный каталог так как разворачивает в текущий).

Смотрим init.rc, ищем такие вот строчки:

## Daemon processes to be run by init.
##
service console /system/bin/sh # Описывает процесс загрузки консоли, оставляем.
console # Описывает процесс загрузки консоли, оставляем.

Остальные строки комментируем, как показано (отвечают за загрузку граф. оболочки Android).
# adbd is controlled by the persist.service.adb.enable system property
# service adbd /sbin/adbd
# disabled

# adbd on at boot in emulator
# on property:ro.kernel.qemu=1
# start adbd

# on property:persist.service.adb.enable=1
# start adbd

# on property:persist.service.adb.enable=0
# stop adbd

service servicemanager /system/bin/servicemanager
user system
critical
# onrestart restart zygote
onrestart restart media

# service zygote /system/bin/app_process -Xzygote /system/bin —zygote —start-system-server
# socket zygote stream 666
# onrestart write /sys/android_power/request_state wake
# onrestart write /sys/power/state on
# onrestart restart media

# service bootanim /system/bin/bootanimation
# user graphics
# group graphics
# disabled
# oneshot

Итак запаковываем наш исправленный ramdisk обратно find <каталог где лежат наши файлы> -print | cpio -ovcaB | gzip > ramdisk.gz, переименовываем в ramdisk.img, копируем обратно в каталог смонтированный VMWare, отмонтируем, запускаем наш исправленный образ и… и нифига не выходит.

Ладно, может это только у меня не получилось, я поступил иначе: скопировал файл ramdisk.img, переименовал его в ramdisk.gz, распаковал gunzip ramdisk.gz и вносил в ramdisk исправления непрямую, через редактор в mc (обязательно нужно точно соблюдать размер файла, т.к. это все таки архив).

После описанных процедур запускаем снова наш допиленный Android и, вуаля, нам открывается консоль.

A N D R O I D root@android:/ _

В итоге что мы имеем: консоль с работающими устройствами, отсутствие убогого ведроидного интерфейса.

Загруженные модули можно просмотреть с помощью lsmod, загружены uvesafb, usb, bluetoth, snd, multitouch и все другие вкусные плюшки. Проверил сеть: netcfg
lo UP 127.0.0.1 255.0.0.0 0x0xxxxx
eth0 DOWN 0.0.0.0 0.0.0.0 0x0xxxxx
Поднимаем: netcfg eth0 dhcp
eth0 UP 172.16.151.128 255.255.255.0
Делаем ping www.yandex.ru: не работает DNS (ping 8.8.8.8 — работает, разберемся).

Осталось только прикрутить проект KDE Plasma Active (думаю, займусь когда выйдет KDE spark, основанный на Zenithink C71) и тогда будет нам, братья планшетникам, поистинне linuxoidnoe счастье.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх