O que é um kernel? Se você gastar algum tempo lendo fóruns, blogs, posts de instruções ou discussões on-line do Android, em breve ouvirá pessoas falando sobre o kernel. Um kernel não é algo exclusivo do Android - o iOS e o MacOS têm um, o Windows tem um, o QNX do BlackBerry tem um; na verdade, todos os sistemas operacionais de alto nível têm um. O que nos interessa é o Linux, como o Android usa. Vamos tentar detalhar o que é e o que faz.
Os dispositivos Android usam o kernel do Linux, aposto que todos os telefones usam sua própria versão. Os mantenedores de kernel do Linux mantêm tudo organizado e disponível, contribuidores (como o Google) adicionam ou alteram coisas para melhor atender às suas necessidades e as pessoas que fazem o hardware também contribuem, porque precisam desenvolver drivers de hardware para as peças que estão usando para a instalação. versão do kernel que eles estão usando. É por isso que leva um tempo para desenvolvedores e hackers independentes do Android portarem novas versões para dispositivos mais antigos e colocarem tudo funcionando. Os drivers criados para funcionar com uma versão do kernel de um telefone podem não funcionar com uma versão diferente do software no mesmo telefone. E isso é importante, porque uma das principais funções do kernel é controlar o hardware. É um monte de código-fonte, com mais opções ao construí-lo do que você pode imaginar, mas no final é apenas o intermediário entre o hardware e o software.
Quando o software precisa do hardware para fazer qualquer coisa, ele envia uma solicitação ao kernel. E quando dizemos qualquer coisa, queremos dizer qualquer coisa. Desde o brilho da tela, ao nível do volume, até o início de uma chamada pelo rádio, mesmo o que é exibido na tela é controlado pelo kernel. Por exemplo - quando você toca no botão de pesquisa no seu telefone, instrui o software a abrir o aplicativo de pesquisa. O que acontece é que você tocou em um determinado ponto do digitalizador, que informa ao software que você tocou a tela nessas coordenadas. O software sabe que, quando esse ponto específico é tocado, a caixa de diálogo de pesquisa deve abrir. O kernel é o que instrui o digitalizador a procurar (ou ouvir, os eventos são "ouvidos") por toques, ajuda a descobrir onde você tocou e informa o sistema que você tocou. Por sua vez, quando o sistema recebe um evento de toque em um ponto específico do kernel (através do driver), ele sabe o que desenhar na tela. Tanto o hardware quanto o software se comunicam nos dois sentidos com o kernel, e é assim que o telefone sabe quando fazer algo. A entrada de um lado é enviada como saída para o outro, seja você jogando Angry Birds ou conectando-se ao Bluetooth do seu carro.
Parece complicado, e é. Mas também é uma lógica de computador bastante padrão - existe uma ação de algum tipo gerada para cada evento e, dependendo dessa ação, as coisas acontecem no software em execução. Sem o kernel para aceitar e enviar informações, os desenvolvedores precisariam escrever código para cada evento para cada peça de hardware em seu dispositivo. Com o kernel, tudo o que eles precisam fazer é se comunicar com ele através das APIs do sistema Android, e os desenvolvedores de hardware precisam apenas fazer o hardware do dispositivo se comunicar com o kernel. O bom é que você não precisa saber exatamente como ou por que o kernel faz o que faz, apenas entendendo que é a passagem do software para o hardware oferece uma boa compreensão do que está acontecendo sob o vidro.
Meio que dá uma perspectiva totalmente nova para os colegas que ficam acordados a noite toda trabalhando no kernels do seu telefone, não é?