Do Zero: Guia Completo para Desenvolvimento do Módulo Kernel do Anbox

Do Zero: Guia Completo para Desenvolvimento do Módulo Kernel do Anbox

Você já enfrentou problemas de compatibilidade ao executar aplicativos Android no Linux? Deseja entender os princípios fundamentais do Anbox e resolver problemas de falha no carregamento do módulo kernel? Este artigo irá guiá-lo do início,掌握 o processo completo desde a compilação do driver até o carregamento do sistema do módulo kernel do Anbox, permitindo superar vários desafios durante o desenvolvimento.

Visão Geral dos Módulos Kernel do Anbox

O Anbox (Android in a Box) é um projeto de código aberto baseado em tecnologia de contêiner que permite executar um sistema Android completo em um sistema GNU/Linux padrão. Seu núcleo depende de dois módulos kernel críticos: ashmem_linux (memória compartilhada anônima) e binder_linux (comunicação interprocessos). Esses dois módulos fornecem o suporte底层 necessário para os aplicativos Android, garentindo que possam operar corretamente.

Preparação do Ambiente e Instalação de Dependências

Antes de iniciar o desenvolvimento do módulo kernel, é necessário garantir que o ambiente do sistema atenda aos seguintes requisitos:

  1. Instalar as ferramentas de desenvolvimento necessárias e bibliotecas de dependências:

    sudo apt update
    sudo apt install build-essential linux-headers-$(uname -r) git
    
  2. Obter o código-fonte do Anbox:

    git clone https://github.com/anbox/anbox
    cd anbox
    
  3. Verificar a compatibilidade da versão do kernel. Recomenda-se usar Ubuntu 18.04 ou superior, com kernel versão 4.15 ou superior. Você pode verificar a versão atual do kernel com o comando uname -r.

Processo de Compilação do Módulo Kernel

Configuração das Opções de Compilação

O Anbox usa CMake como sistema de compilação. Primeiro, configure as opções de compilação:

mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release

Compilação dos Módulos Kernel

Execute os seguintes comandos para compilar os módulos ashmem e binder:

make -j$(nproc)

Após a compilação ser concluída, os arquivos do módulo kernel (.ko) serão gerados no diretório build/src/anbox/.

Assinatura do Módulo (para Ambiente Secure Boot)

Se o Secure Boot estiver habilitado no sistema, será necessário assinar os módulos kernel compilados. Siga estes passos:

  1. Criar um certificado autoassinado:

    openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Anbox Module Signing Key/"
    
  2. Importar o certificado usando a ferramenta MOK:

    sudo mokutil --import MOK.der
    
  3. Assinar os módulos kernel:

    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ./build/src/anbox/ashmem_linux.ko
    sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der ./build/src/anbox/binder_linux.ko
    

Carregamanto e Verificação do Módulo Kernel

Carregamento Manual do Módulo Kernel

Use os seguintes comandos para carregar manualmente os módulos kernel compilados:

sudo insmod ./build/src/anbox/ashmem_linux.ko
sudo insmod ./build/src/anbox/binder_linux.ko

Ou use diretamente o script de carregamento fornecido pelo Anbox:

sudo ./scripts/load-kmods.sh

Verificação do Status do Módulo Carregado

Execute os seguintes comandos para verificar se os módulos foram carregados com sucesso:

lsmod | grep -e ashmem_linux -e binder_linux

Se a saída for semelhante ao seguinte, significa que os módulos foram carregados com sucesso:

ashmem_linux           20480  0
binder_linux          163840  0

Ao mesmo tempo, o sistema criará os nós de dispositivo correspondentes no diretório /dev:

ls -l /dev/{ashmem,binder}

Configuração de Carregamento Automático

Para que o módulo kernel seja carregado automaticamente na inicialização do sistema, crie um arquivo de configuração:

sudo tee /etc/modules-load.d/anbox.conf <<eof ashmem_linux="" binder_linux="" eof=""></eof>

Problemas Comuns e Técnicas de Depuração

Diagnóstico de Falhas no Carregamento de Módulos

Se encontrar falhas no carregamento de módulos, você pode ver informações detalhadas de erro usando o seguinte comando:

dmesg | grep -e ashmem -e binder

Problemas comuns e soluções:

  • Falha de carregamento caused pelo Secure Boot: 参考 a seção 3.3 para assinatura do módulo
  • Incompatibilidade de versão do kernel: Certifique-se de recompilar usando os arquivos de cabeçalho correspondentes à versão atual do kernel
  • Dependências do módulo ausentes: Use o comando modinfo para verificar as dependências do módulo

Uso da Ferramenta de Diagnóstico do Anbox

O Anbox fornece scripts de diagnóstico convenientes que podem ajudar a identificar problemas:

sudo ./scripts/collect-bug-info.sh

Este script coletará informações do sistema, arquivos de log, etc., e gerará um relatório de diagnóstico facilitando a análise de problemas pelos desenvolvedores.

Publicado em 7-25 02:23