Tutorial de Compilação do AOSP e Inclusão de Driver na Raspberry Pi - theedwilk/JoystickRaspberry-HandsOn-DevTitans GitHub Wiki
📖 Sobre o Projeto
Este tutorial faz parte do projeto Joystick Raspberry – DevTITANS Hands-On, e tem como objetivo demonstrar o processo de compilação do Android Open Source Project (AOSP) com a inclusão de um driver personalizado (NESJoy) para a Raspberry Pi 4.
Através deste guia, você aprenderá a:
-
Baixar e configurar o AOSP da Raspberry Pi.
-
Compilar o AOSP com um driver customizado.
-
Gerar e gravar uma imagem Android pronta para execução no dispositivo.
1. Baixando o AOSP da Raspberry
Fonte
- Link: Raspberry Vanilla AOSP Manifest
- Branch: android-16.0
- Bruno Solimões
Passos
- Criar uma nova pasta para o aosp da raspberry:
$ mkdir aosp-raspberry
$ cd aosp-raspberry
- Instalar os pacotes necessários:
$ sudo apt-get install dosfstools e2fsprogs fdisk kpartx mtools rsync
- Inicializar o repositório:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r1
$ curl -o .repo/local_manifests/manifest_brcm_rpi.xml -L https://raw.githubusercontent.com/raspberry-vanilla/android_local_manifest/android-16.0/manifest_brcm_rpi.xml --create-dirs
- Sincronize o repositório
$ repo sync
2. Criando a Imagem
- Configure o ambiente de compilação
$ . build/envsetup.sh
- Selecione o dispositivo ( rpi4 ) e crie o destino (interface do usuário do tablet)
$ lunch aosp_rpi4-bp2a-userdebug
- Compile o AOSP
$ make bootimage systemimage vendorimage -j$(nproc)
- Gere uma imagem flashável para o dispositivo ( rpi4)
$ ./rpi4-mkimg.sh
3. Compilando o Kernel do Android
- Baixando o kernel
$ cd ~
$ mkdir kernel-aosprasp
$ cd kernel-aosprasp
$ repo init --depth=1 -u https://android.googlesource.com/kernel/manifest -b common-android16-6.12
$ repo sync --force-sync --no-clone-bundle --no-tags -j$(nproc)
- Configure os recursos para compilação do kernel
$ tools/bazel build --defconfig_fragment=common/arch/arm64/configs/gki_defconfig
- Compile o kernel
$ time tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_dist
4. Gerando o arquivo .ko do drive
- Crie a pasta do driver
$ cd ~
$ cd /kernel-aosprasp/common-modules/virtual-device
$ mkdir nesjoy
Copie o arquivo joy_driver_module.c para dentro dessa pasta.
- Inclua ele como dependência na compilação do kernel:
$ cd ..
$ code BUILD.bazel
- Dentro do BUILD.bazel coloque os seguintes códigos:
filegroup(
name = "virtual_device_x86_64_common_sources",
srcs = [
":common_sources",
"//common:kernel_x86_64_sources",
],
)
filegroup(
name = "nesjoy",
srcs = [
":nesjoy/joy_driver_module.c"
],
)
ddk_headers(
name = "common_headers",
hdrs = glob(["uapi/**/*.h"]),
includes = ["."],
linux_includes = ["uapi"],
) …
…
ddk_module(
name = "aarch64/vkms",
srcs = [":vkms_sources"],
out = "vkms.ko",
kernel_build = ":virtual_device_aarch64",
deps = [":common_headers"],
)
ddk_module(
name = "aarch64/nesjoy",
srcs = [":nesjoy"],
out = "nesjoy.ko",
kernel_build = ":virtual_device_aarch64",
deps = [":common_headers"],
)
kernel_module_group(
name = "virtual_device_aarch64_external_modules",
srcs = [...
…
kernel_module_group(
name = "virtual_device_aarch64_external_modules",
srcs = [
":aarch64/goldfish_drivers/goldfish_address_space",
":aarch64/goldfish_drivers/goldfish_pipe",
":aarch64/goldfish_drivers/goldfish_sync",
":aarch64/v4l2loopback",
":aarch64/vkms",
":aarch64/nesjoy",
"//common-modules/virtio-media/driver:aarch64/virtio-media",
],
)
…
Salve.
5. Compilando o Kernel com o Novo Driver
$ cd ~/kernel-aosprasp
$ time tools/bazel run //common-modules/virtual-device:virtual_device_aarch64_dist
- Copie o arquivo .ko gerado
$ cp out/virtual-device_aarch64/dist/nesjoy_drive_modulo.ko ~/aosp-raspberry/kernel/nesjoy_drive_modulo
6. Criando o Android.bp do Driver
- Crie o arquivo:
$ code Android.bp
Cole o código:
prebuilt_etc {
name: "nesjoy.ko",
src: "nesjoy.ko",
sub_dir: "lib/modules",
filename_from_src: true,
installable: true,
vendor: true,
}
7. Recompilando o AOSP com o Driver
$ cd ~/aosp-raspberry
$ . build/envsetup.sh
$ lunch aosp_rpi4-bp2a-userdebug
$ make bootimage systemimage vendorimage -j$(nproc)
$ ./rpi4-mkimg.sh
8. Gravando a Imagem na Raspberry
- Para gravar a imagem gerada pode usar o gravador oficial da Raspberry, o raspberry image.
Use o Raspberry Pi Imager oficial.
- Escolha “Use custom image”.
- Localize a imagem gerada em:
~/aosp-raspberry/out/target/product/rpi4 - Com o nome: RaspberryVanillaAOSPxx-xxxxxxxx-rpi4.img
- Selecione o dispositivo SD e grave.
- Insira o cartão SD na Raspberry Pi e ligue-a.