镜像为 ev3dev。
通过 SSH 连接 LEGO EV3 设备,默认密码为 maker
:
登录之后,查看设备系统中运行的所有进程,剔除所有的内核进程,用户进程主要包括如下这些:
总共有 23 个用户进程。
以 ev3dev 官方提供的在 VSCode 中为 EV3 开发 Python 代码的示例工程 vscode-hello-python 为例,在 VSCode 中以打开目录的方式打开下载的这个工程的源码目录,按下 F5 键在 EV3 中运行代码,此时查看 EV3 中进程的运行情况,所有运行的进程如下:
这次总共有 28 个用户进程。此时多了如下 5 个进程:
过程似乎是,在 VSCode 需要将代码灌进 EV3 设备中执行时,EV3 设备的系统中启动了 sftp 服务器 sftp-server
用于传送代码,代码传送完成后执行 brickrun --directory=/home/robot/vscode-hello-python /home/robot/vscode-hello-python/hello.py
命令运行我们的代码。这个 brickrun
进程的父进程是进程 ID 为 868 的 sshd: robot@notty
进程。
brickrun
并没有直接解释执行我们的 Python 代码,而是借助于进程号为 378 的 conrun-server
和 EV3 设备系统中的 Python3 解释器 python3
解释执行我们的代码。
vscode-hello-python 的代码所完成的功能主要是,在设备的屏幕上显示 “Hello World!”,并在终端上显示 “Hello VS Code!”。通过 VSCode 的插件将代码灌进设备并执行,无疑可以正确的完成这些功能。
如果我们用 SSH 登录进设备的系统中之后,直接在终端中执行 Python 代码,就像下面这样:
此时,无法看到字符串被显示在 LEGO EV3 设备的屏幕上,两条字符串都被显示在了终端中。
如果我们直接在终端中执行 brickrun
命令,如下面这样:
此时代码依然可以如最初预期的那样运行。如果查看 LEGO EV3 设备中进程运行情况的话,可以看到多了如下这两个进程:
brickrun
进程由进程号为 722 号的我们正在运行的 bash
进程创建,Python3 解释器进程依然由进程号为 378 的 conrun-server
进程创建。
在 搭建 LEGO EV3 的 PyCharm Python 开发环境 一文中,可以看到,用 Python 代码控制马达转动的代码,可以直接在终端中用 Python 解释器如我们预期的那样执行。
这就说明,直接在终端中执行 Python 解释器的 Python 运行环境,和 brickrun
/conrun-server
创建的 Python 运行环境是不同的,主要的不同点应该在 Python 标准库中输入输出函数的行为上。
总体上来看,LEGO EV3 中执行 VSCode Python 代码的过程,似乎主要是一个远程代码执行的过程。
LEGO EV3 设备中的 ev3dev 镜像的官方网站为 ev3dev,ev3dev 镜像中运行的定制的用户进程的代码基本上都是开源的。前面提到的几个命令的源码地址如下:
brickrun
- brickrunconrun-server
- console-runner
ev3dev 的 VSCode 插件同样是开源的,其地址为 vscode-ev3dev-browser。