O kernel exclui entradas em/dev em um initramfs?

O kernel exclui entradas em/dev em um initramfs?

Eu tenho um sistema Linux incorporado totalmente personalizado e mínimo (Vanilla, 3.3.8, i486, Vortex86dx) que inicializa a partir de uma imagem initramfs. Nenhum script de distribuição padrão é usado, apenas um único arquivo rcS que faz a inicialização.

Eu tenho um disco Flash IDE com duas partições em/dev/hda1 e/dev/hda2.

Como esta é uma distribuição embarcada mínima para um sistema fixo, ela possui um diretório estático /dev que contém /dev/hda1 e /dev/hda2, e não há UDEV.

No ponto em que o init chama o rcS, a entrada /dev/hda1 não está mais presente. Nenhum outro script, aplicativo de usuário ou daemon foi executado neste momento. /dev/hda1pareceter sido excluído pelo kernel (?)

Não tenho o mesmo problema se inicializar meu destino por meio de um sistema de arquivamento raiz NFS durante meu processo de desenvolvimento.

Eu uso o Buildroot para criar o diretório /dev por meio do arquivo device_table_dev.txt. por exemplo

# IDE Devices
/dev/hda    b   640 0   0   3   0   0   0   -
/dev/hda    b   640 0   0   3   1   1   1   4

Eu inspecionei o rootfs.tar.gz da saída/imagens do Buildroot. O diretório /dev contém /dev/hda1:

brw-r-----  1 root root  3,   0 Jul  2 13:44 hda
brw-r-----  1 root root  3,   1 Jul  2 13:44 hda1
brw-r-----  1 root root  3,   2 Jul  2 13:44 hda2
brw-r-----  1 root root  3,   3 Jul  2 13:44 hda3
brw-r-----  1 root root  3,   4 Jul  2 13:44 hda4

Minha listagem de diretórios pós-inicialização (feita no rcS, na parte superior do script) no destino é semelhante a esta:

brw-r-----   1 root   root    3,   0 Jul  2 12:44 hda
brw-r-----   1 root   root    3,   2 Jul  2 12:44 hda2
brw-r-----   1 root   root    3,   3 Jul  2 12:44 hda3
brw-r-----   1 root   root    3,   4 Jul  2 12:44 hda4

/dev/hda1 está faltando. /dev/hda2 é uma partição no mesmo disco, mas ainda está lá. Estranho.

Se eu executar o utilitário Busybox "mdev -s", ele restaura/dev/hda1 no destino e funciona normalmente. por exemplo, eu posso montá-lo

Alguém já viu esse comportamento antes?

O kernel exclui entradas de/dev?

Responder1

O udevsubsistema cria e monta um tmpfssistema de arquivos /devno momento da inicialização. O conteúdo é preenchido pelo kernel à medida que os dispositivos são detectados. Como tmpfsreside na memória virtual, não é persistente, portanto suas alterações não sobrevivem às reinicializações. Mesmo se você /devjá tiver um, a montagem do novo sistema de arquivos oculta o diretório e parece que todos os especiais do seu dispositivo foram excluídos. Não, mas o resultado final é o mesmo: as promoções não estão onde você espera.

Suspeito que você descobrirá que suas entradas hdae hdaXforam substituídas por entradas sdae sdaX. Como alternativa, verifique /proc/devicese /proc/partitionsobtenha o nome udevatribuído à unidade.

Às vezes, uma solução rápida e suja como essa fdisk -l /dev/[sh]d[a-z]pode ajudar (funciona melhor se você tiver menos de 26 discos de cada tipo).

A propósito, o esquema de nomenclatura usado por udevé padronizado e sua estática /devpoderia ser pior do que seguir as convenções. Se udevacha que é /dev/sda, vá em frente. Você poderia escapar de possíveis estranhezas e mal-entendidos no futuro.

informação relacionada