Compilar firmware OpenWRT
Aqui é descrito como compilar de forma simples o firmware OpenWRT para versão backfire e trunk. (ver ainda Attitude Adjustment)
Existem 2 possibilidades: a versão estável Backfire ou a versão experimental Attitude Adjustment. Em relação ao protocolo batman-adv, verificou-se que a versão estável ainda não fora corrigida quanto a algumas funcionalidades existentes nesse protocolo, apresentando alguns erros impossíveis de resolver. No entanto a versão experimental revelou que as funcionalidades do protocolo batman-adv funcionam corretamente. Assim, e para compilação da imagem, procedeu-se da seguinte forma (instalação no sistema operativo linux – Ubuntu 11.04):
- 1. É preciso instalar os pacotes: gcc-multilib bison autoconf screen gcc g++ binutils patch bzip2 flex make gettext unzip libc6 git-core
(conforme o sistema operativo, o comando a usar para a instalação está descrito adiante)
- 2. Executa-se o seguinte comando:
svn co svn://svn.openwrt.org/openwrt/trunk/
Este comando vai criar um diretório chamado de "trunk", para onde vai ser copiado todo o download proveniente do repositório OpenWRT, que é necessário para compilar e criar a imagem final que irá correr no router.
Caso se pretenda a versão estável, deverá executar-se:
svn co svn://svn.openwrt.org/openwrt/branches/backfire
- 3. Mudar para a diretoria criada: cd trunk
Caso seja a versão estável, mudar para:
cd backfire
- 4. É necessário editar o ficheiro, onde é determinado que pacotes se pretendem incluir na compilação. É preciso permissões de root para poder editá-lo:
sudo gedit feeds.conf.default
src-svn packages svn://svn.openwrt.org/openwrt/packages #src-svn xwrt http://x-wrt.googlecode.com/svn/trunk/package src-svn luci http://svn.luci.subsignal.org/luci/trunk/contrib/package #src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone #src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl #src-svn xorg svn://svn.openwrt.org/openwrt/feeds/xorg #src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop #src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce #src-svn lxde svn://svn.openwrt.org/openwrt/feeds/lxde #src-link custom /usr/src/openwrt/custom-feed
Neste caso, só foram descomentados os pacotes base do OpenWRT na 1ª linha e o pacote para a interface gráfica na 3ª linha, todos as linhas que começarem por #, serão ignoradas.
- 5. Atualizar todos os pacotes copiados para a diretoria (executar):
scripts/feeds update
ou
./scripts/feeds update
(conforme o sistema operativo)
- 6. Instalar os pacotes que possam estar em falta e neste caso poderá ser pertinente fazê-lo para o pacote batman-adv, que ficará disponível para a compilação:
scripts/feeds install -a
ou
./scripts/feeds install -a
(conforme o sistema operativo)
- 7. Instalar especificamente o módulo de batman-adv:
scripts/feeds install kmod-batman-adv
ou
./scripts/feeds install kmod-batman-adv
(conforme o sistema operativo)
- 8. Iniciar a aplicação que permite selecionar os pacotes a incluir na compilação:
make menuconfig
- 9. Depois de iniciada a aplicação, primeiro é preciso selecionar o tipo de chip onde vai correr a imagem:
Target System ---> Atheros AR7xxx/AR9xxx
Atmel AT91 Atmel
AVR32 Broadcom
BCM2708/BCM2835
Broadcom BCM2708/BCM2835
Broadcom BCM947xx/953xx … … …
etc…
Como foram usados routers linksys wrt54GS, foi escolhida a arquitetura Broadcom BCM947xx/953xx. De salientar que para o protocolo batman-adv, a ditribuição linux escolhida tem de ser superior ou igual a 2.6.
- 10. Para seleção de Target Profile:
Target Profile ---> Broadcom BCM43xx WiFi (b43, default)
Broadcom BCM43xx WiFi (wl, proprietary)
Atheros WiFi (ath5k)
No WiFi BCM4705/BCM4785,
Broadcom BCM43xx WiFi (b43)
BCM4705/BCM4785, no WiFi … … …
etc…
Neste caso foi selecionado Broadcom BCM43xx WiFi (b43, default), que se encontra na 1ª linha. Cada router terá de ser estudado e verificado quanto aos seus componentes e arquiteturas, de maneira a escolher as opções que se lhe adequam.
- 11. Devemos selecionar o tipo de imagem que queremos que seja criada. routerPara isso selecionamos
Target Images: ramdisk --->
--- Root filesystem archives
cpio.gz tar.gz
--- Root filesystem images
ext4
jffs2
squashfs
--- Image Options
Para o tipo de imagem a compilar, escolheu-se squashfs, que se trata de uma imagem comprimida para instalação no router.
- 12. Este passo é opcional. Trata-se da instalação da componente gráfica. Este interface não é de todo necessário, uma vez que não possui a possibilidade de administração da rede mesh com batman-adv. A inclusão desta opção permite ter acesso a imensos dados do router, no entanto vai fazer com que a imagem final fique maior, o que para routers com pouca memória flash poderá condicionar o seu desempenho ou inviabilizar mesmo a instalação.
LuCI --->
Collections ---> Luci-ssl Standard OpenWrt set with HTTPS support
Modules --->
--- luci-mod-admin-core....... Web UI Core module
--- luci-mod-admin-full LuCI Administration - full-featured for full control
Foi selecionado a interface gráfica LUCI, com as coleções e módulos acima especificados.
- 13. Para selecionarmos o módulo de batman-adv, de maneira a fazer parte da imagem final a instalar no router, deve-se proceder da seguinte forma:
Kernel modules --->
Network Support --->
kmod-batman-adv
enable bridge loop avoidance
enable batctl
Depois de selecionado, carrega-se na tecla "escape" + "escape" (2 vezes), até que o sistema pergunte se se deseja gravar as configurações para a compilação. Seleciona-se “yes”.
- 14. Compilar a imagem:
make j -5
- 15. Esperar uma boa meia hora, dependendo da velocidade de processamento do computador e esperar que chegue ao fim.
- 16. É criada uma pasta de nome "bin" dentro da diretoria trunk (ou OpenWRT, se for a versão estável), onde estarão as imagens e pacotes todos compilados. Escolhe-se a imagem para o “nosso” router e procede-se à instalação, esperando que funcione.
É possível instalar outros pacotes. Por exemplo, se se quiser incluir os pacotes X-WRT, ou snmp, ou EGGDROP, etc., é uma questão de acrescentá-los. Existem centenas de variações e programas que podem ser desde logo incluídos.
Autoria
Links externos
- Artigo openwrt semelhante em inglês
- Pré-requesitos para criar firmware openwrt
- Como e onde obter o código fonte