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 udev
subsistema cria e monta um tmpfs
sistema de arquivos /dev
no momento da inicialização. O conteúdo é preenchido pelo kernel à medida que os dispositivos são detectados. Como tmpfs
reside na memória virtual, não é persistente, portanto suas alterações não sobrevivem às reinicializações. Mesmo se você /dev
já 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 hda
e hdaX
foram substituídas por entradas sda
e sdaX
. Como alternativa, verifique /proc/devices
e /proc/partitions
obtenha o nome udev
atribuí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 /dev
poderia ser pior do que seguir as convenções. Se udev
acha que é /dev/sda
, vá em frente. Você poderia escapar de possíveis estranhezas e mal-entendidos no futuro.