Use as seguintes definições de configuração como base para um kernel do Android
configuração do Terraform. As configurações da conta android-base
são organizadas em arquivos .cfg
android-base-ARCH
e
android-recommended
:
- As opções de
android-base
ativam os principais recursos do Android e deve ser configurado conforme especificado por todos os dispositivos. android-base-ARCH
opção ativa o núcleo recursos do Android e devem ser configurados conforme especificado por todos os dispositivos do da arquitetura ARCH. Nem todas as arquiteturas têm um arquivo correspondente de opções específicas da arquitetura necessárias. Se sua arquitetura não tiver um arquivo, ele não terá configuração adicional de kernel específica da arquitetura e requisitos do Android.android-recommended
: Essas opções ativam recursos avançados do Android e são opcionais para dispositivos.
Esses arquivos de configuração estão localizados
kernel/configs
repositório. Use o conjunto de arquivos de configuração que corresponde à versão do
kernel que está usando.
Para mais detalhes sobre os controles já empreendidos para fortalecer o kernel na sua dispositivos, consulte Sistemas segurança do kernel. Para detalhes sobre as configurações necessárias, consulte a Documento de definição de compatibilidade do Android (CDD).
Gerar configuração do kernel
Para dispositivos que têm um formato defconfig
minimalista, use o
Script merge_config.sh
na árvore de kernel para ativar as opções:
ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg
Isso gera um arquivo .config
que pode ser usado para salvar um novo
Arquivo defconfig
ou compilar um novo kernel com recursos do Android
ativado.
Outros requisitos de configuração do kernel
Em alguns casos, o administrador da plataforma pode escolher entre diversos kernels para satisfazer uma dependência do Android. Essas dependências não podem expressa nos arquivos de fragmento de configuração do kernel (descrito acima) porque a nesses arquivos não oferece suporte a expressões lógicas. No Android 9 e superior, o conjunto de teste de compatibilidade (CTS) e O pacote de testes do fornecedor (VTS, na sigla em inglês) verifica se os seguintes requisitos sejam atendidos:
CONFIG_OF=y
ouCONFIG_ACPI=y
- Os kernels 4.4 e 4.9 têm
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
OU têmCONFIG_MEMCG=y
eCONFIG_MEMCG_SWAP=y
CONFIG_DEBUG_RODATA=y
ouCONFIG_STRICT_KERNEL_RWX=y
CONFIG_DEBUG_SET_MODULE_RONX=y
ouCONFIG_STRICT_MODULE_RWX=y
- Apenas para ARM64:
CONFIG_ARM64_SW_TTBR0_PAN=y
ouCONFIG_ARM64_PAN=y
Além disso, a opção CONFIG_INET_UDP_DIAG
precisa ser definida como
y
para kernels 4.9 no Android 9 e versões mais recentes.
Ativar opções de modo host USB
Para áudio no modo host USB, ative as seguintes opções:
CONFIG_SND_USB=y CONFIG_SND_USB_AUDIO=y # CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver
Para MIDI no modo de host USB, ative a seguinte opção:
CONFIG_SND_USB_MIDI=y
Seccomp BPF com TSYNC
O Secure Computing Berkeley Packet Filter (Seccomp BPF) é uma solução de segurança tecnologia que permite a criação de sandboxes que definem o contexto em que um processo pode fazer chamadas ao sistema. Sincronização de encadeamento (TSYNC) permite o uso do Seccomp BPF a partir de programas com vários segmentos. Isso é limitada a arquiteturas que tenham suporte ao Seccomp upstream (ARM, ARM64, x86 e x86_64).
Daemon de bloqueio em tempo real do Android
O Android 10 inclui o daemon de bloqueio em tempo real do Android
(llkd
), que foi projetado para detectar e mitigar os impasses do kernel.
Para detalhes sobre como usar o llkd
, consulte
Daemon de bloqueio dinâmico do Android.
vDSO32 no ARM64
O objeto compartilhado dinâmico virtual (vDSO, na sigla em inglês) é uma alternativa às chamadas do sistema que
quando usada e configurada corretamente, pode reduzir os custos do ciclo. Android
10 adiciona suporte ao vDSO32 em kernels de 64 bits (Android
já oferece suporte ao vDSO64 em kernels de 64 bits e ao vDSO32 em kernels de 32 bits). Usando
O vDSO32 (CONFIG_VDSO_COMPAT
) na arquitetura ARM64 oferece uma
Aumento de 0,4% na duração da bateria e outras melhorias de desempenho.
A comunidade Linux está trabalhando ativamente
Unificar vDSOs
entre arquiteturas. Para configurar o vDSO no kernel do Linux, ative
vDSO32 com CONFIG_COMPAT
e
CONFIG_CROSS_COMPILE_COMPAT_VDSO
com o trio do compilador arm32.
A equipe do kernel do Android fez backport de versões mais antigas da série de patches vDSO
em dispositivos Pixel, para que você possa encontrar exemplos nos builds do kernel do Pixel.
(caminho LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
,
CROSS_COMPILE_ARM32
, e
CONFIG_CROSS_COMPILE_ARM32
).
Configuração de pouca RAM
Ajustar o kernel e o ActivityManager para reduzir a recuperação direta
A recuperação direta acontece quando um processo ou o kernel tenta alocar uma página
de memória (diretamente ou devido a uma falha em uma nova página) e o kernel
usou toda a memória livre disponível. Isso exige que o kernel bloqueie a alocação
enquanto libera uma página. Isso, por sua vez, muitas vezes exige que a E/S do disco esvazie uma
página suja protegida por arquivo sujo ou aguarde até que lowmemorykiller
interrompa um
de desenvolvimento de software. Isso pode resultar em E/S extra em qualquer linha de execução, incluindo uma linha de execução de interface.
Para evitar a recuperação direta, o kernel tem marcas d'água que acionam
kswapd
ou recuperação em segundo plano. Esta é uma conversa que tenta
liberar páginas para que, na próxima vez que um thread real estiver alocado, ele possa ter sucesso rapidamente.
O limite padrão para acionar a recuperação do plano de fundo é baixo, cerca de 2 MB em um dispositivo de 2 GB e 636 KB em um dispositivo de 512 MB. A recupera apenas alguns megabytes de memória na recuperação em segundo plano. Isso significa que Qualquer processo que aloque rapidamente mais do que alguns megabytes vai rapidamente pode haver uma reivindicação direta.
O suporte a um kernel ajustável foi adicionado à ramificação do kernel do Android-3.4 como
patch 92189d47f66c67e5fd92eafaa287e153197a454f ("adicionar kbytes sem custo financeiro extras
ajustável"). Escolher diretamente esse patch para o kernel de um dispositivo permite
ActivityManager
para dizer ao kernel para tentar manter três arquivos em tela cheia
32 bpp buffers de memória livres.
Esses limites podem ser configurados com o config.xml
de análise de dados em nuvem.
<!-- Device configuration setting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). A high value increases the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A low value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Overrides the default value chosen by ActivityManager based on screen size. 0 prevents keeping any extra memory over what the kernel keeps by default. -1 keeps the default. --> <integer name="config_extraFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the /proc/sys/vm/extra_free_kbytes tunable in the kernel (if it exists). 0 uses the default value chosen by ActivityManager. A positive value increases the amount of memory that the kernel tries to keep free, reducing allocation time and causing the lowmemorykiller to kill earlier. A negative value allows more memory to be used by processes but may cause more allocations to block waiting on disk I/O or lowmemorykiller. Directly added to the default value chosen by ActivityManager based on screen size. --> <integer name="config_extraFreeKbytesAdjust">0</integer>
Ajustar LowMemoryKiller
O ActivityManager
configura os limites do
LowMemoryKiller
para corresponder à expectativa do conjunto de trabalho de
páginas protegidas por arquivo (páginas em cache) necessárias para executar os processos em cada prioridade
bucket de nível de serviço. Se um dispositivo tiver requisitos altos para o conjunto de trabalho, por exemplo
se a interface do fornecedor exigir mais memória ou se mais serviços tiverem sido adicionados, o
os limites mínimos podem ser aumentados.
Os limites podem ser reduzidos se houver muita memória reservada para páginas protegidas por arquivo, de modo que os processos em segundo plano sejam encerrados muito antes a sobrecarga do disco pode ocorrer porque o cache fica muito pequeno.
<!-- Device configuration setting the minfree tunable in the lowmemorykiller in the kernel. A high value causes the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value keeps more processes in memory but may cause thrashing if set too low. Overrides the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. -1 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAbsolute">-1</integer>
<!-- Device configuration adjusting the minfree tunable in the lowmemorykiller in the kernel. A high value causes the lowmemorykiller to fire earlier, keeping more memory in the file cache and preventing I/O thrashing, but allowing fewer processes to stay in memory. A low value keeps more processes in memory but may cause thrashing if set too low. Directly added to the default value chosen by ActivityManager based on screen size and total memory for the largest lowmemorykiller bucket, and scaled proportionally to the smaller buckets. 0 keeps the default. --> <integer name="config_lowMemoryKillerMinFreeKbytesAdjust">0</integer>