Как бы / сделать я получить доступ / запрограммировать удаленный Arduino через SSH через промежуточный компьютер?

В руководстве по FreeBSD есть довольно полное руководство по выращиванию диска. Для UFS (используемой по умолчанию во FreeBSD), вы можете наращивать онлайн, начиная с версии ядра 10.0 и далее.

Однако изменение разделов вокруг смонтированных файловых систем может привести к потере данных или несоответствиям, которые могут быть впервые обнаружены при следующей попытке загрузки системы. Также не забудьте проверить свой загрузчик.


Рост файловой системы в основном сводится к следующему:

  1. Настройте таблицу разделов. Будьте очень осторожны с этим шагом, поскольку ошибка здесь может привести к повреждению всего диска. Скорее всего, вы захотите размонтировать все разделы, которые не нужны для работы минимальной системы, особенно раздел подкачки.

    Судя по вашему вопросу, я предполагаю, что вы знаете, как использовать gpart для этого.

    После внесения корректировок вы можете смело перемонтировать все разделы и снова включить swap.

  2. Собственно, выращивание ФС. Для FreeBSD это просто: выполните команду growfs с в качестве раздела, размер которого вы изменили.

Для уменьшения, вы должны выполнить эти шаги в обратном порядке:

  1. Уменьшение файловой системы, чтобы убедиться, что вы не перезапишите ничего важного: growfs -s . Убедитесь, что вы выбрали размер меньше, чем размер вашей новой целевой файловой системы, т.е. если вы хотите уменьшить размер раздела со 100 ГБ до 70 ГБ, измените размер ФС до 60-65 ГБ на этом шаге. Превышение размера означает больше пространства для разгона, но обычно также означает больше перемещений и, следовательно, больше времени ожидания.
  2. Настройте таблицу разделов. В отличие от предыдущего этапа, на этом шаге вы выбираете точный целевой размер. На этом этапе вы, вероятно, захотите размонтировать дополнительные разделы, особенно если вы перемещаете другие разделы (на самом деле, в этом случае вы должны их размонтировать).
  3. Увеличение файловой системы. Это избавит вас от пространства, которое вы оставили в конце (нового) раздела: growfs . Если опустить параметр размера, то будет использоваться весь раздел.

2
30.01.2017, 22:49
3 ответа

Отсутствие прокси-сервера USB-устройства (usbip по состоянию на февраль 2016 г. не выглядит очень портативным), другим способом является установка avrdude на система, подключенная к Arduino (ДИСТАНЦИОННАЯ). Если это возможно, то запущенная система Arduino IDE (КЛИЕНТ) может получить указание вызвать программу, которая подключается к avrdude на УДАЛЕННОМ. Недостатки: требуется возиться с файлами конфигурации Arduino IDE, вероятно, хрупкие, потребуется дополнительная работа для поддержки таких вещей, как arduinoOTA и так далее ...

CLIENT (Arduino IDE) -> ssh -> REMOTE (avrdude) -> usb -> arduino

Arduino IDE должна содержать programmers.txt Файлы конфигурации и platform.txt (находятся, например, в Arduino.app/Contents/Java/hardware/arduino/avr в версии для Mac). Что нам нужно в этих файлах, так это новый программатор, который установит соединение с REMOTE и передаст данные для загрузки, а затем на REMOTE будет выдавать настоящую команду программиста avrdude , используя данные, переданные из системы CLIENT. .

КЛИЕНТ-программист

В Java / hardware / arduino / avr / programmers.txt добавьте что-то вроде

avrrelay.name=AVR RELAY
avrrelay.protocol=stk500v2
avrrelay.program.tool=avrrelay
avrrelay.program.extra_params=

Более сложно, в Java / hardware / arduino / avr / platform.txt дублирует все tools.avrdude. , содержащие строки, и измените их так, чтобы вместо этого они назывались tools.avrrelay. и, где необходимо, вместо этого вызовите avrrelay-client (большая часть этих строк не обязательна, но, вероятно, легче их все подкорректировать, чем выяснить, какие из них необходимы):

tools.avrrelay.path={runtime.tools.avrdude.path}
tools.avrrelay.cmd.path={path}/bin/avrrelay-client
tools.avrrelay.config.path={path}/etc/avrdude.conf
... many more of these not shown, e.g. the verbose one ...
tools.avrrelay.upload.pattern="{cmd.path}" "{build.path}/{build.project_name}.hex"
tools.avrrelay.program.pattern="{cmd.path}" "{build.path}/{build.project_name}.hex"

Затем в Каталог Java / hardware / tools / avr / bin (который должен быть идентичен параметру конфигурации runtime.tools.avrdude.path ) создать avrrelay-client и сделать это исполняемый файл:

#!/bin/sh
# send the only argument (which should be the *.hex file) to avrrelay-remote
# this will need to use public key auth, or expect to automatically fill
# in any password promptes
ssh theremotehost avrrelay-remote < "$1"

REMOTE script

В Arduino IDE есть параметр предпочтения для отображения подробного вывода во время загрузки,который покажет запущенную команду.

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude \
-C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf \
-v -patmega328p -cstk500v2 -Pusb \
-Uflash:w:/blablabla.../Blink.ino.hex:i 

Эта команда может быть скопирована и адаптирована для кода на REMOTE, хотя avrdude (1) указывает, что имя файла должно быть указано, поэтому скопированные данные необходимо будет поместить в файл tmp, и который поступил на avrdude ; это программа avrrelay-remote , вызываемая КЛИЕНТОМ; он должен быть chmod + x и вызываться по полному пути или находиться в SSH-доступном каталоге PATH .

#!/bin/sh
FLASH=`mktemp /tmp/avrrelay.XXXXXXXXXX` || exit 1
# assume data passed via standard input
cat > "$FLASH"
# these flags will vary depending on programmer, etc
avrdude -C /path/to/avrdude.conf -v -patmega328p -cstk500v2 -Pusb \
"-Uflash:w:$FLASH:i"

Теоретически перезапустите Arduino IDE и попробуйте использовать новый программатор «AVR RELAY». Используйте свои безумные навыки отладки, чтобы выяснить, где он ломается, повторите.

удаленный монитор последовательного порта

Чтобы монитор последовательного порта работал удаленно, вероятным вариантом будет его пересылка через socat :

Небуферизованную команду socat для подключения последовательных портов на удаленных машинах и регистрации данные

2
27.01.2020, 22:10

Проще всего установить Arduino IDLE на удаленный компьютер, а затем использовать ssh для доступа к нему.

Чтобы иметь возможность отправлять графику по ssh, просто добавьте флаг -X в конец:

$ ssh username@ip-adress -X
2
24.03.2020, 14:09

Ответ thrig очень подробный, но общий. Я подумал, что было бы полезно также иметь ответ, который почти вырезается и вставляется. Следующее протестировано с Arduino IDE 1.8.12 в Windows 10 1903, но его легко адаптировать к более старым версиям Windows, если вы предоставите свои собственные scp и ssh.

Чтобы это работало, вам нужно настроить такие вещи, чтобы вы могли использовать ssh с локального на удаленного без запроса пароля или парольной фразы в командной строке.

Также предполагается, что вы успешно установили и настроили Arduino IDE с помощью avrdude в удаленной системе.

Во всем нижеследующем вам нужно изменить все, что отмечено***

Заключительный отказ от ответственности :Я не проверял, что происходит, если какой-либо из путей содержит пробелы. Кроме того, отсутствуют проверки, предотвращающие перезапись файлов и т.п.

В локальной системе вArduino -Installation -Dir\hardware\arduino\avr создайте или отредактируйте файл с именем

platform.local.txt и добавьте это как содержимое:

tools.remoteavrdude.path={runtime.tools.avrdude.path}
tools.remoteavrdude.cmd.path={path}\bin\avrrelay.bat
tools.remoteavrdude.remote.host=***user***@***host***
tools.remoteavrdude.remote.cmd.path=***how to invoke avrdude on the remote system. could be sudo avrdude***
tools.remoteavrdude.remote.config.path=***which config file on the remote system to use. could be /etc/avrdude.conf***
tools.remoteavrdude.remote.file.path=***to which filename the compiled code should be copied to on the remote system***

tools.remoteavrdude.upload.params.verbose=-v
tools.remoteavrdude.upload.params.quiet=-q -q
# tools.remoteavrdude.upload.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.remoteavrdude.upload.verify=
tools.remoteavrdude.upload.params.noverify=-V
tools.remoteavrdude.upload.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{remote.config.path} {upload.verbose} {upload.verify} ***the board-specific options*** -Uflash:w:{remote.file.path}:i" {build.path}\{build.project_name}.hex {remote.file.path}

tools.remoteavrdude.program.params.verbose=-v
tools.remoteavrdude.program.params.quiet=-q -q
# tools.remoteavrdude.program.verify is needed for backwards compatibility with IDE 1.6.8 or older, IDE 1.6.9 or newer overrides this value
tools.remoteavrdude.program.verify=
tools.remoteavrdude.program.params.noverify=-V
tools.remoteavrdude.program.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{remote.config.path} {program.verbose} {program.verify} ***the board-specific options*** -Uflash:w:{remote.file.path}:i" {build.path}\{build.project_name}.hex {remote.file.path}

tools.remoteavrdude.erase.params.verbose=-v
tools.remoteavrdude.erase.params.quiet=-q -q
tools.remoteavrdude.erase.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{config.path} {erase.verbose} {program.extra_params} -e ***the board-specific options*** -Ulock:w:{bootloader.unlock_bits}:m -Uefuse:w:{bootloader.extended_fuses}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m"

tools.remoteavrdude.bootloader.params.verbose=-v
tools.remoteavrdude.bootloader.params.quiet=-q -q
tools.remoteavrdude.bootloader.pattern="{cmd.path}" {remote.host} "{remote.cmd.path} -C{config.path} {bootloader.verbose} ***the board-specific options*** {program.extra_params} -Uflash:w:{remote.file.path}:i -Ulock:w:{bootloader.lock_bits}:m {runtime.platform.path}\bootloaders\{bootloader.file} {remote.file.path}

Дляспециальных опций платыпроверьте platform.txt в удаленной системе. Обычно что-то вроде -p{build.mcu} -c{upload.protocol} -Dдля загрузки и -p{build.mcu} -c{protocol} {program.extra_params}еще

Также в этом каталоге отредактируйте

Programmers.txt и добавьте следующее содержимое:

remoteavrdude.name=remote avrdude
remoteavrdude.protocol=***what your board needs***
remoteavrdude.program.tool=remoteavrdude
***any other options for your board and programmer, check programmers.txt on the remote system***

Затем вArduino -Installation -Dir\hardware\tools\avr\bin создайте файл с именем

avrrelay.bat и добавьте это как содержимое:

IF "%~3" == "" GOTO execute
C:\Windows\Sysnative\OpenSSH\scp.exe "%3" %1:%4
:execute
C:\Windows\Sysnative\OpenSSH\ssh.exe %1 %2

Если вы используете какой-то другой scp/ssh, измените пути выше.

0
04.05.2020, 22:39

Теги

Похожие вопросы