Jump to content

    
Digi

Удаленная отладка программ на Linux

Recommended Posts

Не знаю, в ту ли ветку пишу, но назрел вопрос.

Есть удалённая железка на Raspbian, на ней работают некоторые программные модули. На железке есть хреновый мобильный интернет и можно открыть несколько портов. Один порт открыт для SSH.  Редактировать код, запускаемый на малине, необходимо с локального компа. Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

Пока есть идея использовать в качестве облака - GitHub. Залить на него изменённый код, затем при помощи скрипта на малине, запускаемого через SSH, выполнить необходимые действия. 

Может есть какое либо более изящное решение ?

 

Share this post


Link to post
Share on other sites
2 минуты назад, Digi сказал:

Пока есть идея использовать в качестве облака - GitHub. Залить на него изменённый код, затем при помощи скрипта на малине, запускаемого через SSH, выполнить необходимые действия. 

Может есть какое либо более изящное решение ?

наплодить ключ для ssh, положить в нужное место, т.с. обеспечив доверенное соединение, потом скриптами гонять пакеты нужную сторону

Share this post


Link to post
Share on other sites

А в чем, собственно, проблема? У меня достаточно железок вроде "апельсинки" или "куби". Просто монтирую хомяка по sshfs. Открываю на своем компьютере в qtcreator и правлю спокойно код. А собираю и отлаживаю по ssh в терминале. Разницы с локальной работой почти никакой — только тормоза из-за "задумчивости" одноплатников (правда, иной раз реально бесит, когда перекомпиляция секунд 20 длится — и это гольный С, а не кресты с бустами и шаблонами!).

Share this post


Link to post
Share on other sites
16 часов назад, Digi сказал:

Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

Да. Речь идет о кросскомпиляции? Настройка шагов в 10, дальнейший процесс выгрузки и отладки в ОДИН клик. Уже обсуждалось, почитайте тут

Если хотите собирать исходники прямо на малине, то в Eclipse настраивается ремоут достут. все исходники на малине... запскт gcc из локального эклипса прямо на малине..... блин - забудьте удаленную сборку на таргете. Настройте кросскмпиляцию. Готовых кросскомпиляторов для малины полно. Если на локале не будет нужных сторонних библиотек (например boost, wiringpi, qt и т.п.) то их с малины на локальный десктоп скопировать и эклипсу указать путь к ним. 

11 часов назад, Eddy_Em сказал:

правда, иной раз реально бесит, когда перекомпиляция секунд 20 длится — и это гольный С

при кросскомпиляции натравить эклипс на 8 ядер на все ядра - сборка махом!!! Да и отладка прямо на таргете в человеческой в лучшей IDE возможна

 

Edited by razrab83

Share this post


Link to post
Share on other sites

Не вижу смысла делать кросс-компиляцию чего-то мелкого. Можно и 20 секунд подождать.

Другое дело - генту собирать. Вот там — да, приходится делать qemu'вский чрут, чтобы собрать образ для "малинки" или "апельсинки". Армбиан, к сожалению, скатился в самое оно — ведь он основан на бубунте, а это — днище!

Share this post


Link to post
Share on other sites

SSHFS  у меня пару лет назад постоянно падало.

Самый простой вариант:

Как отправить с Линукса.

заходите в папку из которой надо скопировать файл "file" на малинку.

запускаете команду sftp pi@remote_raspberry_pi_ip_address. Полагаю, что username pi. Если сделали другое имя, то пишите его.

У вас будут работать команды ls cd, но уже на малинке. Заходите в нужную папку.

из директории, в которой вы находились копируете файл "file" командой "put file"

 

Второй вариант:

команда scp похожа на команду cp, только она копирует на удаленный или с удаленного компьютера. Перед абсолютным путем к файлу на удаленном компьютере необходимо написать pi@remote_raspberry_pi_ip_address:

Двоеточие в конце обязательно

 

scp /home/devel/raspberry_design/file pi@remote_raspberry_pi_ip_address:/home/pi/location

скопирует файл file из папки /home/devel/raspberry_design/ в папку /home/pi/location на удаленной малинке с IP адресом  remote_raspberry_pi_ip_address.

 

Если копировать с винды, то поставьте на нее winscp.

Share this post


Link to post
Share on other sites

Тогда давайте еще вспомним rsync…

Вообще же, если соединение нестабильное (а только по этой причине могут быть проблемы с sshfs), можно подмонтировать удаленный ресурс при помощи NFS. Прошло уже то время, когда NFS приводила к зависаниям компьютера. Сейчас все нормально работает.

Share this post


Link to post
Share on other sites
On 12/23/2019 at 4:43 PM, Digi said:

Не знаю, в ту ли ветку пишу, но назрел вопрос.

Есть удалённая железка на Raspbian, на ней работают некоторые программные модули. На железке есть хреновый мобильный интернет и можно открыть несколько портов. Один порт открыт для SSH.  Редактировать код, запускаемый на малине, необходимо с локального компа. Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?  Кто нибудь такое делал ?

Пока есть идея использовать в качестве облака - GitHub. Залить на него изменённый код, затем при помощи скрипта на малине, запускаемого через SSH, выполнить необходимые действия. 

Может есть какое либо более изящное решение ?

 

Основных способов для отладки ПО с локальной машины всего два: компилируем на локальной машине (кросс компиляция) и отправляем на плату или компилируем непосредственно на плате. Для первого способа выбираете IDE для разработки, прописываете компилятор и как связываетесь с платой (TCF агент, SSH), для второго способа использую SSH и Visual Studio, проект создаю для удаленной компиляции под Линуксом. В этом случае исходники копируются на плату и там собираются. Запускать и отлаживать можно в VS. 

Share this post


Link to post
Share on other sites

Через SSH можно и копировать файлы (командой scp) и запускать команды и приложения на удаленной системе.

Вам надо публичный ключ с вашего рабочего компа положить в соответствующий файл на железке. Здесь написано как его сделать и добавить, но вам не надо делать. Просто возьмите тот которым  ваш локальный комп пользуется, когда подключается по SSH
https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server

или меньше букв:
https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password

 

Второй способ:

На локальный комп установите sshpass
sudo apt-get install sshpass
И используйте таким образом
sshpass -p your_password ssh user@hostname

Второй способ плох тем, что светите пароль, но исполнить его проще.

Как исполнять команды удаленно. 
Вот я на малинке 192.168.1.161, подключенной по первому способу (иначе попросит пароль) исполняю команду ifconfig

$ ssh -t pi@192.168.1.161 ifconfig
eth0      Link encap:Ethernet  HWaddr 02:хх:хх:хх:хх:хх
          inet addr:192.168.1.161  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::f8c5:eba9:81ff:fa60/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:369712530 errors:0 dropped:0 overruns:0 frame:0
          TX packets:14193387 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2751495000 (2.7 GB)  TX bytes:971323255 (971.3 MB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:588 errors:0 dropped:0 overruns:0 frame:0
          TX packets:588 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:49807 (49.8 KB)  TX bytes:49807 (49.8 KB)

Connection to 192.168.1.161 closed.

 

Теперь пишите скрипты и автоматизируйте процесс.

 

 

Share this post


Link to post
Share on other sites

Я не пойму, какое отношение всё это копирование имеет к отладке? Отладка - GDB, который прекрасно работает по сети. Тулчейн с кросскомпилятором и gdb под целевую платформу собрать на ПК и подключаться. На цели понадобится только gdb (сервер).

Share this post


Link to post
Share on other sites
5 hours ago, NStorm said:

Я не пойму, какое отношение всё это копирование имеет к отладке? Отладка - GDB, который прекрасно работает по сети. Тулчейн с кросскомпилятором и gdb под целевую платформу собрать на ПК и подключаться. На цели понадобится только gdb (сервер).

Вы перечитайте вопросы, заданные ТС. Там в частности есть:
Как автоматизировать процесс  загрузки новых файлов с локальной машины и их запуск ?"

Share this post


Link to post
Share on other sites

Да читал, и даже заметил, что заданы они были в давнюю докороновируную эпоху ) Но т.к. тему продолжают, решил высказать своё удивление неподходящему к названию теме, а также оставить всё-таки пост по сабжу )

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.