Я скомпилировал код 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
В этом случае перезагрузка работает должным образом (Putty отключается -> индикатор на используемой плате становится красным, а затем зеленым -> я могу подключиться через Putty), хотя вторая команда mv
не работает - она удаляет Image.bak
но не создает Image
- но на самом деле это не цель этого поста.
Когда я пытаюсь изменить сценарий так, чтобы Image.bak
действительно восстанавливал Image
с помощью команды cp
, перезагрузка не работает должным образом.
#!/bin/sh
mv /sd/newImage/Image /sd/
cp /sd/newImage/Image.bak /sd/newImage/Image
reboot
Что происходит, это то, что терминал Putty, который я использовал, разъединяет, но светодиод на плате, который становится красным при сигнале о перезагрузке, просто остается зеленым, и единственный способ восстановить соединение через Putty - это вручную выключить плату через выключатель питания. Так что, кажется, что-то странное происходит, когда я вызываю команду cp
в сценарии оболочки. Я попытался отключить SD-карту, думая, что, возможно, были проблемы с синхронизацией, но это тоже не сработало.
Я вошел в систему как root, и разрешения не должны быть проблемой ни с чем из этого.