Назад | Перейти на главную страницу

Команда 'reboot' не работает должным образом после команды 'cp', 'mv' также ведет себя странно

Я скомпилировал код 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, и разрешения не должны быть проблемой ни с чем из этого.