在做嵌入式开发时,很多时候需要远程连接或者远程调试设备,这时可以通过VScode上的插件来很方便的进行远程连接和调试。

ssh远程连接嵌入式开发板:

1、安装vscode ssh远程插件:Remote-SSH。

vscode 连接远程python解释器 config 设置_编辑器

2、点击"+",输入ssh连接命令。(eg:ssh root@192.168.1.4) 

vscode 连接远程python解释器 config 设置_IP_02

vscode 连接远程python解释器 config 设置_ide_03

3、选择要更新的ssh配置文件,一般是C:\用户\用户名\.ssh\config,根据实际情况选择。添加好主机后点击连接。 

vscode 连接远程python解释器 config 设置_团队开发_04

 

vscode 连接远程python解释器 config 设置_IP_05

 4、如果没有出现上面连接的选项,按组合键"Ctrl"+"Shift"+"p",输入Remote-SSH,选择连接到主机。然后选择系统类型,嵌入式设备的系统一般都是Linux。

vscode 连接远程python解释器 config 设置_团队开发_06

vscode 连接远程python解释器 config 设置_ide_07

 5、输入密码(远程主机用户的密码)。

vscode 连接远程python解释器 config 设置_编辑器_08

6、登入成功后,可以选择一个文件夹,这样每次登入都会默认进入这个目录下。

vscode 连接远程python解释器 config 设置_ide_09

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(公钥) 两个文件。

vscode 连接远程python解释器 config 设置_编辑器_10

其中的 config 就是之前 VSCode 中的配置文件,里面保存着服务端的IP、名字和用户。 

vscode 连接远程python解释器 config 设置_ide_11

3、在远程服务端的用户目录下(就是ssh登入的默认目录),创建一个 .ssh 目录,然后进入 .ssh 目录下创建一个 authorized_keys 文件。 将之前生成的公钥 id_rsa.pub 文件里的内容全部复制到 authorized_keys 文件中就可以了。

vscode 连接远程python解释器 config 设置_编辑器_12

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文件。

vscode 连接远程python解释器 config 设置_IP_13

vscode 连接远程python解释器 config 设置_IP_14

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 调试器的位置,和交叉编译器应该在同一目录下。

vscode 连接远程python解释器 config 设置_团队开发_15

"miDebuggerServerAddress":""是远程设备的 IP 和 port。

保存设置好的launch.json文件。

4、在远程设备上启动 gdbserver。

vscode 连接远程python解释器 config 设置_ide_16

gdbserver 192.168.42.161:20000 ./test

#或者省略IP
gdbserver :20000 ./test

这里的 IP 和 port 要和launch.json文件中的一致 ,然后在 VScode 按F5或者调试按钮。

vscode 连接远程python解释器 config 设置_IP_17

进入gdb调试后,会出现下面几个按钮,可以单步调试,也可以逐过程调试。

vscode 连接远程python解释器 config 设置_IP_18

可以设置断点,左边还可以查看变量。

vscode 连接远程python解释器 config 设置_团队开发_19

以上就是VScode远程连接、调试嵌入式设备,让嵌入式开发变得更简单。如果有什么疑问或建议,欢迎在评论区中提出嗷~。