OpenWRT – Um clássico dos roteadores

Historia

O projeto OpenWRT (Open Wireless RouTer), surgiu porque a Linksys construiu o firmware para seu roteador sem fio WRT54G (um clássico dos roteadores quem nunca viu um?) a partir de um código disponível publicamente licenciado sob a GPL. Sob os termos desta licença, a Linksys foi obrigada a disponibilizar o código-fonte de sua versão modificada sob a mesma licença, o que, por sua vez, permitiu que desenvolvedores independentes criassem versões derivadas. O suporte foi originalmente limitado à série WRT54G, a partir deste marco os desenvolvedores derivaram trabalhos e suporte a novos roteadores e dispositivos.

Os nomes dos releases OpenWrt são nomes de bebidas alcoólicas, geralmente incluindo suas receitas no MOTD, a primeira versão foi White Russian e outras surgiram como Kamikaze, Backfire, Attitude Adjustment, Barrier Breaker, até em meados de 2016 uma reformulação na comunidade e novas regras surgiu o OpenWRT/LEDE (Linux Embedded Development Environment).

Por dentro do OpenWRT

OpenWrt é uma distribuição GNU/Linux altamente utilizado em dispositivos embarcados (normalmente roteadores, gateway e dispositivos de rede). Ao contrário de muitas outras distribuições para esses roteadores, o OpenWrt é construído desde o início para ser um sistema operacional completo e facilmente modificável para o seu roteador. Na prática, isso significa que você pode ter todos os recursos necessários sem exagero de um SO, e sempre com um kernel Linux mais recente.

Os principais componentes são Linux, util-linux, musl e Busybox, além de componentes próprios do OpenWRT com foco em dispositivos de armazenamento e memória limitadas como procd, ubus, opkg, rpcd e libubox.

Em vez de ser um firmware estático, o OpenWrt fornece um sistema de arquivos totalmente gravável com gerenciamento de pacotes opcional, então, além da versão de fábrica gerada pode-se estender recursos e funcionalidades via instalação de pacotes em CLI ou Web, hoje existem cerca de 3500 pacotes de software opcionais.

A versão atual até a escrita deste artigo é 21.02 com destaque para:

  • Kernel Linux 5.4
  • Introdução WPA3
  • Melhorias e Bugfixes

Componentes OpenWRT

busybox

Não específico do OpenWRT mas assim como maioria dos SO Linux Embarcado que utilizam Busybox como uma caixa de ferramentas para os principais comandos visando praticidade, o mesmo está presente no OpenWRT para comandos como cp, mv, ls, top entre diversos outros.

opkg

O gerenciador de pacotes do OpenWRT, assim como temos o dpkg para Debian/Ubuntu temos opkg para OpenWRT que processa os arquivo .ipk.

ubus

É o principal IPC(Inter-Process Communication) utilizado pelo OpenWRT, escrito em C o ubus(micro bus) um projeto/ideia derivado de DBUS para comunicar entre processos e recursos do sistema, essa interface é implementada usando soquetes Unix e usa mensagens TLV, o coração de todo funcionamento é o ubusd e para facilitar desenvolvimento em aplicações existe a biblioteca libubus, e ainda  binario ubus para administração via CLI.

Mais Informações: https://openwrt.org/docs/techref/ubus

procd

É a versão otimizada e enxuta do popular init, podemos dizer ser o PID1 do OpenWRT, além de diversas outras funcionalidades como gerenciar inicialização dos init-scripts(com algumas particularidades OpenWRT), mesclando as funcionalidade de componentes como busybox-init, busybox-klogd, busybox-syslogd, hotplug2(versão mais leve de udev) e busybox-crond.

Mais Informações: https://openwrt.org/docs/techref/procd

rpcd

Toda comunicação entre processos se dá via ubus, mas nem todas as partes do OpenWrt possuem um daemon que pode se registrar usando o ubus, como uci e opkg.

Escrever um daemon para cada um não seria “produtivo” ao OpenWRT. É por isso que o rpcd foi desenvolvido. É um pequeno daemon com suporte para plugins usando API, onde ele carrega os arquivos .so da biblioteca e chama a função init de cada um deles.

Mais Informações: https://openwrt.org/docs/techref/rpcd

libubox

É uma das principais bibliotecas usadas no openwrt porque é um conjunto de utilitários, principalmente wrappers, que geralmente estão presentes em programas e que foram codificados de maneira flexível e reutilizável, pode-se dizer o libubox uma versão enxuta e simples do GLib.

Mais Informações: https://openwrt.org/docs/techref/libubox

uci

O principal utilitário que centraliza toda configuração do OpenWRT via CLI, UCI(https://git.openwrt.org/project/uci.git)(Unified Configuration Interface) é escrito em C, com binário uci e uma biblioteca em C chamada libuci.

O diretório que centraliza as configuração fica em /etc/config/

Mais Informações: https://openwrt.org/docs/techref/uci

luci

Uma versão do UCI para utilizar via acesso web do openwrt, LUCI é a versão UCI escrita em Lua através do libuci-plugin, permite uma administração via web de configuração.

Mais Informações: https://openwrt.org/docs/techref/luci

netifd

 Éum daemon escrito em C para melhor acesso às APIs do kernel com a capacidade de escutar eventos netlink,  o netifd substituiu os antigos scripts de configuração da rede OpenWrt.

Uma maneira direta pode-se dizer que netifd é uma versão customizada/simples/enxuta dos populares NetworkManager e Connman, mas de uso exclusivo do OpenWRT e seus componentes.

Mais informações: https://openwrt.org/docs/techref/netifd

É nítido que é o mesmo Kernel Linux de outros projetos, mas há customizações do projeto OpenWRT para algo mais simples e enxuto, e com um foco extra em prover um grande aparato para um dispositivo de rede. 

Distribuição Linux Desktop e OpenWRT

De uma forma direta e resumida podesse comparar entre uma Distribuição Linux Desktop e OpenWRT que enquanto no Desktop utilizam glib+dbus+udev+systemd+networkmanager no lado do OpenWRT seria libubox+ubus+procd+netifd.

Dispositivos Suportados

Quer saber se seu roteadores, gateway, dispositivo de rede tem suporte a alguma versão do OpenWRT? Então acesse:

https://openwrt.org/toh/start

Há uma lista de mais de 1500 dispositivos suportados!

Caso seu roteador esteja na lista de marca/modelo/revisão suportada, pode estudar e por sua conta em risco atualizar para utilizar OpenWRT, digamos que estaria trocando um Piper Cheyenne II por um Embraer Praetor 600.

Um exemplo ao pesquisar por RaspberryPI, e o link com informações e procedimentos:

https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi

Buildsystem

Há ainda a possibilidade de baixar o código-fonte do OpenWRT e gerar sua própria Distribuição Linux OpenWRT para uma placa alvo já suportada e customizar a instalação de pacotes e sistema de arquivos root.

O buildsystem do OpenWRT é derivado do famoso Buildroot então utilizar e customizar o OpenWRT consiste em Makefiles, patches e uso de Kconfig, ele irá gerar um cross-toolchain e um root filesystem para uma placa previamente configurada. 

Um exemplo da tela de configuração do OpenWRT ao chamar make menuconfig (Figura1):

OpenWRT

Foi realizada uma abordagem sobre OpenWRT, sua historia, alguns componentes próprios que o caracterizam e o seu proprio buildsystem. Próxima abordagem será utilizado o seu buildsystem e geração de uma imagem OpenWRT para uma placa já suportada.

Até mais!

Saiba mais

Conhecendo o OpenWrt

Linux e IoT

Arquiteturas de um projeto Wireless (Wi-Fi)

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Home » Linux Embarcado » OpenWRT – Um clássico dos roteadores
Comentários:
Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Markos
Markos
07/02/2022 11:16

Bom trabalho!
Mais alguma informações em Português:
http://www.c2o.pro.br/proj/openwrt/index.html

Talvez você goste:
Menu