Não / proc em uma distribuição Linux embarcada baseada em Busybox

4

Estou fazendo uma distribuição Linux embarcada e minha placa é um Raspberry Pi. Minha versão do kernel é 3.2.27 sem initramfs e meu sistema de arquivos raiz da seguinte forma:

/lib                          /* contains kernel modules */
/bin /sbin /usr/bin /usr/sbin /* contains busybox utils binaries */
/usr/lib                      /* contains cross-compiler tool chain libs */
linuxrc                       /* generated by busybox, kept in / */
/dev                          /* I have created console and ttyAM0 manually but added mode devices by udev */
/etc/init.d/rcS               /* required by busybox init */

após o kernel inicializado Estou recebendo um console (não sei se é o console do busybox ou não). Eu tenho alguns problemas abaixo

  • Nenhuma informação de processo disponível (nenhum arquivo / pasta criado em /proc ).
  • Quando estou usando ps -e , não mostra nada.

Por que esse comportamento inesperado acontece?

    
por Shantanu Banerjee 31.12.2012 / 08:17

3 respostas

5

Após inicializar e montar o sistema de arquivos raiz, o Linux inicia /sbin/init , que continua com as inicializações do espaço do usuário, incluindo a montagem /proc

O mais provável é que o seu rcS ou qualquer configuração que seja init não faça isso, e você precisa informá-lo.

Se você tiver um prompt de shell, você pode montar /proc manualmente com:

mount -t proc p /proc

Observe que o diretório /proc deve existir antes de você poder montar algo nele. Você deve incluí-lo na sua imagem raiz.

    
por 31.12.2012 / 10:05
3

2) é muito provável por causa de 1) - ps usa /proc para obter informações sobre os processos em execução.

1) é porque a inicialização não é esperada para fazer isso ou porque não faz isso. Verifique o que a distribuição é suposto para fazer na inicialização - como o sistema deve ser criado.

Coisas que você pode experimentar:

  • mount /proc , por exemplo: mount -t proc proc /proc - o segundo argumento é arbitrário (é o que mostra como a origem da montagem). Verifique o que está sendo executado com PID = 1

  • verifique em /proc/cmdline quais parâmetros seu kernel recebe na inicialização. Se ele contiver init=... , talvez seja necessário alterá-lo para, por exemplo, /sbin/init ou remova-o para permitir que o kernel tente resolver o init para ser executado ele mesmo. Você tem que fazer isso na configuração do gerenciador de inicialização (para o R-Pi isso está em algum arquivo de texto no cartão SD IIRC).

  • Verifique se o executável init desejado existe - o Busybox normalmente tem toneladas de links simbólicos apontando para seu binário, de modo que é possível usar command [args] em vez de busybox command [args] . Seu pode estar faltando aqueles.

por 31.12.2012 / 10:11
0

Monte a primeira coisa no seu /etc/inittab

Ou seja, você inittab deve começar com:

::sysinit:/bin/mount -t proc proc /proc

Isso é feito pelo Buildroot 2017.02.

    
por 01.06.2017 / 12:06