Como fazer DIY Port TWRP para Android

, você pode tentar trabalhar com uma árvore menor, como esta Manifesto mínimo TWRP . No entanto, pode haver situações em que você precisará de mais repositórios do que este manifesto permite.



Nota principal antes de compilar: Se você adicionar ou alterar qualquer sinalizador, você precisará limpar (ou fazer clobber) antes de recompilar, caso contrário, suas alterações de sinalizador não serão incluídas!

Depois de ter o código-fonte TWRP, precisamos alterar alguns dos sinalizadores de construção para seu dispositivo específico. Encontre o BoardConfig.mk para o seu dispositivo - normalmente, ele pode ser encontrado em dispositivos / fabricante / codinome (por exemplo, devices / lge / hammerhead / BoardConfig.mk)



A configuração da placa precisa incluir configurações de arquitetura e plataforma - normalmente já estão incluídas E se você está usando a configuração do dispositivo de outra pessoa. Mas se você criou o seu próprio, você precisará adicioná-los. Isso ocorre porque, sem eles, a inicialização de recuperação pode causar um segfault e apenas piscará o logotipo TeamWin na tela repetidamente.



Os sinalizadores devem ser colocados na parte inferior do BoardConfig.mk, sob o título #twrp



Para todos dispositivos, você precisa instruir o TWRP sobre qual tema usar. O sinalizador TW_THEME é usado em vez do sinalizador DEVICE_RESOLUTION mais antigo, o que significa que o TWRP agora usa dimensionamento para estender qualquer tema.

Suas opções são: portrait_hdpi, portrait_mdpi, landscape_hdpi, landscape_mdpi e watch_mdpi. Para o modo retrato, você provavelmente vai querer o tema hdpi de 720 × 1280 e superior, mas para dispositivos paisagem vá com 1280 × 720 e superior.

Portanto, sua seção de sinalização de construção + sinalização de tema deve ser semelhante a:



#twrp

TW_THEME: = portrait_hdpi

Alguns sinalizadores de construção adicionais que você deseja incluir nesta seção (créditos aos fóruns XDA):

  • RECOVERY_SDCARD_ON_DATA: = true (isso permite o manuseio adequado de / data / media em dispositivos que possuem esta pasta para armazenamento (a maioria dos Honeycomb e dispositivos originalmente enviados com ICS como Galaxy Nexus). Este sinalizador não é obrigatório para esses tipos de dispositivos. não defina este sinalizador e também não inclua nenhuma referência a / sdcard, / internal_sd, / internal_sdcard ou / emmc em seu fstab, então assumiremos automaticamente que o dispositivo está usando armazenamento emulado.)
  • BOARD_HAS_NO_REAL_SDCARD: = true - desativa coisas como particionamento do cartão SD e pode economizar algum espaço se o TWRP não se encaixar em sua partição de recuperação
  • TW_NO_BATT_PERCENT: = true - desativa a exibição da porcentagem da bateria para dispositivos que não a suportam adequadamente
  • TW_CUSTOM_POWER_BUTTON: = 107 - mapas personalizados do botão liga / desliga para a tela de bloqueio
  • TW_NO_REBOOT_BOOTLOADER: = true - remove o botão reiniciar bootloader do menu reboot
  • TW_NO_REBOOT_RECOVERY: = true - remove o botão de recuperação de reinicialização do menu de reinicialização
  • RECOVERY_TOUCHSCREEN_SWAP_XY: = true - troca o mapeamento de toques entre os eixos X e Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = true - inverte os valores da tela de toque do eixo y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = true - inverte os valores da tela de toque do eixo x
  • TWRP_EVENT_LOGGING: = true - ativa o registro de eventos de toque para ajudar a depurar problemas da tela de toque (não deixe isso ativado para uma versão - isso preencherá seu arquivo de registro muito rapidamente)
  • BOARD_HAS_FLIPPED_SCREEN: = true - vira a tela de cabeça para baixo para telas que foram montadas de cabeça para baixo

Sinalizadores de compilação adicionais podem ser encontrados percorrendo os arquivos Android.mk na fonte de recuperação, mas eles normalmente não são usados, então não há por que documentá-los.

Usando Recovery.Fstab

O TWRP 2.5 e superior tem suporte para novos recursos recovery.fstab - notavelmente a capacidade de estender as funções de backup / restauração do TWRP. Você não precisa adicionar sinalizadores de fstab, porque a maioria das partições será tratada automaticamente.

O TWRP suporta apenas fstabs v2 na versão 3.2.0 e superior - em versões mais antigas do TWRP, você precisará usar o formato antigo do fstab. Aqui está um exemplo de fstab TWRP para um Galaxy S4:

Para maximizar a compatibilidade com sua árvore de construção específica, você pode criar um twrp.fstab e usar PRODUCT_COPY_FILES para colocar em> etc> twrp.fstab.

Quando o TWRP inicia e encontra twrp.fstab no ramdisk, ele o renomeia para> etc> recovery.fstab.bak - basicamente substitui o fstab do seu dispositivo pelo fstab do TWRP, que estende a compatibilidade.

Código de exemplo:

PRODUCT_COPY_FILES + = device / lge / hammerhead / twrp.fstab: recovery> root> etc> twrp.fstab

O fstab no TWRP pode conter alguns “sinalizadores” para cada partição listada no fstab.

Essas bandeiras são adicionadas até o fim da lista de partição no fstab, separados por espaço em branco / espaços / guias. O sinalizador afetará apenas essa partição, mas nenhuma outra. Os sinalizadores são separados por ponto e vírgula. Aqui está um exemplo de código:

Então, vamos examinar isso aos poucos. A bandeira aqui fornecerá um nome de exibição de “Micro SDcard”. O sinalizador wipeingui tornará esta partição disponível para limpeza no menu Limpeza avançada. O sinalizador removível indica que esta partição nem sempre está presente, o que impedirá a exibição de erros de montagem.

Uma lista completa de bandeiras (créditos para TeamWin) :

  • removível - indica que a partição pode não estar presente, evitando que erros de montagem sejam exibidos durante a inicialização
  • armazenamento - indica que a partição pode ser usada como armazenamento, o que a torna disponível como armazenamento para backup, restauração, instalações zip, etc.
  • configurações armazenamento - apenas uma partição deve ser definida como armazenamento de configurações, esta partição é usada como o local para armazenar o arquivo de configurações do TWRP
  • canbewiped - indica que a partição pode ser limpa pelo sistema back-end, mas pode não estar listada na GUI para limpeza pelo usuário
  • userrmrf - sobrescreve o tipo de formato normal de limpeza e só permite que a partição seja limpa usando o comando rm -rf
  • backup = - deve ser sucedido pelo sinal de igual, então backup = 1 ou backup = 0, 1 indica que a partição pode ser listada na lista de backup / restauração, enquanto 0 garante que essa partição não aparecerá na lista de backup.
  • wipeingui - faz com que a partição apareça na GUI para permitir ao usuário selecioná-la para limpeza no menu de limpeza avançada
  • limpar durante o reset da fábrica - a partição será limpa durante uma redefinição de fábrica
  • ignoreblkid - blkid é usado para determinar qual sistema de arquivo está em uso pelo TWRP, este sinalizador fará com que o TWRP pule / ignore os resultados de blkid e use o sistema de arquivo especificado apenas no fstab
  • reter a versão de layout - faz com que o TWRP retenha o arquivo .layoutversion em / data em dispositivos como Sony Xperia S que meio que usa / data / media, mas ainda tem uma partição / sdcard separada
  • link simbólico = - faz com que o TWRP execute um comando de montagem adicional ao montar a partição, geralmente usado com / data / media para criar / sdcard
  • exibição = - define um nome de exibição para a partição para listar na GUI
  • storagename = - define um nome de armazenamento para a partição para listar na lista de armazenamento GUI
  • nome de backup = - define um nome de backup para a partição para listar na lista de backup / restauração da GUI
    comprimento = - normalmente usado para reservar um espaço vazio no final da partição / data para armazenar a chave de descriptografia quando a criptografia completa do dispositivo Android estiver presente, não definir isso pode levar à incapacidade de criptografar o dispositivo
  • canencryptbackup = - 1 ou 0 para habilitar / desabilitar, faz com que o TWRP criptografe o backup desta partição se o usuário escolher a criptografia (aplica-se apenas a backups tar, não a imagens)
  • userdataencryptbackup = - 1 ou 0 para habilitar / desabilitar, faz com que o TWRP criptografe apenas a parte de dados do usuário desta partição, certos subfuldes como / data / app não seriam criptografados para economizar tempo
  • subpartição de = - deve ser sucedido pelo sinal de igual e pelo caminho da partição da qual é uma subpartição. Uma subpartição é tratada como “parte” da partição principal, então, por exemplo, o TWRP automaticamente torna / datadata uma subpartição de / data. Isso significa que / datadata não aparecerá nas listagens da GUI, mas / datadata será apagado, feito backup, restaurado, montado e desmontado sempre que essas operações forem realizadas em / data.

Um bom exemplo do uso de subpartições são as partições 3x efs no LG Optimus G:

Isso agrupa todas as 3 partições em uma única entrada “EFS” na GUI do TWRP, permitindo que todas as três tenham backup e sejam restauradas juntas em uma única entrada.

Com TWRP 3.2.0 e superior, que usa V2 Fstab, você não precisa adicionar nenhum sinalizador de construção . O suporte V2 Fstab é automático. V2 Fstab também suporta curingas (o símbolo *) que podem ser úteis para OTG USB e cartões micro-SD com várias partições. Você também pode continuar a usar o formato V1 Fstab e é inteiramente possível usar os tipos V1 e V2 no mesmo Fstab.

Por exemplo, aqui está uma linha V1 Fstab com um curinga destinado a um OTG USB:

Aqui está uma linha V2 Fstab para o mesmo dispositivo que atinge o mesmo resultado:

Além disso, você pode incluir etc twrp.flags que usam o formato V1 Fstab e podem ser usados ​​para complementar o V2 ​​Fstab com sinalizadores TWRP, partições adicionais não incluídas no V2 Fstab ou configurações de substituição no V2 Fstab.

Por exemplo, um dispositivo Huawei pode ter este fstab V2 no etc recovery.fstab:

Ele também pode ter estes sinalizadores incluídos:

Então, aqui, as duas primeiras linhas em TWRP.Flags adicionarão as partições de inicialização e recuperação, que não estavam presentes no V2 Fstab. Em seguida, a linha / cust em TWRP.flags instruirá o TWRP a permitir que o usuário final faça backup da partição (cust) e fornecerá a ela um nome de exibição.

A partição / misc está presente em twrp.flags e a partição / oeminfo instrui o TWRP a também permitir o backup e dar a ele um nome de exibição.

Precisamos da linha / data porque muitos dispositivos Huawei são criptografados, mas usam binários Huawei especiais - portanto, usamos os binários Huawei para descriptografar o dispositivo automaticamente no modo de recuperação. Portanto, aqui a linha / data instruirá o TWRP a usar / dev / block / dm -0, e não / dev / block / bootdevice / by-name / userdata, que normalmente é usado para a montagem “adequada”.

Por fim, há / system_image, para que o TWRP inclua uma opção para criar uma imagem do sistema nos menus Backup e Restore.

O github oficial do TeamWin também deve conter os exemplos de árvores de dispositivos mais recentes para dispositivos que possuem uma porta TWRP oficial. O github TeamWin pode ser encontrado AQUI .

Depois que Omni ou CM foi sincronizado e você configurou seus sinalizadores TWRP, você deve construir uma fonte ./build/envsetup.sh

E você vai querer “almoçar” o dispositivo, então pode fazer algo como “almoçar omni_hammerhead.eng”.

Depois de um almoço bem-sucedido, a maioria dos dispositivos usará este comando:

Você precisa substituir o # em –j # pela contagem do núcleo +1. Então, se você tiver um dual core é –j3, um quadcore será –j5, etc. Substitua o # pela contagem de núcleos +1, então se você tiver um dual core é -j3 e um quad core se torna -j5, etc.

Além disso, os dispositivos Samsung típicos exigem isso:

Isso ocorre porque a maioria dos dispositivos Samsung incluem a recuperação como um ramdisk extra na inicialização, em vez de em uma partição de recuperação separada (que a maioria dos outros dispositivos usam).

Agora, você deve ter o TWRP compilado para o seu dispositivo e, com sorte, ele funciona em um ambiente de emulador. Você deve sempre testar sua porta TWRP em um ambiente de emulador primeiro, para não correr o risco de entupir seu dispositivo.
Baixe este conjunto de arquivos de configuração do dispositivo.

Compile uma imagem de recuperação usando esses arquivos de dispositivo. No Android SDK, clique em Ferramentas -> Gerenciar AVDs. Clique em Novo. Configure-o da seguinte forma:

Em seguida, clique em OK.

Depois de ter seu AVD e sua imagem de recuperação, você pode inicializar o TWRP no emulador navegando até a pasta android-sdk / tools e executar este comando:

Observe que o ADB não funciona imediatamente. Cerca de 10 a 15 segundos após o término da inicialização do TWRP, o ADB ficará online. Iniciamos o ADB via init.rc, portanto, mesmo que o TWRP falhe ao inicializar devido a algum tipo de erro de código que você possa ter cometido, o ADB ainda deve funcionar. Apreciar!

Dispositivos TWRP e A / B (créditos para TeamWin):

Do ponto de vista do TWRP, os dispositivos A / B não são muito diferentes dos dispositivos normais, mas os desenvolvedores parecem ter vergonha de trabalhar nesses dispositivos. Vou tentar lançar alguma luz sobre este assunto e espero que isso sirva como um guia para portar TWRP para dispositivos A / B.

Em primeiro lugar, vamos entender o que é um dispositivo A / B e como ele é diferente. Os dispositivos A / B têm duplicatas de muitas partições no dispositivo. Um dispositivo A / B tem 2x partições de sistema, 2x partições de inicialização, 2x partições de fornecedor, 2x partições de modem / firmware, etc. Apenas um slot está em uso por vez. Durante a inicialização inicial, os primeiros estágios do bootloader lêem uma pequena quantidade de dados chamados de BCB ou Bootloader Control Block e decidem se inicializam as partições A ou B. Quando uma atualização OTA está disponível, os dados do slot ativo são copiados do slot inativo e corrigidos / atualizados. Por exemplo, se você estiver atualmente no slot A, seu dispositivo baixará a atualização e copiará a partição do sistema existente do slot A e corrigirá / atualizará com as novas atualizações no slot B. Assim que a cópia e atualização forem concluídas, o BCB é atualizado e o dispositivo é reinicializado usando o slot B. Na próxima vez que uma atualização estiver disponível, a partição do sistema no slot B é copiada para o slot A e atualizada, o BCB é atualizado e reinicializamos no slot A. Ao visualizar as partições no dispositivo, você verá algo assim:

Observe a inicialização dupla, partições do sistema e do fornecedor na lista acima, mas apenas uma partição de dados do usuário.

Embora não haja nenhum requisito técnico que eu saiba, todos os dispositivos A / B enviados até agora não têm partição de recuperação separada. Em vez disso, a imagem de inicialização contém a recuperação em seu ramdisk. O importante é saber que a imagem de boot agora também contém a recuperação. Para completar, a partição do sistema é um sistema de arquivos raiz completo. Durante a inicialização, se o kernel for informado para inicializar na recuperação, ele extrairá o ramdisk na partição de inicialização. Se o carregador de inicialização não disser ao kernel para inicializar na recuperação, ele montará a partição do sistema apropriada (A ou B) porque a partição do sistema é um sistema de arquivos raiz completo. Isso significa que a partição do sistema nesses dispositivos é montada em / em vez de / sistema e a partição do sistema contém todos os arquivos que normalmente estariam no ramdisk da imagem de inicialização e em uma subpasta / system.

Do ponto de vista do TWRP, há 3 coisas que você deve fazer para um dispositivo A / B. Primeiro, você precisa definir

Código:

Por último, depois de entrar no TWRP, você provavelmente desejará ter certeza de que bootctl hal-info responda corretamente sem erros. Normalmente, o binário bootctl requer uma biblioteca proprietária ou mesmo alguns serviços para funcionar corretamente. Se o bootctl não funcionar corretamente, você também não poderá alternar slots dentro do TWRP.

Além de definir

Código:

AB_OTA_UPDATER: = verdadeiro

você também pode definir:

Código:

BOARD_USES_RECOVERY_AS_BOOT: = verdadeiro

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = verdadeiro

Se você definir

Código:

BOARD_USES_RECOVERY_AS_BOOT: = verdadeiro

então make recoveryimage não funcionará mais e, em vez disso, você terá que fazer bootimage. Eu não recomendo definir qualquer um desses sinalizadores para árvores de construção somente TWRP. Essas sinalizações provavelmente serão necessárias para desenvolvedores que criam ROMs completas para dispositivos A / B.

Instalando / atualizando o TWRP em dispositivos A / B:

Visto que todos os dispositivos A / B conhecidos não têm uma partição de recuperação separada, você eventualmente terá que fazer o flash TWRP na partição de inicialização. No Pixel 1 e 2, usamos a inicialização rápida para inicializar temporariamente o TWRP sem atualizar o TWRP. Estamos fornecendo um zip para permitir que os usuários façam o flash TWRP em ambos os slots. Você pode baixar um desses zips de nosso site e atualizar o zip conforme necessário para oferecer suporte aos seus dispositivos. Eventualmente, adicionaremos ferramentas ao TWRP para permitir que os usuários façam recuperações nesses dispositivos sem a necessidade de usar zips.

Recentemente, trabalhei no telefone Razer. Infelizmente, o telefone Razer não oferece suporte para inicialização rápida. Em vez disso, os usuários devem determinar seu slot de inicialização atualmente ativo usando

Código:

para entrar no TWRP. Uma vez no TWRP, eles podem ir para a página de reinicialização e voltar ao slot ativo original, fazer um backup e instalar o TWRP. Usar o slot inativo permite que os usuários obtenham um backup bom e não modificado de seus dispositivos antes de instalar o TWRP.

Notas Adicionais:

Se você gostaria de obter TWRP oficialmente compatível com o seu dispositivo para que ele possa ser instalado automaticamente com o aplicativo TWRP, e você realmente deseja fazer isso para que outros proprietários do mesmo dispositivo possam desfrutar do suporte TWRP oficial e é a coisa boa a fazer, você precisará enviar as seguintes informações para TeamWin:

  1. Arquivos de configuração do dispositivo para compilar o TWRP da fonte para o seu dispositivo - não reembale um recovery.img manualmente , eles precisam compilá-lo a partir do código-fonte.
  2. Depois que o TeamWin criar uma cópia do TWRP, eles a enviarão para você para validação - uma vez que você tenha validado, o TeamWin irá construir uma imagem funcional para o seu dispositivo e adicioná-la ao aplicativo TWRP oficial.
13 minutos lidos