SultanXDA explica abordagem de ROM unificada no OnePlus 3/3T

Entramos em contato com SultanXDA para saber como sua ROM e kernel unificados funcionam para o OnePlus 3/3T. Continue lendo enquanto descobrimos!

Na época em que cobrimos aquele desenvolvedor reconhecido pelo XDA Sultanxda liberou seu ROM e kernel CyanogenMod 13 personalizados para o OnePlus 3T, muitas pessoas ficaram surpresas ao ver a “mesma” compilação de ROM lançada para o OnePlus 3T chegar ao OnePlus 3 (ou vice-versa!).

Sultanxda adotou a abordagem unificada para distribuição de ROMs para o OnePlus 3 e a OnePlus 3T devido ao seu hardware bastante semelhante e software de baixo nível. Isso significava que a ROM oferecia compatibilidade cruzada entre os dois dispositivos, onde o mesmo zip da ROM poderia ser distribuído para a dupla. Os zips compatíveis entre si permitiram que os usuários (e o desenvolvedor também) não se preocupassem em atualizar acidentalmente o zip errado e obter um dispositivo bloqueado. Isso não quer dizer que o OnePlus 3/3T seja fácil de usar - apenas acarreta menos dores de cabeça para todas as partes envolvidas.

Entramos em contato com o desenvolvedor reconhecido pelo XDA Sultanxda lançar mais luz sobre todo o procedimento, a fim de incentivar a adoção de seu método. Aqui estão as principais conclusões da conversa com ênfase adicional:

O que há de diferente no OnePlus 3/3T que permite ROMs unificadas?

A razão pela qual uma ROM unificada é possível é porque o OnePlus unificou o BSP (as bibliotecas proprietárias) [Board Support Package]. Embora unificar um kernel seja fácil, unificar uma ROM normalmente é impossível para desenvolvedores de [ROM] devido a inconsistências no BSP que somente o OEM pode resolver. Da minha parte, tudo que tive que fazer foi unificar o kernel e separar algumas imagens de firmware da GPU. As imagens de firmware da GPU são diferentes entre o Snapdragon 820 e 821, portanto, não são compatíveis entre si. Eu modifiquei o kernel para torná-lo carregue o firmware correto da GPU para cada dispositivo para corrigir isso. Eu então adicionou as imagens de firmware correspondentes para a ROM neste commit. O restante das imagens de firmware específicas do dispositivo (como as imagens do modem) estão localizadas em uma partição de firmware em cada dispositivo, portanto o problema da GPU foi o único problema relacionado ao firmware que enfrentei.

Como a ROM e o Kernel descobrem qual dispositivo é?

O kernel sabe em qual dispositivo está sendo executado graças ao bootloader. O bootloader seleciona a configuração da árvore de dispositivos (empacotada na imagem do kernel) que corresponde ao ID da placa e passa isso configuração no kernel Isso dá ao kernel flexibilidade para carregar as configurações apropriadas para o OnePlus 3 e o OnePlus 3T. Você pode encontrar o ID da placa para o OnePlus 3 e a OnePlus 3T seguindo os hiperlinks.

Você só precisa de um kernel modificado para suportar compilações unificadas?

Não, a ROM também deve ser unificada. OnePlus unificou o BSP a partir dos Open Betas para o OP3 e o manteve unificado no lançamento oficial do OP3T OxygenOS. Isso significa que as ROMs devem usar bibliotecas proprietárias das compilações Open Beta do OP3 ou do lançamento oficial do OxygenOS do OP3T para serem unificadas. Há também o requisito de imagem de firmware da GPU que descrevi acima, e a tela sensível ao toque do OP3T o firmware também precisa ser incluído na ROM (isso foi adicionado no commit do firmware da GPU ao qual vinculei acima).

Além disso, há uma ressalva para o kernel unificado: os desenvolvedores devem usar meu kernel (que já está unificado) ou devem adicionar suporte OP3 ao kernel OxygenOS do OP3T. O suporte para o OP3T não pode simplesmente ser adicionado ao kernel do OP3 devido ao suporte incompleto ao Snapdragon 821, portanto a unificação pode exigir muito trabalho dos desenvolvedores OP3 dispostos. Meu kernel já tinha suporte completo ao Snapdragon 821 quando recebi o OP3T (já que meu kernel é baseado no ramo Snapdragon 821 da CAF), então o processo de unificação foi bastante simples para mim.

Tenho certeza de que muitos desenvolvedores prefeririam usar o kernel OxygenOS do OP3T em vez do meu kernel, o que exigiria adicionar suporte para o OP3 a ele. Não pensei em criar um kernel unificado para ROMs do OxygenOS, portanto, pode ser necessário trabalho adicional para que isso aconteça.

Outros desenvolvedores podem dar uma olhada no código e ver como isso é feito?

Sim. Sultanxda menciona que todo o seu trabalho está disponível publicamente em seu Conta GitHub, para que qualquer pessoa com o conhecimento necessário possa ver como a unificação da ROM foi realizada. É verdade que o procedimento é um pouco complicado e requer um certo nível de especialização, mas é um processo muito definido e esquecido com benefícios originados na forma de menor manutenção, menos duplicação de trabalho e maior sensação de segurança de que as pessoas não confundirão os arquivos dos dois dispositivos, pois apenas um zip funciona para ambos. Depois que uma ROM ou kernel for unificado e confirmado como totalmente funcional no OnePlus 3 e no OnePlus 3T, muito pouco trabalho adicional será necessário.


Esperamos ter trazido à luz novas informações que devem ajudar mais desenvolvedores a optar por compilações unificadas para os dispositivos. O desenvolvimento no OnePlus 3T está crescendo, e as compilações unificadas são o futuro para ambos os dispositivos daqui para frente.