Instalação mínima do Busybox / Linux - não vai rodar C

3

Estou tentando criar uma distribuição Busybox / Linux customizada mínima, uma tarefa que está acima de minha cabeça, mas imaginei que iria tentar. Meu problema é que sempre que eu tento executar um programa C que não é Busybox ou um utilitário Busybox, ash reclama e me diz que o arquivo não foi encontrado. Montei a partição do meu sistema Arch, instalei o GNU binutils e o uClibc; sem dados. Eu também escrevi o programa C mais simples que eu poderia imaginar sem dependências em nenhuma biblioteca:

int main(int argc, char *argv[])
{
    return 0;
}

Eu compilei, rodei no Arch, ainda me dava "arquivo não encontrado" no meu sistema Busybox, embora seja mostrado quando eu executo o ls. Para resolver o óbvio, sim, eu o executei no mesmo diretório que o programa e digitei ./ antes do nome do arquivo.

    
por Tim 13.02.2016 / 04:18

2 respostas

3

Meu palpite é que você não tem o vinculador dinâmico correto no sistema Busybox.

No seu sistema Arch, faça o seguinte:     ldd ./simplestprogram

Eu imagino que ldd fornecerá uma saída semelhante a esta:

linux-vdso.so.1 =>  (0x00007fff9b34f000)
libc.so.6 => /lib64/libc.so.6 (0x0000003b19e00000
/lib64/ld-linux-x86-64.so.2 (0x0000003b19a00000)

Essa última linha, /lib64/ld-linux-x86-64.so.2 é o vinculador dinâmico. Aposto que não está presente no seu sistema Busybox.

Eu compilei um programa "hello, world" no meu laptop Arch, usei vim no modo binário para alterar /lib64/ld-linux-x86-64.so.2 para /lib65/ld-linux-x86-64.so.2 , salvei e tentei executá-lo. Eu recebi a mesma mensagem "arquivo não encontrado" que você recebeu.

Você pode nem ter o arquivo libc.so no seu sistema Busybox. É possível que apenas copiar os arquivos libc.so e vinculadores dinâmicos dos sistemas Arch para o Busybox (preservando diretórios!) Possa funcionar, mas talvez não. Eu não tenho certeza.

Uma coisa para tentar: instale musl na sua máquina Arch. Compile seu programa simples com musl-gcc -static -o simple simple.c , mova esse executável, que não tem nada vinculado dinamicamente, e experimente-o no sistema Busybox.

    
por 13.02.2016 / 06:11
2

Você precisa criar ou instalar uma cadeia de ferramentas uClibc e compilar / vincular seus programas a isso. Você não os compila com o padrão gcc / make /....

Eu realmente preciso construir uma cadeia de ferramentas uClibc?

    
por 13.02.2016 / 06:32