Quais são as principais alterações que o Android fez no kernel do Linux?
O que é interessante no design do Android's é o quão pouco modificamos o kernel. A maioria dos sistemas embarcados nos quais eu trabalhei fizeram mudanças drásticas no kernel, apenas para deixar o espaço do usuário sozinho - por exemplo, um kernel "em tempo real" altamente modificado mas X11 para uma GUI.
Android é o oposto: apenas mudanças mínimas no kernel, mas um espaço do usuário totalmente diferente do de qualquer outro sistema Unix. De facto, o espaço de utilizador do Android's é tão diferente do stock Linux, que se pode facilmente dizer que o Android não é de forma alguma um sistema Linux, excepto para o kernel.
Aqui está uma lista concisa das alterações que fizemos ao kernel Linux:
- ashmem (Android Shared Memory), um sistema de memória partilhada baseado em ficheiros.
- Binder, um sistema de comunicação inter-processo (IPC) e chamada de procedimento remoto (RPC).>li>logger, um mecanismo de registro de alta velocidade no kernel otimizado para writes.>li>Paranoid Networking, um mecanismo para restringir I/O da rede a certos processos.li>li>pmem (Memória Física), um driver para mapear grandes pedaços de memória física no espaço do usuário.>li>Viking Killer, um substituto do OOM killer que implementa a lógica "kill least recently use process" do Android's sob condições de pouca memória.
>li>li>wakelocks, Android's solução única de gerenciamento de energia, na qual o estado padrão do dispositivo é o de dormir e é necessária uma ação explícita (via wakelock) para evitar isso.
>br>E, claro, a variedade usual de drivers, portas de arquitetura ARM e outros códigos de baixo nível associados necessários para suportar o Android em qualquer dispositivo.
Desta lista, quase todos os bullets foram implementados como drivers de dispositivos com pouca ou nenhuma alteração necessária no código do núcleo do kernel. A única alteração significativa no espaçamento do subsistema é wakelocks.
(Para os curiosos, da lista acima, eu escrevi ashmem, logger, e Paranoid Networking.)
Artigos semelhantes
- Qual é a diferença entre 'Android', 'Embedded Linux', e 'Vanilla Linux kernel'?
- Como portar um novo kernel num dispositivo Android com kernel existente
- O Chrome OS é realmente baseado no kernel do Linux? Se sim, por que ele não pode rodar programas Linux?
- Kernel do Linux: O que significa asmlinkage na definição de chamadas de sistema?