Здравствуйте.
Я можно сказать 3 недели как стал линуксойдом, так что сильно не бейте..
ОС: Ubuntu 11.04
имеется плата: at91sam9g20-ek.
Задача: собрать Ядро и Файловую систему для платы. (сделано)
Грузить Файловую систему через сеть тобишь NFS (вроде все работает)
Иметь возможность с Хотса посредствам tftp сервера загружать\сгружать файлы в файловую систему (собственно проблема)
При помощи buildroot2010.05 собрал rootFS и собственно ядро.. в busybox поставил галочки для tftp и tftpd.
Загружаю ядро через сеть по средствам U-boot давая такие вот команды:
Все вроде грузится и работает.
Где 192.168.150.90 — адрес Хоста (убунты)
192.168.150.170 — назначаю этот адрес для платы
На Хосте поднят tftp по этому в убунте могу делать нечто подобное:
-файл File закачивается в ту папку в которой нахожусь из папки сервера tftp
так же могу сделать нечто подобное в линуксе на плате
файл закачивается все хорошо...
Но вот скажем
- не работает говорит что server error: (2) Access violation
в чем проблема?
Если же делать нечто подобное на хосте (в убунте)
такая же проблема : не работает говорит что server error: (2) Access violation
По этому моя догадка что именно из-за этого я не могу сделать нечто подобное из консоли Хоста
>tftp 192.168.150.170 (адрес платы)
tftp> get File
или
tftp> put File
обе эти команды просто молчат и все потом вылет мол превышен таймаут..
Что нужно подправить?
Помоему по tftp нельзя сделать put удаленно если на удаленном хосте нет файла с таким названием (нулевого размера - дело в безопасности) который хотите передать, к тому же проверьте права доступа на директорию tftp сервера.
Я тут почитал вот это: buildroot-2011.02/output/build/tftpd-5.0/INSTALL.tftp
где сказано что:
так вот у меня почему то не сгенерировался in.tftpd, из-за чего я понимаю сервер не работает, а клиент работает (tftp собрался) по этому мы можем загрузить на машину, а сгрузить с нее нет....
Почему такая шляпа?
Если всматриваться то судя по этим строчкам:
из файла: .etc/init.d/S80tftpd-hpa
этот скрипт как раз и запускает сервер тфтп, и называется он in.tftpd, но его в папке просто нету, Может я что-то забыл включить или галочку какую просмотрел..
Шляпа в том что tftp использовать на уже загруженной системе нелогично, намного логичнее заюзать уже полноценный ftp. Кстати - можно на плате поднять dropbear (это маленький клиент и сервер SSH) и пользоваться на хосте виртуальной ФС в МС - вся корневая платы будет в отдельной панели МС как локальный ресурс - по ней можно бродить, копироать туда-сюда и прочие радости файлового менеджера.
Нашел вроде бы решение, возможно будет кому-то полезным:
1 - На самом деле in.tftpd не нужен.
2 - Для работы и запуска tftpd сервера, необходимо создать файл inetd.conf в директории /etc/
3 - согласно документации по busybox а именно: http://www.busybox.net/downloads/BusyBox.html в пункте про tftpd написано, что для запуска сервака в файле inetd.conf нужно прописать вот это:
Итого содержание моего файла inetd.conf:
Где /var/lib/tftpboot - путь к папке загрузки...
После запуска Линукса на плате, нам необходимо запустить сервис inetd, просто введя inetd и нажать энтер. Проверить, запущен сервис или нет, можно введя команду top, (покажет запущенные приложения), для выхода необходимо нажать клавишу q.
После этого можно проверить работает ли, наш сервак посредством загрузки из Хоста (Убунты) файла из платы на хост.
Консоль убунты (Хоста)
Где 192.168.150.170 адрес платы.
после чего мы загрузили из консоли Хоста, в текущую директорию файл Primer.txt из платы.
Замечание: Необходимо задавать полный путь для файла, возможно это ограничение tftpd сервера busybox, хотя возможно это мои кривые руки.
По поводу логичности:
Ну передо мной поставили такую задачу, настроить линукс так, чтобы иметь именно такую возможность (загружать файлы из платы из консоли Хоста). и именно по tftp.
И еще я ведь написал, что я под линуксом 3 недели от силы, и мол поднять FTP и т.п. Вы типа пошутили, я понимаю....
Тут наверное большинство Линуксойды с большим стажем, и встраиваемые системы под управлением линукса для вас это как с мотоцикла пересесть на мопед - смешно, легко и не принужденно...
Надеюсь, мой пост будет полезен таким же новичкам, как и я.
А я пока пойду почитаю про то как запустить сервис inetd в автоматическом режиме.
что я сделал для автозагрузки:
Необходимо было запустить две службы на автомате, а именно:
inetd
и веб сервер в данном случае lighttpd при этом передать ему конфиг...
Так вот, для этого дела я написал два скрипта и разместил их в папку /etc/init.d
Скрипт для запуска службы inetd (имя файла: S80inetd)
Аналогично для запуска веб сервера: (S80lighttpd)
Благодоря этим скриптам при загрузке мы запустим веб сервер и службу inetd
Кстати на счет сервера, может и лишнее, но всеже я приведу содержание моего конфига мало ли, вдруг война....