Mini2440 – Linux from scratch com Buildroot

- por Sergio Prado

Categorias: Buildroot, Linux, Mini2440 Tags: , ,

O Buildroot é um dos mais usados sistemas de build para sistemas embarcados. Com ele podemos gerar todo o toolchain de cross-compilação para determinada arquitetura, compilar o kernel e gerar o rootfs.

Então vamos lá, mãos à obra!

PREPARANDO O BUILDROOT

O primeiro passo é baixar o buildroot na página do projeto aqui e descompactá-lo em um diretório qualquer na sua máquina.

Você vai precisar também do kernel para a mini2440. O kernel disponível na página de downloads do projeto não irá funcionar, porque o JFFS2 não esta habilitado por padrão, e também porque são necessárias algumas alterações no driver da MTD para ele funcionar com o U-boot.

Entre no diretório principal do buildroot, crie uma pasta chamada “dl” e copie o kernel para lá.

CONFIGURANDO O BUILDROOT

Agora vamos configurar o buildroot para gerar corretamente o toolchain e as imagens do kernel e do rootfs para a mini2440. No diretório principal do buildroot, execute o comando “make menuconfig”, e configure de acordo com as opções abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Target Architecture
    [*] arm
 
Target Architecture Variant
    [*] arm920t
 
Target ABI:
    [*] EABI
 
Toolchain
    Kernel Headers
        (X) Local Linux snapshot
 
Target Filesystem options
    [*] jffs2 root filesystem
    Flash type
        (X) NAND flash with 2kB page and 128kB erase
Kernel
    [*] Linux Kernel
        Kernel version
            (X) Same as toolchain kernel headers
    Defconfig name
        mini2440

Você pode ainda selecionar os pacotes que quiser na opção “Package Selection for the target”, e o resto manter como padrão. Após configurar, salvar e sair.

COMPILANDO O BUILDROOT

Para compilar basta executar o comando “make”. Prepare-se porque o processo é bem demorado. O buildroot irá baixar e compilar todos os pacotes necessários para gerar o toolchain, depois compilar o kernel e gerar o rootfs.

Na minha máquina tive um problema ao compilar o toolchain, onde a função getline() do arquivo “output/toolchain/linux-2.6/scripts/unifdef.c” estava conflitando com outra função getline() da glibc instalada na minha máquina. Alterando getline() para getLine() no arquivo “output/toolchain/linux-2.6/scripts/unifdef.c” resolveu o problema.

Toda a compilação é feita dentro do diretório “output”, e os seguintes diretórios são criados lá dentro:

  • build: onde o kernel e os pacotes do rootfs são compilados;
  • host: ferramentas para cross-compilar os pacotes;
  • images: imagens geradas do kernel e do rootfs;
  • staging: toolchain gerado;
  • stamps: diretório de controle do buildroot;
  • target: estrutura de diretórios e arquivos do rootfs final;
  • toolchain: onde o toolchain foi compilado.

CORRIGINDO A CONFIGURAÇÃO DA CONSOLE

Após a compilação, as imagens já estarão prontas para serem carregadas na mini2440, mas antes precisamos corrigir a configuração da console. Edite o arquivo “output/target/etc/inittab”, comente a linha com “ttyS0” e insira outra linha com “ttySAC0”, conforme abaixo:

#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100 # GENERIC_SERIAL
ttySAC0::respawn:/sbin/getty -L ttySAC0 115200 vt100 # GENERIC_SERIAL

Compile novamente com o comando “make”. As imagens finais do kernel (uImage) e do rootfs (rootfs.jffs2) estarão em “output/images”.

GRAVANDO A IMAGEM

O processo de gravação da imagem é o mesmo que usamos para o Emdebian neste post aqui. Preste atenção apenas nos tamanhos dos arquivos no momento da execução dos comandos de gravação na flash.

Agora temos um Linux enxuto, com boot bem rápido (5 segundos para aparecer a console), e que podemos usar como base para estudos ou mesmo projetos comerciais.


Um abraço!

Sergio Prado

Faça um Comentário

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.