
Criei um ambiente mínimo em meu dispositivo ARM incorporado que consiste apenas no kernel Linux e com Busybox e um sistema de arquivos mínimo em uma imagem initrd. Eu tenho um inittab
que funciona /etc/init.d/rcS
na inicialização.
Eu tenho a seguinte linha em rcS
:
/bin/mount -t proc none /proc
No entanto, quando esta linha é executada, recebo
/etc/init.d/rcS: line 2: /bin/mount -t proc none /proc: not found
A última linha rcS
parece ser executada - essa linha é simplesmente /bin/sh
para obter um shell, e o shell abre automaticamente.
Quando executo exatamente o mesmo comando de montagem no shell, ele funciona. /bin/mount
é um link simbólico para /bin/busybox
.
Por que meu script não consegue encontrar /bin/mount
?
Responder1
Acontece que os espaços no arquivo eram na verdade dois caracteres 0xD0 0xA0
(Unicode? Talvez seja apenas uma coincidência que eles se pareçam com CR/LF deslocados para a esquerda 4 bits... Eles também aparecem como um único caractere em branco, não dois). Uma pista logo de cara foi a mensagem de erro - ela deveria ter exibido apenas o comando, não os parâmetros, mas não havia nenhum espaço em branco na linha.
Assim que descobri isso, percebi qual provavelmente era a causa. Meu sistema operacional é o Windows 7 e estou executando o Ubuntu em uma VM VirtualBox e uso uma área de transferência compartilhada. Copiei o script de uma página da web no Chrome no Windows 7 e colei no gedit no Ubuntu. Esses caracteres foram copiados da página da web ou algo não funcionou bem com a codificação no caminho da página para o gedit.
Substituir aqueles por caracteres de espaço resolveu o problema.