Перед получением исходного кода для сборки 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".
У устройств очереди 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 https://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 свободного дискового пространства.
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 */
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-скрипт этого не сделает за Вас!
~/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.
Установить heimdall можно двумя способами:
- Можно скачать исходники с GitHub и собрать самостоятельно.
- Можно установить с помощью менеджера пакетов:
- В Linux:
sudo apt-get install libusb-1.0-0 libusb-1.0-0-dev
- Для Maка: скачать инсталлятор.
- В Linux:
Конфигурирование 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!