Saturday, June 18, 2011

Busybox

O Busybox é a ferramenta usada em sistemas embarcados rodando linux que incorpora o código de vários programas (como o ls, mount, csh, etc) em apenas 1 executável. Em um projeto que estou trabalhando precisei re-compilar o busybox para ativar o código responsável pelo dhcpd (para pegar IP dinâmico).

Acontece que tive um problema quando estive compilando usando o cross-compiler GCC para ARM.


CC=/usr/local/arm/arm-linux/bin/gcc
 /usr/local/arm/arm-linux/bin/gcc -Wall -DDEBUG -c -o src/interface.o src/interface.c
 In file included from /usr/local/arm/arm-linux/lib/gcc-lib/../../arm-linux/sys-include/net/route.h:28,
 from src/defs.h:28,
 from src/interface.c:23:
 /usr/local/arm/arm-linux/lib/gcc-lib/../../arm-linux/sys-include/net/*dst.h*:30: *parse* *error* *before* “*atomic_t*”


Fiquei boas horas para resolver isso.. no fim o problema era na ordem dos includes…

O cross-compilador do GCC fica configurado para procurar primeiro em <blah>/sys-include *antes* de olhar em <blah>/include.

No Rules.mak precisei editar:


CFLAGS=$(INCS) -I/usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3/../../../../arm-linux/include -I$(srcdir) -D_GNU_SOURCE

DICA: Para descobrir o include file search path do GCC, quando for compilar adicione o flag -v (ex: adicione -v para o CFLAGS)

No comments:

Post a Comment