在做嵌入式开发时,很多时候需要远程连接或者远程调试设备,这时可以通过VScode上的插件来很方便的进行远程连接和调试。
ssh远程连接嵌入式开发板:
1、安装vscode ssh远程插件:Remote-SSH。
2、点击"+",输入ssh连接命令。(eg:ssh root@192.168.1.4)
3、选择要更新的ssh配置文件,一般是C:\用户\用户名\.ssh\config,根据实际情况选择。添加好主机后点击连接。
4、如果没有出现上面连接的选项,按组合键"Ctrl"+"Shift"+"p",输入Remote-SSH,选择连接到主机。然后选择系统类型,嵌入式设备的系统一般都是Linux。
5、输入密码(远程主机用户的密码)。
6、登入成功后,可以选择一个文件夹,这样每次登入都会默认进入这个目录下。
ssh免密登入设置:
1、在本地(Windows、Ubuntu或者Macos)生成一对ssh公私密钥。以Windows为例,打开 cmd 输入 ssh-keygen 命令,然后一直按回车就可以了,应该和下面输出差不多。
C:\Users\86199>ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\86199/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\86199/.ssh/id_rsa.
Your public key has been saved in C:\Users\86199/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:k/fZW0MI2odocmufHxptziPKxrNu4guuq0fTX/miWEs 鏉庡皬鐧紷DESKTOP-5ONQ0N7
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . |
| .+ o . |
| . .S=oo o . |
| o . +=..oo. |
| . ...Eoo..o+...|
| .. =o+*.oB..o.|
| .oooo.=B==+o+o |
+----[SHA256]-----+
2、会在 C:\User\XXX\ 目录下生成一个.ssh的文件夹(XXX代表你在Windows上面的名字),里面有 id_rsa(私钥) 和 id_rsa.pub(公钥) 两个文件。
其中的 config 就是之前 VSCode 中的配置文件,里面保存着服务端的IP、名字和用户。
3、在远程服务端的用户目录下(就是ssh登入的默认目录),创建一个 .ssh 目录,然后进入 .ssh 目录下创建一个 authorized_keys 文件。 将之前生成的公钥 id_rsa.pub 文件里的内容全部复制到 authorized_keys 文件中就可以了。
scp开发板上传和下载文件:
上传和下载文件使用的命令都是 scp,无论是 Windows 还是 Linux 只要安装了 ssh 都能使用。
上传:scp /path/file user@IP:/path/
下载:scp user@IP:/path/file /path
scp /home/root/workspace/samples/bin/key_test biqu@192.168.0.102:/home/biqu/workspace/
The authenticity of host '192.168.0.102 (192.168.0.102)' can't be established.
ED25519 key fingerprint is SHA256:8qDFfC1AfmGhGmH09Vrc1m8S/zwktfRujVx4F9mpKgw.
This host key is known by the following other names/addresses:
~/.ssh/known_hosts:6: [hashed name]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.102' (ED25519) to the list of known hosts.
biqu@192.168.0.102's password:
key_test 100% 464KB 2.8MB/s 00:00
按格式输入命令后,输入用户密码,就将 key_test 文件从本地上传到远程 biqu 用户的 workspace 目录下了。如果需要上传整个目录就需要加上 -r 参数。
scp biqu@192.168.0.102:/home//biqu/workspace/key_test /home/root/workspace
/samples/bin
biqu@192.168.0.102's password:
key_test 100% 464KB 1.7MB/s 00:00
按格式输入命令后,输入用户密码,就将远程 biqu 用户的 key_test 文件下载到本地 bin 目录下了。如果需要下载整个目录就需要加上 -r 参数。
VScode使用gdb远程调试:
在嵌入式开发过程中,将程序上传到开发板中,如果出现问题调试是很不方便的。很多时候都是使用 printf 等打印的方式来找问题,这就需要一遍又一遍向开发板上传程序,而且调试完还需要将打印代码一一删除,这导致调试效率很低。
在 VScode 上使用 gdb 调试就很方便,不需要添加打印语句,而且还能查看变量,设置断点等功能,和在 IDE 上调试一样,还不用敲 gdb 的命令。
1、先把源文件交叉编译好。
arm-linux-gnueabihf-gcc -g -gdwarf-4 -static -o test test.c
解释一下参数:-g 是让编译器生成包含调试信息的可执行文件。
-gdwarf-4:是指定调试信息的格式为 DWARF 4,DWARF 是一种调试文件格式,提供了编译器生成的调试数据。(看别的教程一般都不会加这个参数,但是本人不添加这个参数,生成的可执行文件,调试有问题,可能和环境有关系,这个参数看情况添加)
-static:是编译时使用静态链接(这个参数也是和本人的环境有关,选择性添加)
2、在运行下拉列表里点击添加配置,会出现下面的launch.json文件。
3、launch.json文件中有几个地方需要注意和修改。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Attach",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/IEC104/tests/test",// 本机应用程序位置
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"miDebuggerPath":"/opt/lin/gcc-arm-linux-gnueabi/bin/arm-linux-gnueabihf-gdb", //本机工具链地址 2017.4
"miDebuggerServerAddress":"192.168.42.161:20000"//远端地址+端口
},
]
}
"program": "" 是程序可执行文件的地址,${workspaceFolder}是launch.json文件的位置,可以直接使用绝对地址,例如/home/xxx/IEC104/tests/test。
"miDebuggerPath":""是 gdb 调试器的位置,和交叉编译器应该在同一目录下。
"miDebuggerServerAddress":""是远程设备的 IP 和 port。
保存设置好的launch.json文件。
4、在远程设备上启动 gdbserver。
gdbserver 192.168.42.161:20000 ./test
#或者省略IP
gdbserver :20000 ./test
这里的 IP 和 port 要和launch.json文件中的一致 ,然后在 VScode 按F5或者调试按钮。
进入gdb调试后,会出现下面几个按钮,可以单步调试,也可以逐过程调试。
可以设置断点,左边还可以查看变量。
以上就是VScode远程连接、调试嵌入式设备,让嵌入式开发变得更简单。如果有什么疑问或建议,欢迎在评论区中提出嗷~。