[LAB] Kernel Cross-Compilling
Nesta atividade, os fontes do kernel Linux serĆ£o baixados e a partir deles, serĆ” realizada a configuraĆ§Ć£o para compilar uma imagem para a RPi3, a compilaĆ§Ć£o da imagem, a gravaĆ§Ć£o na RPi3 e a inicializaĆ§Ć£o do kernel atravĆ©s do U-Boot.
Baixando os fontes do kernel Linux
A Raspberry Pi Foundation fornece os fontes do kernel para as placas RPi em seu repositĆ³rio oficial e estes foram os fontes baixados para esta atividade. Assim como outras ferramentas, eles se encontram no diretĆ³rio ā¼/dsle20/dl/kernel/linux-rpi-4.14.y.zip
. Crie uma pasta chamada kernel dentro de dsle2020
e em seguida, extraia os fonte do kernel nela e entre no diretĆ³rio extraĆdo:
Configurando o kernel
Conforme apresentado em aula, o kernel possui suporte para muitas arquiteturas diferentes. Ć possĆvel visualizĆ”-las atravĆ©s do diretĆ³rio arch:
AlƩm disso, o kernel tambƩm possui suporte especifico para a mesma arquitetura, porƩm de fabricantes diferentes. Por exemplo, mach-bcm refere-se SoCs da Broadcom, mach-exynos a SoCs da Samsung, mach-sti da ST, e assim por diante:
Como pode-se perceber, o suporte do kernel Linux Ć s mais variadas plataformas Ć© bem grande. AlĆ©m dos exemplos acima, existem ainda muitos arquivos de configuraƧƵes prĆ©vias, relacionados a diferentes placas para cada arquitetura. Observe:
Perceba que a maioria das ferramentas de desenvolvimento para Sistemas Linux Embarcado seguem um padrĆ£o de configuraĆ§Ć£o no intuito de facilitar o processo para o desenvolvedor.
O processo para carregar um arquivo de configuraĆ§Ć£o prĆ©via do kernel, Ć© o mesmo como no crosstool-ng e U-Boot. No entanto, por padrĆ£o o kernel considera a mesma arquitetura da maquina de desenvolvimento e, portanto, Ć© necessĆ”rio configurar a arquitetura para ARM. O arquivo de configuraĆ§Ć£o da RPi3 Ć© o bcm2709_defconfig
:
A partir deste momento, as configuraƧƵes bƔsicas para compilar um kernel funcional para a RPi 3 foram carregadas e salvas em um arquivo chamado .config
no diretĆ³rio raiz dos fontes do kernel. Antes de compilar, acesse o menuconfig
e verifique a quantidade de funcionalidades, drivers, protocolos de comunicaĆ§Ć£o que o kernel oferece suporte:
Antes de compilar o kernel Ć© necessĆ”rio definir tambĆ©m o toolchain, pois por padrĆ£o o processo de build do kernel irĆ” utilizar as ferramentas nativas. Assim, defina a variĆ”vel CROSS_COMPILE
e compile o kernel:
Ao final do processo de compilaĆ§Ć£o, as imagens geradas se encontrarĆ£o no diretĆ³rio boot da arquitetura utilizada:
Compilando o Device Tree
A RPi 3 faz uso de Device Tree para disponibilizar as informaƧƵes de hardware ao kernel. Os fontes de Device Tree fornecidos encontram-se na pasta arch//boot/dts
:
A lista Ć© bem longa. Os fontes para a RPi 3 e RPi 3 Plus sĆ£o bcm2710-rpi-3-b.dts
e bcm2710-rpi-3-b- plus.dts
respectivamente. Compile de acordo com sua placa:
ou
ApĆ³s a compilaĆ§Ć£o, o objeto final especificado em um dos comandos acima, estarĆ” disponĆvel na pasta arch/arm/boot/dts
.
Gravando as novas imagens e bootando a RPi3
Agora Ć© com vocĆŖ. Com as explicaƧƵes dadas em aula em conjunto com as atividades anteriores, vocĆŖ deverĆ” ser capaz de realizar esta etapa. Copie os arquivos recĆ©m-compilados para a RPi via scp
:
FaƧa um backup do script do U-Boot (
boot.src
) com o comandocp
;FaƧa tambƩm um backup do Device Tree fornecido pelo Raspian (
bcm2710-rpi-3-b.dtb
);Todos esses arquivos encontram-se na partiĆ§Ć£o
/boot/
do seu cartĆ£o SD;ApĆ³s realizar os backups, gere um novo
boot.scr
com a ferramentamkimage
do U-Boot alterando a imagem do kernel parazImage
;Copie os seguintes arquivos na sua partiĆ§Ć£o
/boot
:zImage
,bcm2710-rpi-3-b.dtb
eboot.scr
.Para testar se o prodimento funcionou podemos obter a versĆ£o do kernel atravĆ©s do comando
uname -r
ou mesmodmesg | grep Linux
. Invoque os comandos antes e depois de da prƔtica.
Last updated