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:
-
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 -
Obter o código-fonte do Anbox:
git clone https://github.com/anbox/anbox cd anbox -
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:
-
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/" -
Importar o certificado usando a ferramenta MOK:
sudo mokutil --import MOK.der -
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
modinfopara 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.