Прежде, чем собрать Firefox OS

by 1 contributor:

Перед получением исходного кода для сборки Firefox OS, Вам понадобится правильно сконфигурированная система сборки. В настоящее время поддерживается сборка на 64-битных дистрибутивах Linux и на Mac OS X.

Приобретите совместимое устройство либо используйте эмулятор

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

Первая очередь (Tier 1)

Устройства первой очереди - наша основная целевая платформа и они, как правило, будут первыми получать багфиксы и обновления функционала.

Keon
Keon - это устройство Geeksphone Keon, одно из первых мобильных устройств для компьютерных фанатов (гиков). Обратите внимание, что сборки для этих устройств предоставляются Geeksphone.
Inari
Inari  - ещё одно тестовое устройство.
Unagi
Unagi - это мобильные устройства, используемые в качестве тестовой платформы при разработке смартфонов нижней и средней ценовой категории. Многие основные разработчики Firefox OS работают с Unagi.
Otoro
Otoro - это мобильные устройства, используемые в качестве тестовой платформы при разработке смартфонов нижней и средней ценовой категории. Многие основные разработчики Firefox OS работают с Otoro.
Pandaboard
Pandaboard - это development board на базе архитектуры OMAP 4, используемая для разработки под мобильные платформы.
Эмулятор (ARM и x86)
Доступны два типа эмуляторов: один для эмуляции ARM и второй для x86.
Desktop
Вы также можете собрать десктопную версию Firefox OS; она запускает Gecko в приложении XULRunner, после чего Вы можете внутри него пользоваться опытом работы с Gaia.

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

Вторая очередь (Tier 2)

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

Samsung Nexus S
Гарантированно поддерживаемыми моделями устройств Nexus S являются модели GT-I9020A и GT-I9023 (другие модели тоже могут работать).
Samsung Nexus S 4G
SPH-D720 поддерживается как устройство второй очереди.

Третья очередь (Tier 3)

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

Samsung Galaxy S2
Единственная поддерживаемая модель - i9100; никакие другие официально не совместимы (i9100P может работать, поскольку его единственное отличие заключается в дополнительном NFC чипе).
Samsung Galaxy Nexus
В настоящее время нам не известно о какой-либо несовместимости данных устройств с Firefox OS.
Tara
Tara - ещё одно тестовое устройство. Manifest для Tara лежит только в бранче master. Скрипт для получения Tara-кода: "BRANCH=master ./config.sh tara".
Важно: Поддерживаются только устройства с как минимум Android 4 (aka Ice Cream Sandwich). Если Ваше устройство находится в одном из списков выше, но снабжено более старой версией ОС Android, пожалуйста, предварительно обновите ОС.

У устройств очереди 2 и 3 отсутствует кнопка Home

У всех устройств первой очереди есть хардварная кнопка Home, возвращающая пользователя на стартовый экран. Большинство современных ICS Android-устройств для навигации используют экранные тач-кнопки. При отсутствии кнопки Home Вы не сможете выйти из некоторых приложений, например, их приложения для работы с камерой. Это делает Firefox OS неподходящей для повседневного использования на таких устройствах.

Системные требования для Linux

Для сборки на Linux Вам требуется следующая конфигурация:

  • Установленный 64-битный GNU/Linux дистрибутив (мы рекомендуем Ubuntu 12.04).
  • Не менее 4 GB RAM/swap space.
  • Не менее 20 GB свободного места на жёстком диске.

Это более чем необходимый минимум, но иногда сборка падает тупо по причине нехватки ресурсов.

Вам потребуются также следующие предустановленные инструменты:

  • autoconf 2.13
  • bison
  • bzip2
  • ccache
  • curl
  • flex
  • gawk
  • git
  • gcc / g++ / g++-multilib
  • make
  • OpenGL headers
  • patch
  • X11 headers
  • 32-bit ncurses
  • 32-bit zlib

Примеры 64-битной инсталляции:

Ubuntu 12.04 / Linux Mint 13 / Debian 6

$ sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make zip

При сборке на 64-битной Ubuntu Вам может потребоваться добавить симлинки на 32-битные версии libX11.so и libGL.so:

$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

Ubuntu 12.10

$ sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make zip

Дополнительно к описанным выше шагам по фику косяков с 32-битными версиями libX11.so и libGL.so библиотек, после скачивания исходников Вам также придётся также прописать GCC 4.6 как дефолтный компилятор (default host compiler), см. здесь как это сделать.

На свежей инсталляции Ubuntu 12.10 вываливается ошибка по поводу неудовлетворённых зависимостей для ia32-libs. Лечится так:

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install ia32-libs

Ubuntu 13.04

$ sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip

Все прочие инструкции для предыдущих версий остаются в силе.

Fedora 17/18:

$ sudo yum install autoconf213 bison bzip2 ccache curl flex gawk gcc-c++ git glibc-devel glibc-static libstdc++-static libX11-devel make mesa-libGL-devel ncurses-devel patch zlib-devel ncurses-devel.i686 readline-devel.i686 zlib-devel.i686 libX11-devel.i686 mesa-libGL-devel.i686 glibc-devel.i686 libstdc++.i686 libXrandr.i686 zip perl-Digest-SHA

Дополнительно для компиляции проекта Вам потребуется GCC 4.4. Прекомпилированную версию можно найти здесь. Скачайте её и проинсталлируйте в /opt следующим образом:

$ wget http://people.mozilla.org/~gsvelto/gcc-4.4.7-bin.tar.xz
$ sudo tar -x -a -C /opt -f gcc-4.4.7-bin.tar.xz

После скачивания исходников нужно будет указать данный компилятор как дефолтный (default host compiler), см. здесь как это сделать.

Arch Linux:

$ sudo pacman -S --needed alsa-lib autoconf2.13 bison ccache curl firefox flex gcc-multilib git gperf libnotify libxt libx11 mesa multilib-devel wget wireless_tools yasm zip lib32-mesa lib32-mesa-libgl lib32-ncurses lib32-readline lib32-zlib

По умолчанию Arch Linux использует Python3. Вам придётся заставить его использовать старый добрый python2:

$ cd /usr/bin

$ sudo ln -fs python2 python

Системные требования для Mac OS X

Для сборки Firefox OS на Mac OS X Вам нужно установить Xcode's Command Line Utilities.

Можно загрузить только Command Line Utilities с Apple's developer downloads page для Вашей версии OS X.

Впрочем, если Вам нравится использовать полный пакет Xcode при разработке приложений, можете install Xcode из Mac App Store.

Установка Command Line Utilities через XCode 4.3.1 и выше

Xcode 4.3.1 (OS X 10.7 "Lion") и прочие более новые версии такие, как 4.4.1+ (т.е., Mac OS X10.8 "Mountain Lion"), не обязательно включают в свою дефолтную установку Command Line Utilities. После установки Xcode не поленитесь зайти в Preferences, оттуда в Downloads и установить Command Line Utilities. Убедитесь, что у Вас есть не менее 20 GB свободного дискового пространства.

Screenshot of Xcode Downloads Command Line Tools

Примечание: Эмулятор Firefox OS требует процессора Core 2 Duo или мощнее; т.е., система должна быть совместима с Mac OS X 10.7 "Lion." И хотя Вам не обязательно запускать Lion, Вам просто нужно быть с ним совместимым. Впрочем, Вы можете собрать любой Firefox OS билд на большинстве более старых Маков.

Firefox OS Mac Bootstrap

В терминале запустите следующую команду:

curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash

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

  • git
  • gpg
  • ccache
  • yasm
  • autoconf-213
  • gcc-4.6
  • homebrew

Xcode

Если Вы уже обновили Xcode до версии 4.4+ но всё равно получаете сообщение о том, что Ваша версия Xcode слишком стара, проверьте Xcode path:

xcode-select -print-path
Если он всё ещё указывает на /Developer, отредактируйте path:
sudo xcode-select -switch /Applications/Xcode.app
Следующее, в чём нужно убедиться, - наличие Mac OS X 10.6 SDK:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

При отсутствии SDK в указанном месте придётся вытащить и скопировать его из архива Xcode 4.3 DMG, который можно взять на портале Apple Developer. Для извлечения 10.6 SDK из архива можно воспользоваться утилитой Pacifist. Не забудьте создать симлинк на него в директории /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/. (После фикса bug 784227 этот шаг можно будет пропустить, и наша версия platform_build has been updated.)

Чувствительность к регистру файловой системы Mac

По умолчанию Mac OS X поставляется с файловой системой, нечувствительной к регистру текста. Проблема в том, что в ядре Linux присутствует некоторое количество файлов с одинаковыми названиями, отличающихся только регистром букв.  См., например, заголовочные файлы xt_CONNMARK.h и xt_connmark.h.  В итоге в /kernel модифицируется изрядное количество файлов после ./config.sh.

Несмотря на это, в большинстве случаев сборка может пройти успешно. Однако, на некоторых платформах Вы можете столкнуться со следующей ошибкой:

ERROR: You have uncommited changes in kernel
You may force overwriting these changes
with |source build/envsetup.sh force|

ERROR: Patching of kernel/ failed.

См. дальнейшие дискуссии и возможные решения данной проблемы в bug 867259.

В качестве альтернативного решения всегда можно безопасно собрать и на файловой системе, чувствительной к регистру. Самый простой способ - создать отдельный монтируемый образ диска с нечувствительной к регистру файловой системой. Можно воспользоваться приложением Apple's Disk Utility из командной строки:

hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/firefoxos.sparseimage

Подмонтируйте диск:

open ~/firefoxos.sparseimage

Перейдите на смонтированный диск:

cd /Volumes/firefoxos/

Теперь можно скачать исходный код и начать его компиляцию, не беспокоясь о проблеме чувствительности к регистру.

Mountain Lion

При сборке на OS X 10.8 "Mountain Lion" (Xcode 4.4.1 или выше) может вывалиться следующая ошибка:

external/qemu/android/skin/trackball.c:130:25: error: 'M_PI' undeclared (first use in this function)
Отредактируйте файл: B2G/external/qemu/Makefile.android в строке 78:
MY_CFLAGS += -DM_PI=3.14159265358979323846264338327950288   #/* B2G_fix: not finding M_PI constant */
Также на Mountain Lion в процессе инсталляции зависимостей через homebrew может вывалиться и такая ошибка:
clang: error: unable to execute command: Segmentation fault: 11
... в таком случае попробуйте переустановить зависимости, выставив флаг --use-gcc flag, например:
brew install mpfr --use-gcc

Samsung Galaxy S2

Для сборки на Samsung Galaxy S2 нужно установить heimdall. См. Установка heimdall. Bootstrap-скрипт этого не сделает за Вас!

Примечание: Если у Вас установлен Samsung Kies, используемый для контент-менеджмента на многих телефонах Samsung, придётся его удалить перед инсталляцией Firefox OS на Ваше устройство. Под Windows можно использовать стандартную процедуру деинсталляции; на Mac специальная утилита для удаления содержится на инсталляционном образе диска Kies. Flashing не будет работать с установленным Kies. Если Вы забудете удалить Kies перед сборкой, система сборки это заметит и напомнит Вам о необходимости его удаления. Обратите внимание, что утилита удаления не удаляет корректно папку ~/Library/Application Support/.FUS, и оставляет ссылку на неё в пользовательском меню. Всё это придётся удалить вручную.

Починка libmpc зависимости (если сломана)

gcc 4.6 изначально собран с libmpc 0.9; если для апдейта пакетов Вы используете homebrew, libmpc обновится до версии 1.0, но homebrew не пересоберёт gcc 4.6 после апдейта этой библиотеки. Так что придётся создать симлинк, чтобы всё снова заработало:

cd /usr/local/lib/
ln -s libmpc.3.dylib libmpc.2.dylib

По желанию: Установка HAX

Intel поставляет специальный драйвер, позволяющий B2G вместо эмуляции кода запускать его нативно на Mac, если Вы используете эмулятор x86. При желании можете скачать и установить этот драйвер. Это не обязательно, но может повысить производительность и стабильность работы эмулятора.  

Перед инсталляцией HAX нужно установить Android SDK.

Установка adb

При сборке B2G понадобятся некоторые бинарные файлы из ОС Android, установленной на телефоне (если, конечно, Вы не собираете в эмуляторе). Для того, чтобы получить эти файлы, нужен adb, Android Debug Bridge.

Установите Android SDK starter package для Вашей платформы (Вам нужен ADT Bundle, а не опция SDK Tools Only). Затем запустите менеджер пакетов, $SDK_HOME/tools/android, и используйте GUI для инсталляции "Android SDK Platform-tools".

adb устанавливается в $SDK_HOME/platform-tools. Не забудьте добавить эту директорию в PATH в файле ~/.bashrc или аналогичном:

PATH=$SDK_HOME/platform-tools:$PATH

где $SDK_HOME - фактическое место расположения android sdk.

Установка heimdall

Heimdall - это утилита для flashing Samsung Galaxy S2. Она используется при Boot to Gecko flash utility для замещения контента телефона с Firefox OS, а также для flash updated versions of B2G and Gaia onto the device. Вам потребуется эта утилита, если Вы хотите установить Firefox OS на Galaxy S2; она не нужна для любых других устройств. Для всех прочих устройств используется утилита fastboot.

Примечание: Опять же, важно отметить, что это требуется только для установки Firefox OS на Samsung Galaxy S2.

Установить heimdall можно двумя способами:

Конфигурирование ccache

По умолчанию размер кэша для ccache равен 1GB; сборка B2G легко первышает этот порог. Изменить размер кэша можно таким образом:

$ ccache --max-size 3GB

Настройка udev rule для Вашего телефона

Чтобы узнать USB vendor ID, запустите lsusb, но, как правило, это 18d1 для Google, 04e8 для Samsung, 19d2 для ZTE, 05c6 для Qualcomm, таким образом, все вопросы в данном случае решаются добавлением такой строки в /etc/udev/rules.d/android.rules (создайте этот файл, если его еще нет, заменив XXXX нужным ID):

SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", MODE="0666", GROUP="plugdev"

Например, для ZTE содержимое android.rules будет следубщим:

SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"

Закончив редактирование файла и сохранив изменения, выставьте ему права на чтение:

$ sudo chmod a+r /etc/udev/rules.d/android.rules

Теперь можно проверить, выведется ли список устройств командой adb:

$ adb devices
List of devices attached
123456          device

Если устройство не обнаружено, убедитесь, что имя файла и скрипта корректны, после чего перезагрузите компьютер и снова введите команду adb. Имейте в виду, что, если Вы используете fastboot, загрузчик может идентифицироваться с другим vendor ID, нежели используется при нормальной загрузке устройства.

Переведите телефон в developer mode

Прежде, чем подключить телефон к USB порту, переведите его в  USB developer mode. Это позволит отлаживаться на телефоне и flash the phone. Для перевода в этот режим: Settings app -> Device information -> Mode Information -> Developer -> (enable) Developer mode

Архивация системного раздела телефона

Рекомендуеься предварительно сделать архивную копию всего системного раздела с Android. В таком случае позже Вы всегда сможете вернуться к старой операционной системе после удаления B2G. Для архивации запустите:

adb pull /system <backup target dir>/system

В зависимости от модели телефона, может также потребоваться:

adb pull /data <backup target dir>/data
adb pull /vendor <backup target dir>/vendor

Если цказанная команда вывалит ошибку "insufficient permission", попробуйте следующее:

  • остановите и перезапустите adb сервер, если же это не удастся,
  • перепроверьте, что у 'adb' tool выставлены права root в пределах Вашего кастомного ROM (т.е. в CyanogenMod, поменяйте 'Settings > System > Developer Options > Root Access' на 'Apps и ADB' либо 'ADB only').
  • Убедитесь в правильной конфигурации udev rule (см. Настройка udev rule для Вашего телефона.

Что дальше?

А вот теперь можно получить код Firefox OS!

Метки документа и участники

Contributors to this page: Nick_Pershin
Обновлялась последний раз: Nick_Pershin,
Скрыть боковую панель