Eu compilei o código C executado como um binário em um ARM. O ARM inicia o Linux a partir de um cartão SD usando um antigo Image
que foi gerado usando o buildroot. Dentro do código C eu chamo um shell script que move o novo Image
que eu quero inicializar de um subdiretório no cartão SD para o nível superior do cartão SD (sobrescrevendo o antigo Image
), e então uso o backup Image.bak
para restaurar o Image
no subdiretório novamente, caso eu execute o script novamente:
#!/bin/sh
mv /sd/newImage/Image /sd/
mv /sd/newImage/Image.bak /sd/newImage/Image
reboot
O reboot
funciona corretamente neste caso (o Putty desconecta - > o LED na placa que estou usando fica Vermelho e Verde - > eu posso reconectar através do Putty), embora o segundo comando mv
não - remove o Image.bak
mas não cria um Image
- mas esse não é o propósito deste post, na verdade.
Quando tento modificar o script para que o Image.bak
realmente restaure o Image
usando o comando cp
, o reboot
não funciona corretamente.
#!/bin/sh
mv /sd/newImage/Image /sd/
cp /sd/newImage/Image.bak /sd/newImage/Image
reboot
O que acontece é que o terminal Putty que eu estava usando desconecta, mas o LED na placa que fica vermelho quando sinaliza que está reiniciando fica verde e a única maneira de restabelecer uma conexão através do Putty é fazer o ciclo manualmente da placa através do interruptor de energia. Então parece que há algo estranho acontecendo quando eu chamo o comando cp
no shell script. Eu tentei umount /sd
e usando sync
antes do reboot
pensando que talvez houvesse problemas de sincronização, mas isso também não funcionou.
Estou logado como root e as permissões não devem ser um problema com isso.