2

Я работаю над переносом среды разработки с Windows на OS X и столкнулся с проблемой TFTP. Я использую TFTP для загрузки файлов на встроенное сетевое устройство, это единственный вариант для получения файлов на устройстве (поддержка SCP не предоставляется).

Каждый раз, когда я собираю прошивку для этого устройства, на него должна быть загружена серия из трех файлов. В Windows у меня было несколько простых скриптов, которые загружали все нужные файлы за один раз, что значительно упрощало развертывание. Эти сценарии были просты, потому что клиент TFTP для Windows запускается однострочными командами, такими как:

tftp -i <Server IP Address> PUT <Local Filename> <Server Filename>

Не похоже, что есть какой-либо способ загрузить файл с одной командой, подобной этой, в OS X. Вместо этого вам нужно открыть программу tftp и выполнить ряд команд, которые выглядят примерно так:

$ tftp
tftp> connect <Server IP Address>
tftp> mode binary
tftp> put <Local Filename> <Server Filename>
tftp> quit

До сих пор мне не удавалось выяснить, как написать сценарий для этого, хотя у меня нет большого опыта работы с сценариями оболочки Unix. Кто-нибудь пытался сделать что-то подобное и придумать какие-нибудь решения?

3 ответа3

4

Вы должны иметь возможность использовать здесь документ для подачи команд в программу tftp в сценарии:

#!/bin/sh

tftp <<EOF
connect <server IP Address>
mode binary
put <Local Filename 1> <Server Filename 1>
put <Local Filename 2> <Server Filename 2>
put <Local Filename 3> <Server Filename 3>
quit
EOF
1

Вы можете найти этот URL полезным в сценариях оболочки TFTP:http://www.unix.com/shell-programming-and-scripting/159848-redirect-output-shell-script-tftp.html

1

Вы можете создать простой текстовый скрипт с командами, которые вы вводите в приглашении tftp> , а затем использовать перенаправление stdin оболочки unix для передачи команд в исполняемый файл tftp .

Например, в мой каталог /tmp/ я помещаю файлы bin1 bin2 и bin3 .

Затем я использовал текстовый редактор, чтобы создать файл loader.txt со следующим содержимым:

binary
put bin1 
put bin2
put bin3
quit

Не имея запущенного TFTP-сервера, я использовал ttcp -r -u чтобы открыть UDP-порт 5001, и наблюдал, обрабатывается ли файл, когда я выполнил следующее в другом окне:

[Nevins-mac-mini:/tmp] nevin% tftp 127.0.0.1 5001 < loader.txt
Transfer timed out.

Transfer timed out.

Transfer timed out.

[Nevins-mac-mini:/tmp] nevin%

Тайм-ауты были ожидаемы для моего теста.

Я проверил, что каждый файл предлагался по очереди после тайм-аутов, и что они предлагались в двоичном, а не в режиме ascii, поэтому я уверен, что каждая строка в loader.txt была проанализирована через двоичный файл tftp .

Надеюсь, это поможет...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .