Monte o TMPFS em vez de ro / dev

3

Estou trabalhando em um sistema embarcado baseado no ARM com um Debian Linux baseado no kernel 2.6.31. No sistema final, o sistema de arquivos raiz é armazenado como squashfs no flash. Agora, a pasta / dev é criada pelo udev, mas como não há necessidade de hot plugging e o tempo de inicialização é crítico, eu queria excluir o udev e "hard code" da pasta / dev (leia aqui , p�gina 5). porque eu ainda preciso alterar os parâmetros dos dispositivos (com ioctl / sysfs) isso não funciona para mim neste caso. Então eu pensei em montar um tmpfs em / dev e mudar os parâmetros lá. Isso é possível? e como fazer melhor? minha abordagem seria:

  • delete / dev do RFS
  • crie tar com dispositivos básicos
  • mount tmpfs / dev
  • descompactar arquivo tar em / dev
  • alterar parâmetros

Isso funcionaria? Você vê algum problema?

Eu descobri, que você pode montar em cima do ponto de montagem já montado, é de alguma forma possível apenas para tirar dados com a montagem do novo sistema de arquivos? se assim for, isso seria muito conveniente!

Obrigado

Atualização: Eu apenas tentei isso, mas estou preso em um certo ponto. Eu coloquei todos os meus dispositivos em devices.tar, coloquei em / usr do meu squashfs e adicionei as seguintes linhas ao mountkernfs.sh, que é executado logo após o INIT.

#mount /dev on tmpfs
echo -n "Mounting /dev on tmpfs..."
mount -o size=5M,mode=0755 -t tmpfs tmpfs /dev
mknod -m 600 /dev/console c 5 1
mknod -m 600 /dev/null c 1 3
echo "done."
echo -n "Populating /dev..."
tar -xf /usr/devices.tar -C /dev
echo "done."

Isso funciona bem na versão sobre o NFS, se eu colocar o printf no código, eu posso vê-lo em execução, se eu comentar a parte de extração, está reclamando sobre falta de dispositivos.

  • Inicializando OK

    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    IP-Config: Unable to set interface netmask (-22).
    Looking up port of RPC 100003/2 on 192.168.1.234
    Looking up port of RPC 100005/1 on 192.168.1.234
    VFS: Mounted root (nfs filesystem) on device 0:14.
    Freeing init memory: 136K
    INIT: version 2.86 booting
    Mounting /dev on tmpfs...done.
    Populating /dev...done.
    Initializing /var...done.
    Setting the system clock.
    System Clock set to: Thu Sep 13 11:26:23 UTC 2012.
    INIT: Entering runlevel: 2
    UBI: attaching mtd8 to ubi0
    
  • Comentando a extração do tar

    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    IP-Config: Unable to set interface netmask (-22).
    Looking up port of RPC 100003/2 on 192.168.1.234
    Looking up port of RPC 100005/1 on 192.168.1.234
    VFS: Mounted root (nfs filesystem) on device 0:14.
    Freeing init memory: 136K
    INIT: version 2.86 booting
    Mounting /dev on tmpfs...done.
    Populating /dev...done.
    Initializing /var...done.
    Setting the system clock.
    Cannot access the Hardware Clock via any known method.
    Use the --debug option to see the details of our search for an access method.
    Unable to set System Clock to: Thu Sep 13 12:24:00 UTC 2012 ... (warning).
    INIT: Entering runlevel: 2
    libubi: error!: cannot open "/dev/ubi_ctrl"
    

Até aí tudo bem. Mas se eu empacotar toda a história em squashfs e boot a partir daí, está agindo de forma estranha. Está me dizendo durante a inicialização que é incapaz de abrir um console inicial e seus erros de montagem na montagem dos dispositivos UBIFS, mas finalmente fornece um login de qualquer maneira. Sobre isso meus ecos não são executados. Se eu fizer o login, / dev é montado como TMPFS conforme desejado e todos os dispositivos residem dentro dele. Quando eu refaz o comando "mount" para montar as partições UBIFS, ele é executado sem problema e utilizável.

  • De squashfs

    VFS: Mounted root (squashfs filesystem) readonly on device 31:15.
    Freeing init memory: 136K
    Warning: unable to open an initial console.
    mmc0: new high speed SDHC card at address 0007
    mmcblk0: mmc0:0007 SD04G 3.67 GiB 
    mmcblk0: p1
    UBIFS error (pid 484): ubifs_get_sb: cannot open "ubi1_0", error -19
    

Além disso, uma parte do restante dos scripts de inicialização ainda éexecutada, mas nem todos eles. Alguém tem idéia do porquê? Outra questão, é 5MB suficiente / muito para / dev?

    
por schiggn 12.09.2012 / 14:04

1 resposta

0

Esquecer de criar uma pasta / proc e um dispositivo / dev / console são duas armadilhas comuns ao criar um boot-ramfs manualmente, como você identificou.

Quanto ao tamanho de / dev, acho que meio megabyte irá percorrer um longo caminho. No seu caso, como o número de dispositivos será mais ou menos constante assim que o sistema inicializar, é seguro observar quanto espaço / dev está usando e tornar o sistema de arquivos desse tamanho mais cinco a dez por cento para sobrecarga de fs (arquivo e nós da pasta).

    
por 24.11.2012 / 23:46