A compilação e instalação do Firefox OS exige muito tempo, banda de internet e poder computacional. Infelizmente, ao longo do caminho, coisas podem dar errado. Essa página descreve os objetivos do processo de compilação e o passo-a-passo do processo a fim de ajudar os usuários. Detalhes de cada etapa são detalhadas ao clicar nos links ao longo do texto.
Nota: O processo de compilação do Firefox OS possui diversas referências a 'B2G' ou 'Boot2Gecko'. 'Boot2Gecko' era o nome original do projeto Firefox OS.
O objetivo da compilação: quatro arquivos de imagem ('image files')
O objetivo principal do processo de compilação são os quatro arquivos que serão copiados num dispositivo Firefox OS.
boot.img |
O kernel Linux e uma imagem de sistema de arquivos raiz. Esse último oferecendo um conjunto de ferramentas básicas do Unix. |
system.img |
A parte central do Firefox OS, incluindo partes do Gonk, O core do Firefox OS incluindo partes do Gonk, a conexão com o Gecko e o executável b2g. |
userdata.img |
O perfil Gecko do usuário e as aplicações web do Gaia para o dispositivo. |
recovery.img |
Um kernel Linux e uma imagem de sistema de arquivos raiz com uma ferramenta simples que possibilite aos usuários recuperar o sistema após uma instalação com erros. |
Uma vez que essas quatro imagens tenham sido criadas, elas podem ser transferidas ao dispositivo.
O Firefox OS é compilado sobre o AOSP (Android Open Source Project). As ferramentas AOSP adb
e fastboot
são formas poderosas de acessar e manipular o dispositivo. O comando adb reboot-bootloader
pode reiniciar um dispositivo conectado, permitindo ao usuário interromper o processo na fase inicial do processo onde o comando fastboot flash $partition $image
pode ser usado para copiar uma imagem para o dispositivo.
A imagem de inicialização
A imagem de inicialização (boot.img)
é uma combinação do kernel Linux e uma partição inicial que provê softwares utilitários e scripts de inicialização. Esses scripts são copiados na memória do dispositivo para um uso mais eficiente, e são chamados de "ramdisk". O arquivo boot.img será copiado na partição 'boot' do dispositivo e o conteúdo da ramdisk será acessível a partir diretório raiz em tempo de execuçã, bem como usando adb shell
.
A imagem de inicialização também estabelece as permissões do usuário root no arquivo default.prop
localizado no diretório raiz.
Também é possível modificar as imagens de inicialização existentes verificando o arquivo, dividindo o arquivo entre o kernel e a imagem da ramdisk, modificando seu conteúdo, remontando a imagem da ramdisk e finalmente recompilando o arquivo boot.img
. Veja, por exemplo a página Alcatel One Touch Fire Hacking (Mini) Guide.
Imagens de inicialização podem ser testadas antes de serem definitivamente instaladas. O dispositivo pode ser inicializado e ser interrompido durante a carga. Para inicializar o dispositivo com a Imagem a ser testada sem instalá-la utilize o comando fastboot
boot /some/path/to/boot.img
.
A imagem do Sistema
A imagem do sistema (system.img
) possui o núcleo principal do Firefox OS:
- Gonk: componentes de baixo nível do sistema operacional
- Gecko: adaptação dos motores de layout HTML e JavaScript do Firefox
- B2G: o núcelo dos processos de runtime do sistema operacional
Veja o guia a plataforma Firefox OS para mais informações sobre a arquitetura do Firefox OS.
A imagem do sistema será copiada para a partição system
do dispositivo e acessadas no diretório /system/
quando o sistema de arquivos é acessado em tempo de execução.
Nota: A imagem do sistema também fornece blobs (Binary Large OBject) que pode ser usado pelo dispositivo, como por exemplo o blob RIL (Radio Interface Layer) que controla o rádio do dispositivo.
A Imagem de Dados do Usuário
A imagem de dados do usuário (userdata.img
) fornece as aplicações Gaia carregadas em tempo de execução.
A imagem de dados do usuário será copiada para a partição userdata
no dispositivo e seu conteúdo pode ser acessado no diretório /data/
quando o sistema de arquivos do dispositivo é acessado em tempo de execução. O diretório /data/b2g/
contem o perfil Mozila Gecko do usuário do dispositivo enquanto que o diretório /data/local/webapps/
contém os arquivos executáveis das aplicações web disponíveis para o usuário.
The User Data Image will be copied to the userdata
partition on the device and the contents will be visible in the /data/
directory when the device filesystem is accessed at runtime. Notably the /data/b2g/
directory contains the Mozilla Gecko profile of the device user while the /data/local/webapps/
directory contains the actual web applications available to the user.
A imagem de recuperação
A imagem de recuperacão (recovery.img
) contém o mesmo kernel e um ramdisk similar ao existente na partição da Imagem de inicializção (Boot Image). Porém, a imagem de recuperação utiliza um script de inicialização diferente, que apresenta ao usuário um conjunto de comandos de recuperação acessíveis pelos botões externos do dispositivo.
A imagem de recuperação é copiada na partição recovery
do dispositivo, que por sua vez não é montada no sistema de arquivos durante sua execução normal.
O processo de compilação: preparacão, configuração, compilação e instalação
O processo completo de compilação e instalação do Firefox OS é composto de quatro passos:
Preparação | Obter todos os programas a serem utilizados no processo de compilação, bem como seus compiladores e bibliotecas. |
Configuração | Baixar o código fonte que será compilado e criar o arquivo .configure que define as variáveis de ambiente como os caminhos e outros valores a serem utilizados na compilação. |
Compilação | Compilar o perfil do usuário do Gecko e as aplicações web do Gaia para o dispositivo. |
Instalação | Instalar os arquivos no dispositivo. |
Preparação
A preparação inicial deve ser realizada para garantir que o computador a ser utilizado no processo de compilação tenha todo o software necessário como o compilador e as demais ferramentas de compilação.
Essa etapa pode ser feita manualmente ou utilizando um script. Maiores detalhes na página Pré requisitos para compilar o Firefox OS.
Nota: Em máquinas UNIX e UNIX-like, para checar a existência do software pode ser utilizado o comando which
com o nome do programa como parâmetro.
Configuração
Na realidade, o processo de compilação inicia-se com a obtenção de uma cópia do software Firefox OS (ou B2G), usualmente com a criação de um clone com a ferramenta Git a partir do projeto B2G
. A configuração da compilação compreende tanto baixar as cópias de todo o código fonte que será compilado como criar o arquivo de configuração .config
, que especifica as variáveis de ambiente a serem utilizadas no processo de compilação.
A configuração é executada com o script config.sh
. A página Preparando sua primeira compilação do B2G possuí detalhes desse proceso.
O script de configuracão necessita de um parâmetro que especifica o tipo de dispositivo para o qual o B2G será compilado. A codificação desse parâmetro é vinculada à arquitetura da CPU utilizada e não ao nome específico do dispositivo. Atualmente não há como estabelecer qual compilação funciona para cada dispositivo. Uma lista de códigos disponíveis pode se encontrada nessa página.
A etapa de configuração também utiliza a ferramenta repo
do AOSP (Androis Open Source Project) para baixar (ou atualizar) a cópia de todo o código utilizado na compilação. Essas cópias são armazenadas no diretório .repo/projects
. Devido a essa atividade a etapa de configuração consome muito tempo e muitos dados são trafegados para baixar todo o código necessário.
Compilação
A etapa da compilação é a qual todo o código fonte realmente é compilado e os arquivos imagens são gerados.
Deve ser executado o script build.sh
. Detalhes são discutidos na página Compilando o Firefox OS.
Como padrão, a etapa de compilação é monolítica, ou seja, tudo é compilada de uma só vez a partir das ferramentas AOSP gerando o kernel do Linux e as aplicações web do Gaia. No caso de ocorrência de erros na compilação, pode não ficar claro em qual etapa ocorreu o erro.
Na compilação do Firefox é possível compilar somente algumas partes do conjunto completo que compõe o Firefox OS. Por exemplo, o sistema Gecko somente pode ser compilado através do script com o parâmetro gecko
. Da mesma forma, o Gaia é compilado com o parâmetro gaia
. Essas partes podem ser instaladas separadamente no dispositivo como será explicado a seguir.
Também é possivel construir as imagens apresentadas no início desse artigo. Por exemplo, a imagem de sistema pode ser compilada através do comando ./build.sh out/platform/$target/system.img
, no qual o parâmetro $target
é o mesmo que o apresentado na etapa de configuração.
Instalação
A etapa de instalação consiste em colocar o novo código compilado no dispositivo. É executada pelo script flash.sh
.
A instalação pode ser realizada por etapas através de parâmetro no script flash.sh
. Por exemplo, é possível instalar somente as aplicações web do Gaia com o comando ./flash.sh gaia
.