sitelogo

By

Компиляция GNU софта и бенчмарк кодека x264 под Android

«У вас на компьютере больше нет папки Мой Компьютер? Это больше не ваш компьютер, это компьютер Windows 8!»

Если Windows со временем просто тихим сапом превращается из рабочей лошадки в сплошной Windows Store, то устройства под управлением андроид начисто отрицают свободу творчества своего пользователя. Цитируя того же Столлмана, андроид «спроектирован так, что пользователи не могут устанавливать и пользоваться своими собственными измененными программами; устройства работают только с версиями, одобренными какой-то компанией». Андроид всегда «считает себя умнее пользователя, и так в основном оно и бывает«. Положение усугубляется тем, что под мобильные устройства совсем нет свободных альтернатив вроде Linux или в Mainline ядре нет и половины драйверов того или иного планшета\телефона, в результате в Ubuntu for Nexus 7 не работает камера или что-то еще. Таким образом, например чтобы провести бенчмарк процессора Cortex A9 из какого-нибудь Google Nexus 7, приходится самому компилировать под Android, рутовать его, или вообще ставить стороннюю прошивку.

В качестве примера можно взять пакет x264, который прекрасно компилируется под NDK. Пример того, что нужно вводить в терминале есть тут. Только флаг —disable-asm можно и не ставить, если применить патч, исправляющий баг в оптимизации кодека для мультимедийного расширения процессора NEON. Без оптимизации кодек будет работать в 4 раза медленнее.

Андроид основан на всё том же ядре Linux, поэтому у него есть много общего со свободными Linux дистрибутивами. Например, форматом исполняемых файлов является ELF, просто спомпилированный под другую архитектуру тем же GCC. Ну и еще файловая система очень похожа. Запустить своего эльфа на андроиде не так просто, но возможно, и только при условии, что вы получили Root. Далее скомпилированный бинарник надо запилить на девайс. После того, как он сохранится, машина не даст сделать его исполняемым, так как Android пока еще не считает, что вы умнее его. Раздел пользователя смонтирован со специальной опцией, не дающей файлам на нем стать исполняемым.

Для начала, нужно запустить убогий эмулятор терминала из Android Market с правами root и запустить команду df:

1
2
3
4
5
6
7
8
9
10
11
Filesystem Size Used Free Blksize
/dev 885.1M 128.0K 884.9M 4096
/sys/fs/cgroup 885.1M 0.0K 885.1M 4096
/mnt/asec 885.1M 0.0K 885.1M 4096
/mnt/obb 885.1M 0.0K 885.1M 4096
/mnt/fuse 885.1M 0.0K 885.1M 4096
/system 827.8M 481.9M 345.9M 4096
/cache 551.7M 97.6M 454.2M 4096
/data 12.2G 7.7G 4.5G 4096
/persist 14.5M 4.2M 10.2M 4096
/mnt/shell/emulated 12.2G 7.7G 4.5G 4096

В данном случае системным разделом является /system. А в каталоге /system/xbin лежат эльфы. Но скопировать их туда просто так не получится — системный раздел открыт только для чтения. Его нужно перемонтировать на чтение и запись (выберите правильный раздел):

1
:~$ mount -o rw,remount /system

После этого можно копировать бинарник:

1
2
3
:~$ cd /storage/sdcard0/Download
:~$ cp x264 /system/xbin
:~$ chmod 750 /system/xbin/x264

Все, теперь можно запускать:

Screenshot_2014-04-13-19-43-07

На самом деле, тема бенчмарка на x264 на скрине не раскрыта, так как я брал поток через netcat с другой машины. Она делала с ним кое что, что также замедлило процесс. Думаю, если запустить процесс на локальном видеофайле, можно получить 1,5fps на пресете Veryslow на видео 720х576. Это довольно неплохо, получается, Cortex A9 немного обгоняет Atom N270, выполняя ту же задачу.



2 Responses to Компиляция GNU софта и бенчмарк кодека x264 под Android

  1. Анатолий пишет:

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

    • viron пишет:

      Просто прикольно было посмотреть, как будет себя чувстовать x264 на этом Cortex A9.

Добавить комментарий

Ваш e-mail не будет опубликован.