Introduction: Gerando Boot Image Com SPI Habilitado Para Dragonboard 410c
O objetivo desse tutorial é disponibilizar os passos necessários para habilitar comunicação SPI no sistema operacional Linux Linaro baseado em Debian (Versão 17.04.1) e plataforma de desenvolvimento Dragonboard 410c.
Step 1: Pré Requisitos
Os pré requisitos são:
Ambiente de desenvolvimento (Host):
- Computador;
- Sistema operacional Linux;
- Linaro GCC - Cross Compiler.
Plataforma de desenvolvimento (Target):
Step 2: Cross Compile
Cross compile é um método utilizado para gerar executáveis de software para diferentes arquiteturas de computadores. É usado quando o ambiente de desenvolvimento (Host) tem arquitetura diferente do alvo (Dragonboard 410c).
Neste caso, estamos usando um computador/notebook x64 como Host para compilar e gerar os arquivos necessários para arquitetura ARM e posteriormente configurar na Dragonboard 410c.
Download GCC Linaro Cross Compile (Versão 6.3.1):
wget -c http://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz
Definindo um diretório para o Toolchain (Cross Compile):
tar -xJf gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
Step 3: Git Clone Do Kernel
Clone do Kernel usado no sistema operacional Linux Linaro 17.04.1
Obtendo o Kernel:
git clone -n http://git.linaro.org/landing-teams/working/qualcomm/kernel.git
cd kernel
git checkout -b kernel-17.04.1 debian-qcom-dragonboard410c-17.04.1
Step 4: Adicionando Suporte SPI No Device Tree (DTB)
Considerando que estamos no diretório do Kernel, seguem os passos para adicionar suporte SPI no Device Tree do sistema.
Abra o arquivo (apq8016-sbc.dtsi)
vi arch/arm64/boot/dts/qcom/apq8016-sbc.dtsi
Procure as linhas:
spi@78b7000 { /* On High speed expansion */ label = "HS-SPI1"; status = "okay"; }; spi@78b9000 { /* On Low speed expansion */ label = "LS-SPI0"; status = "okay"; };
Substitua por:
spi@78b7000 { /* On High speed expansion */ label = "HS-SPI1"; status = "okay"; spidev@0 { compatible = "spidev"; spi-max-frequency = <50000000>; reg = <0>; }; }; spi@78b9000 { /* On Low speed expansion */ label = "LS-SPI0"; status = "okay"; spidev@0 { compatible = "spidev"; spi-max-frequency = <50000000>; reg = <0>; }; };
Pronto! Salve o arquivo apq8016-sbc.dtsi
Step 5: Build Device Tree (DTB)
Definindo algumas variáveis:
export ARCH=arm64
export CROSS_COMPILE=/opt/gcc-linaro-6.3.1-2017.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
Gerando o device tree (DTB):
make defconfig distro.config
make -j4 Image dtbs KERNELRELEASE=4.9.30-linaro-lt-qcom
Step 6: Build Boot Image
Antes de seguir os próximos passos, certifique-se que o pacote device-tree-compiler esteja instalado corretamente. Caso esteja usando Debian/Ubuntu como Host, você pode instalar da seguinte forma:
sudo apt-get install device-tree-compiler
Considerando que estamos no diretório raiz do Kernel:
- O dtbTool irá processar o DTBs gerados para criar uma tabela:
git clone git://codeaurora.org/quic/kernel/skales
./skales/dtbTool -o dt.img -s 2048 arch/arm64/boot/dts/qcom/
- Para criar a imagem de boot também precisa do ramdisk image:
wget http://builds.96boards.org/releases/dragonboard410c/linaro/debian/17.04.1/initrd.img-4.9.30-linaro-lt-qcom
- E por fim, usamos o mkbootimg para processar todos arquivos necessários e criar a imagem de inicialização:
./skales/mkbootimg --kernel arch/arm64/boot/Image \
--ramdisk initrd.img-4.9.30-linaro-lt-qcom \ --output boot-db410c.img \ --dt dt.img \ --pagesize 2048 \ --base 0x80000000 \ --cmdline "root=/dev/disk/by-partlabel/rootfs rw rootwait console=ttyMSM0,115200n8"
Pronto! Feito isso temos o boot-db410c.img gerado.
Step 7: Testando a Interface SPI
Teste a interface SPI e verifique está funcionando corretamente.
Comments