📘 MAC0470/5856 - Desenvolvimento de Software Livre (2026)

Tutorial II: Compilando meu primeiro kernel Linux, ARM, cross-compilation e KW

Capa do post

Introdução

Seguindo novamente o tutorial do FLUSP. Desta vez, o desafio não era só a memória RAM limitada, mas a complexidade adicional de compilar um kernel para uma arquitetura diferente (ARM64) a partir da minha máquina (x86_64). Esse processo, chamado de cross-compilation, é computacionalmente pesado e seria inviável no meu notebook.

Felizmente, a solução continuava sendo usar a keter. Nela, eu tinha não apenas a RAM necessária, mas também o poder de processamento para tornar essa compilação algo menos demorado.

KWORKFLOW (KW)

Trata-se de um Sistema de Automação de Fluxo de Trabalho para Desenvolvedores (DAWS) que tem a missão de reduzir o atrito de configurar e gerenciar um ambiente de desenvolvimento do kernel Linux.

Em vez de memorizar longas sequências de comandos make com variáveis específicas, o kw abstrai essa complexidade. Ele gerencia desde a configuração do kernel até a instalação dos módulos na VM remota. A instalação na keter foi tranquila, seguindo o script de configuração setup.sh --full-installation que o tutorial fornece.

O Passo a Passo da Compilação

1. Obtendo o Código Fonte

O primeiro passo foi clonar o código fonte do kernel. O tutorial nos direcionou para a árvore de desenvolvimento do subsistema Industrial I/O (IIO). Para não sobrecarregar o servidor (e economizar tempo), fizemos um clone raso (--depth 10), limitando o histórico do Git aos 10 commits mais recentes da branch testing, que é onde o desenvolvimento ativo acontece.

2. KW para o Contexto Local

KW tem a capacidade de criar configurações isoladas para cada árvore do kernel. Dentro do diretório do IIO, executei kw init e configurei o kw para "conhecer" minha VM ARM64 (kw remote --add). A partir daí, ele seria capaz de se conectar automaticamente à VM para enviar arquivos e executar comandos.

3. Configuração: .config e Kconfig

Para criar um .config otimizado, partimos de um defconfig para ARM64 e, em seguida, usamos o comando make localmodconfig, pois ele analisa os módulos que estão carregados na VM em execução e desabilita do .config tudo o que não é estritamente necessário para aquele hardware virtual. O resultado é um kernel muito mais enxuto e rápido de compilar. Para gerenciar essa e outras configurações, o kw oferece o comando kernel-config-manager, que funciona como um versionador de .config.

4. Cross-Compilation

A Keter usa arquitetura x86_64 (AMD64), mas o alvo (a VM) é ARM64. Por causa disso precisamos de um compilador especial, o gcc-aarch64-linux-gnu, que gera código binário para ARM64 a partir de um sistema x86_64.

Com o compilador instalado, bastou configurar o kw com os parâmetros corretos (kw config build.arch 'arm64' e kw config build.cross_compile 'aarch64-linux-gnu-') e um simples kw build no diretório da árvore IIO.

5. Instalando os Módulos

Com o kernel e os módulos compilados, o último passo foi enviá-los para a VM. O kw facilita isso com o comando kw deploy --modules.

Depois de ajustar o script activate.sh para apontar para o novo kernel, reiniciei a VM. Ao fazer login, o comando uname -r revelou a versão do kernel que eu mesmo compilei