19/12/2015

Damn friday

Ontem, no trabalho, me deparei com minha incompetência para fazer um Makefile.

Necessitava de um para que eu pudesse adicionar um módulo de kernel na hora da compilação do Android.

Com ajuda externa foi um pouco menos doloroso, mas no fim, ainda não conseguimos compilar com sucesso, mas considerando o esforço de aprender algo inútil, compartilhemos alguns pontos.

Como não temos acesso ao source code, vamos exemplificar com a tree abaixo do code aurora:

https://www.codeaurora.org/cgit/quic/la/kernel/msm/tree/

Precisávamos, inicialmente, que o Android permitisse o carregamento de módulos, isto já estava habilitado na config de compilação do kernel:

CONFIG_MODULES=y

https://www.codeaurora.org/cgit/quic/la/kernel/msm/tree/arch/arm/configs/msm7630_defconfig#n105

Mas não estávamos falando sobre Android Makefile?

Sim, por isso, para mais informações de como compilar um módulo para o kernel:

http://www.makelinux.net/books/lkd2/ch02lev1sec3
https://rechtzeit.wordpress.com/2011/03/21/77/

Com nosso kernel habilitado para o carregamento de módulos, precisávamos gerá-los na compilação e jogá-los em algum lugar.

Para a compilação dos módulos, havia um makefile com, basicamente obj-m e um script .sh que chamava make target modules_prepare e o make target:

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/kbuild/modules.txt
https://www.kernel.org/doc/Documentation/kbuild/modules.txt

Bom, basicamente tinhamos que chamar o .sh de algum lugar...
Jogamos a pasta com os arquivos, o .sh, o makefile e criamos um Android.mk no mesmo nível do .sh.

Na hora da compilação do source code, todos os Android,mk são parseados, dessa forma, garantindo que nosso módulo seria chamado, bastava, dentro do Android.mk, fazer a chamada para o .sh.

Considerando todos as macros e possíveis variáveis já setadas:

http://android.mk/
http://www.netmite.com/android/mydroid/build/core/definitions.mk

Tentamos compilar... e falha!
Aparentemente, após chamado a escolha do produto, o Android não permite modíficação no PRODUCT_PACKAGES, que no caso, estavamos adicionando os módulos.

Mudamos para um qualquercoisa.mk e fizemos o androidKernel.mk chamá-lo... sucesso! Mas a compilação falhou...

12 horas foram nesse trabalho... corrige... falha... corrige... falha...
Resumindo... que dia de cão... cansei de escrever...

Nenhum comentário:

Postar um comentário