OpenWRT – Customizando e Embarcando na Raspberry Pi

No artigo anterior OpenWRT – um clássico dos roteadores foi realizada uma abordagem ampla sobre OpenWRT, e desta vez será realizado download do projeto OpenWRT e o ambiente de buildsystem para configurar e gerar uma Distribuição Linux OpenWRT para algum dos modelos de RaspberryPI com algumas customizações.

Nesse artigo será realizada menção de HOST se referindo ao computador/notebook utilizado para os trabalhos e TARGET como sendo o hardware alvo, como exemplo, RaspberryPI 3B.

Preparando o Host

Algumas dependências são necessárias para o Host Linux

Acesse Install buildsystem Linux Distributions para selecionar a sua Distribuição Linux e instalar as dependências.

Exemplo Debian/Ubuntu:

Mais informações: https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem#prerequisites

O ambiente utilizado neste artigo foi com Container Docker, o Dockerfile está no repositorio build-openwrt-rpi[https://github.com/cleitonbueno/build-openwrt-rpi] e para gerar a imagem acesse o diretório onde salvou o Dockerfile em seu computador e execute o comando:

Verificando a imagem gerada: 

Antes de iniciar o Container, crie o diretório mkdir ~/openwrt sendo o diretorio de persistência dos trabalhos que será realizado na construção do OpenWRT, e execute o comando:

Nosso Container em execução:

Fica a critério do leitor utilizar o HOST ou Container, o resultado será o mesmo.

Baixando Repositório OpenWRT 

Em um computador Linux com pelo menos 25G de espaço disponível, acesse o diretório $HOME ou de sua preferência no caso do HOST ou dentro do Container e clone o repositório git do openwrt.

Próximo passo, acessar o diretório openwrt e vamos fazer checkout para versão v21.02.1:

Neste ponto, temos o openwrt, mas precisamos atualizar os feeds que possuem informações e procedimentos para baixar, configurar, compilar os mais de 3000 softwares incluindo o LUCI:

Configurando a placa alvo e pacotes para o OpenWRT

Agora, utilizando o utilitário make será chamado o menuconfig para abrir a tela de configuração onde será configurado a placa alvo, aplicações e recursos:

Uma observação importante nesta etapa, ao selecionar uma opção com <*> o pacote será baixar, configurado, compilado e instalado na imagem do TARGET, no entanto, ao marcar com <M> o pacote será baixado, configurado, compilado e copiado no diretórios packages mas não será instalado no rootfs da imagem gerada, mas poderá ser transferido e instalado via opkg.

Abaixo, um resumo de navegação, as opções a serem selecionadas e a seleção para cada modelo de Raspberry PI: 

RaspberryPI Zero/RaspberryPI ZeroW

RaspberryPI 3B/3B+/3CM, RaspberryPI 4B/400/4CM e RaspberryPI 2B

RaspberryPI 3B/3B+/3CM e RaspberryPI 2B (64bit)

RaspberryPI 4B/400/4CM (64bit)

Vamos adicionar algumas pacotes adicionais:

Selecionar Save, confirmar o arquivo .config e selecionar Exit, um exemplo da tela do menuconfig.

OpenWRT na Raspberry Pi

Processo de compilação e geração de imagem

Antes de iniciar o processo de construção, pode-se configurar o nível de mensagens que deseja acompanhar ao executar o make, é utilizado o parâmetro V=x, hoje depreciado mas em versões anteriores era utilizado V=1 até V=99 configurando o grau de detalhamento durante o processo, as opções atuais são:

Iniciando o processo de construção:

Com o parâmetro -j=1 estamos utilizando apenas um núcleo para processamento, se quiser agilizar pode configurar -j$(nproc) para utilizar todos os núcleos disponíveis do processador.

Será feito download, configuração, compilação, empacotamento de todos pacotes e dependências de software e por fim, gerar rootfs e montar a imagem no formato EXT4 e SquashFS.

Estrutura de Diretórios

Alguns diretórios e suas respectivas funções, os principais são:

  • bin/ – Diretório com a imagem final gerada e os pacotes .ipk
  • build_dir/ – Diretório de construção referente aos recursos de tools/ e toolchain/
  • dl/  – Código-fonte de todas dependências
  • tools/ – Descrição de compilação das ferramentas e dependências para a compilação-cruzada no HOST
  • toolchain/  – Descrição do toolchain referente a libc, compilador e utilitários para compilação-cruzada e como gerar
  • staging_dir/ – Resultado do toolchain e tools já compilados e “instalado”

No caso do nosso TARGET(RaspberryPI) os pacotes serão salvos em:

bin/packages/arm_cortex-a7_neon-vfpv4

A imagem será gerada em:

bin/targets/bcm27xx/bcm2709/

Preparando MicroSD para boot

Conecte um MicroSD no HOST para gravar a imagem gerada, para saber o nome do dispositivo MicroSD utilize o comando dmesg ou execute no seu computador:

Nesta prática o dispositivo do HOST é /dev/mmcblk0.

Lembre-se de desmontar a unidade ou via comando umount, antes de realizar gravação, exemplo:

Acesse o diretorio ~/openwrt/bin/targets/bcm27xx/bcm2709/ no seu computador e execute o comando para descomprimir a imagem gerada e gravar no microSD via dd.

Primeiro boot

O acesso ao hardware Raspberry PI pode ser feito via Serial Console ou SSH, como exemplo:

OpenWRT na Raspberry Pi
OpenWRT na Raspberry Pi

Conecte um cabo de rede do TARGET no HOST e um IP será atribuído, acessando WebPage LUCI via IP 192.168.1.1:

OpenWRT na Raspberry Pi
OpenWRT na Raspberry Pi

Obtendo algumas informações do sistema OpenWRT em execução, como uso de memória RAM e Armazenamento:

O sistema em execução utiliza aproximadamente 19M de Memória RAM e 40M de RootFS.

Utilizando os comandos uci e ubus via CLI:

Foi realizada uma breve customização do OpenWRT após clonar o seu repositório e selecionar um modelo da RaspberryPI já suportado, pode verificar os demais TARGETS prontos para uso, realizado o processo de gravação e acesso ao OpenWRT em execução.

Boa diversão!

Documentação

A documentação do OpenWRT é excelente, aborda todos os aspectos do buildsystem, dependências, arquitetura do OpenWRT, componentes, customizações, segue a base para consulta:

https://openwrt.org/docs/start

Referências

https://openwrt.org/docs/guide-developer/toolchain/use-buildsystem

https://openwrt.org/docs/guide-developer/toolchain/buildsystem_essentials#directory_structure

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Sem licença Creative Commons
Home » Linux Embarcado » OpenWRT – Customizando e Embarcando na Raspberry Pi
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Marcelo Campos
Marcelo Campos
15/02/2022 12:09

Excelente artigo Cleiton, tá de parabéns e vou testá-lo em breve, mas tenho uma dúvida: Imagino que seja mais específico ao OpenWRT do que a implementação ao hardware da Raspi mas, é possível fazer mesh com Raspi + OpenWRT ?

Talvez você goste:
Nenhum resultado encontrado.
Menu