Pular para conteúdo

U-boot

qemu

Image by ipicgr from Pixabay

Introdução

Com o intuito armazenar a maior quantidade de informação possível aqui no blog, percebi que ainda nao tinha registrado a forma de flashar o u-boot na vim 3. Que a princípio não é uma tarefa trivial, mas vou descrever os passos.

Baixando U-boot

O u-boot mainline já possui suporte a VIM3. Devido isso, estou usando ele ao invés do fornecido pela própria Khadas. Essa escolha possui alguns impactos, pois o u-boot fornecido pela Khadas possui algumas implementações de comandos que facilitam a usabilidade, como os comandos KBI. Em contra partida eles usam uma versão antiga do u-boot e meu foco é trabalhar no mainline.

O primeiro passo é clonar o repositório:

git clone https://github.com/u-boot/u-boot.git

Dependências

Como a arquitetura do meu PC é x86_64 e a VIM3 usa a aarch64, é necessário utilizar um toolchain para fazer o cross-compile. Atualmente estou utilizando o gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf, mas talvez seja melhor baixar a versão mais atual no site da arm e procurar por aarch64-none-elf.

Para facilitar, eu adiciono o caminho dos binários da toolchain:

export PATH=/home/joao/Documents/boards/VIM3/1_bootloader/Android/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf/bin:$PATH

Compilando o U-boot

Esses passos são executados dentro da pasta u-boot

O primeiro passo da compilação é carregar o defconfig. Para o Android o nome do arquivo é khadas-vim3_android_defconfig ele se encontra dentro da pasta configs/. Para carregar o esse arquivo utilizo o comando:

make CROSS_COMPILE=aarch64-none-elf- O=../out_android/ khadas-vim3_android_defconfig

Caso seja necessário fazer alguma alteração nas configurações, basta utilizar o seguinte comando:

make CROSS_COMPILE=aarch64-none-elf- O=../out_android/ menuconfig

Por fim, para compilar basta usar o comando:

make CROSS_COMPILE=aarch64-none-elf- O=../out_android/

Os arquivos compilados estarão dentro da pasta out_android.

Adicionando assinatura

Para que a VIM3 reconheça o u-boot compilado, é necessário adicionar uma assinatura no começo do binário gerado. Para isso, podemos utilizar um script:

git clone https://github.com/LibreELEC/amlogic-boot-fip.git

Para armazenar o u-boot assinado, criei uma pasta com o nome assinado.

Agora, para adicionar a assinatura, utilizo o seguinte comando dentro da pasta amlogic-boot-fip:

./build-fip.sh khadas-vim3 ../out_android/u-boot.bin ../assinado

Ele irá buscar o u-boot compilado, adicionar a assinatura e salvar na pasta com o nome assinado.

Estrutura das pastas

Para facilitar o entendimento das pastas, essa é a hierarquia final:

.
├── amlogic-boot-fip
├── assinado
├── gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf
├── out_android
└── u-boot

Flashando o U-boot

É necessário um programa extra para flashar o u-boot no mmc da VIM3, que pode ser baixado nesse link. No meu caso, eu coloquei o programa dentro da pasta assinado.

Agora é necessário colocar a VIM3 em um modo especial, para isso ela precisa estar conectado ao computador pela porta USB-C e depois apertar rapidamente 3 vezes no botão do meio (Function Button), entre o botão de power e o de reset. O led azul da placa irá piscar rapidamente durante um espaço de tempo, informando que ele entrou nesse modo especial.

Agora, para flashar o u-boot podemos seguir os passos desse tutorial. Adaptando para o cenário desse post, dentro da pasta assinado, eu utilizo os seguintes comandos:

./update write u-boot.bin 0xfffa0000 0x10000
./update run 0xfffa0000
./update bl2_boot u-boot.bin

Talvez seja necessário ser super usuário para executar esses comandos

Depois disso, a VIM3 entrará em modo Fastboot, e então podemos executar os seguintes comandos:

fastboot oem format
fastboot flash bootloader u-boot.bin
fastboot erase bootenv

Para instalar o fastboot: sudo apt install fastboot.

Reset a placa e pronto, o u-boot estará funcionando. Para ver os logs do u-boot é necessário usar a porta UART.

Comentários