Я скомпилировал код C, работающий как двоичный файл на ARM. ARM загружает Linux с SD-карты, используя старую Image
который был создан с помощью buildroot. В коде C я вызываю сценарий оболочки, который перемещает новый Image
Я хочу загрузиться из подкаталога на SD-карте на верхний уровень SD-карты (перезаписывая старый Image
), а затем используйте резервную копию Image.bak
восстановить Image
в подкаталоге снова, на случай, если я снова запущу скрипт:
#!/bin/sh
mv /sd/newImage/Image /sd/
mv /sd/newImage/Image.bak /sd/newImage/Image
reboot
В reboot
в этом случае работает правильно (Putty отключается -> светодиод на плате, которую я использую, горит красным, затем зеленым -> я могу повторно подключиться через Putty), хотя второй mv
команда не работает - она удаляет Image.bak
но не создает Image
- но на самом деле цель этой публикации не в этом.
Когда я пытаюсь изменить сценарий так, чтобы Image.bak
действительно восстанавливает Image
используя cp
команда, затем reboot
Не работает должным образом.
#!/bin/sh
mv /sd/newImage/Image /sd/
cp /sd/newImage/Image.bak /sd/newImage/Image
reboot
Что происходит, так это то, что терминал Putty, который я использовал, разъединяет, но светодиод на плате, который горит красным, когда сигнализирует о перезагрузке, просто остается зеленым, и единственный способ восстановить соединение через Putty - это вручную выключить и снова включить плату через питание переключатель. Кажется, что происходит что-то странное, когда я вызываю cp
в сценарии оболочки. я пытался umount /sd
и используя sync
перед reboot
думая, что, возможно, были проблемы с синхронизацией, но это тоже не сработало.
Я вошел в систему как root, и разрешения не должны быть проблемой ни с чем из этого.