Tutorial Buildroot utilizando ferramentas atuais¶
- Alunes: PEDRO CLIQUET DO AMARAL, LUANA WILNER ABRAMOFF e TIAGO VITORINO SEIXAS
- Curso: Engenharia da Computação
- Semestre: 7
- Contato: pedroca8@al.insper.edu.br, luanawa@al.insper.edu.br e tiagovs1@al.insper.edu.br
- Ano: 2024
Considerações¶
Neste tutorial iremos explicar como efetuar o build root utilizando os seguintes recursos:
- Testado em: Ubuntu 20.04, 22.04, 24.04 e 24.04.1.
- Arm GNU 13.3.rel1-x86_64-arm-none-linux-gnueabihf
- Buildroot 2024.08.1.tar.xz
A utilização das ferramentas atuais permite entender e facilitar a contrução dos arquivos de sistemas de forma atualizada.
1. Inicializando¶
- Clonar Repositório: https://github.com/pcliquet/build_root
Para efetuar esse tutorial, é preciso ter o SDCard particionado com a imagem desse arquivo Linux Console(Kernel 4.5)
wget https://download.terasic.com/downloads/cd-rom/de10-standard/Linux/DE10-Standard_Linux_Console.zip
Depois descompactar o .zip e passe para o SDCard particionado.
Instale os packages necessários:
sudo apt update
sudo apt install flex
sudo apt install bison
sudo apt install libncurses5-dev
sudo apt install g++
sudo apt install bzip2
sudo apt install git
sudo apt install libssl-dev
Primeiramente, baixe os recursos citados acima (exceto Linux SoCFPGA, cujo link será usado no menuconfig do buildroot). Crie um diretório e coloque os arquivos extraídos nele (em caso de repositório git, dê git clone neste diretõrio). Em seguida começaremos pelas configurações do buildroot:
- Acesse o diretorio do Buildroot
- rode o comando:
export ARM_GCC=[insert_toolchain_path]/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-linux-gnueabihf export ARCH=arm make menuconfig
O comando anterior irá abrir a configuração do Buildroot. Iremos configurar os recursos existentes para criar o file system e compilar o kernel. Segue abaixo as configurações recomendadas para uso em nossa pĺaca de desenvolvimento.
2. Configuração do root file system¶
-
Acesse no Main Menu -> Target Options:
- Target Architecture: ARM (little endian)
- Target Architecture Variant: cortex-A9
- Enable NEON SIMD extension support (aperte Y)
- Enable VFP extension support (aperte Y)
- Floating point strategy: NEON
-
Acesse no Main Menu -> Toolchain:
- Toolchain type: External toolchain
- Toolchain: Custom toolchain
- Toolchain path: $(ARM_GCC)
-
Toolchain prefix: $(ARCH)-none-linux-gnueabihf
Para essa etapa, acesse o diretório da pasta e abre no terminal, Por fim execute o comando PWD para ter o caminho certo e coloque na configuração do buildroot. - External toolchain gcc version: 13.x - External toolchain kernel headers series 4.20.x - External toolchain C library: glibc - Enable: Toolchain has SSP support - Disable: Toolchain doesn't have RPC support - Enable: Toolchain has C++ support As opções abaixo foram selecionadas, pois o GNU tem supporte para, e caso contrário um erro acontece durante a construção do arquivo de sistema: - Enable: Toolchain has Fortran support - Enable: Toolchain has OpenMP support
-
Acesse no Main Menu -> System Configuration:
- System hostname: Escolha o nome do Host
- System banner: BEM VENIDOS AO SISTEMA EMBARCADO AVANÇADO (de seu nome)
-
Acesse no Main Menu -> Kernel
- Enable: Linux Kernel
- Kernel version: Custom Git repository
- URL of custom repository: https://github.com/altera-opensource/linux-socfpga
- Custom repository version: socfpga-6.6.22-lts
- Defconfig name: socfpga
3. Gerando o Root File System e o zImage¶
Apos efetuar e salvar as configurações do buildroot, o comando abaixo ira gerar a imagem do kernel:
export ARM_GCC=[insert_toolchain_path]/arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-linux-gnueabihf
export ARCH=arm
make all -j 8
- Na área do insert_toolchain_path coloque o caminho do diretório onde deixou a pasta Arm GNU 13.3.rel1-x86_64-arm-none-linux-gnueabihf após extração.
4. Passando o File System para o SDCard¶
O file system zipado gerado está no diretório do seu buildroot/output/images! Apague o file system atual, e extraia os arquivos zipados gerados para seu SDcard.
sudo rm -r /media/[seu_usuario]/[partição_do_sdcard_rfs]/
sync
sudo tar xvf rootfs.tar -C /media/[seu_usuario]/[partição_do_sdcard_rfs]/
sync
5. Passando a imagem do kernel para o SDCard¶
Copie o arquivo zImage para a partição do pendrive de 500 MB, substituindo o zImage antigo.
cp -f zImage /media/[seu_usuario]/[partição_do_sdcard_zimage]/zImage
6. Executando¶
Coloque o SDCard em sua placa de desenvolvimento e execute o comando abaixo:
screen /dev/ttyUSB0 115200,cs8
Lembre-se do usuário configurado e sua senha. Em seguida o seu kernel estará em execução!
Facilitando¶
Para facilitar a compilação do kernel, criamos um script Makefile para executar o buildroot com as configurações citadas antariormente, presente no arquivo .config abaixo. Esse arquivo Make deverá estar no mesmo diretório do buildroot, enquanto o .config deverá estar na raíz do buildroot. Vale mencionar que o .config é a configuração efetuada na etapa 2, sem essa configuração não é possível criar o file system. Geramos esse arquivo para agilizar as etapas.
Já no arquivo Makefile, você precisa alterar o caminho do user da máquina e das partições do SDCard, para que seja reconhecido na hora de executar o comando. Como nos exemplos abaixo:
export USER = [seu_ususario]
export PARTITION_ROOTFS = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
export PARTITION_ZIMAGE = XXXX-XXXX
export HOME_PATH = /[o_caminho]/[para]/[o_diretorio]/[do_build_root]/
[!WARNING] HOME_PATH precisa terminar com "/" e verifique e retire caso haja espaços após os nomes dos partitions, pois pode gerar erros no make.
O arquivo Makefile encapsula as seguintes funcionalidades:
-
Baixa requerimentos
-
Compila o kernel e o root file system
-
Apaga o file system atual do SDCard (JÁ CONECTADO COM O PEN-DRIVE EM SUA MÁQUINA)
-
Transfere o file system e o kernel pro SDCard(JÁ CONECTADO COM O PEN-DRIVE EM SUA MÁQUINA)
Executando o Makefile¶
[!WARNING] Não rode o comando
make
por si só. Pode dar problema.
Execute os seguintes comandos:
-
O make install irá baixar todas as dependências e copiar o .config para dentro do buildroot. Dependências:
-
Necessário que o .config esteja na mesma pasta do Makefile.
make install
- O make build irá gerar o kernel e o root file system.
make build
[!WARNING] Se aparecer o erro "LD_LIBRARY_PATH" execute o comando: unset LD_LIBRARY_PATH e rode o make build novamente.
- O make remove é necessário para remoção do arquivo root file system, devido ao erro que pode ocorrer após execução mesmo que feita correta. É importante checar os arquivos internos do SDCard, como confirmação de que o comando foi efetivo.
make remove
-
O make deploy, envia o Kernel e o root file system para o SDCard. Dependências:
-
Necessário a conexão com o Pen-drive(SDCard).
make deploy