前边文章叙述了flutter开发嵌入式linux的流程,以及两种数据交互方式的验证,请参阅:
flutter嵌入式arm64 linux, Flutter嵌入式arm64 linux数据交互方式验证(共享内存、GRPC),
本文介绍如何进行arm linux板子的真机调试
真机调试
1创建真机连接配置文件
参考Remote target devices · sony/flutter-elinux Wiki · GitHub,在~目录下创建一个隐藏文件,.flutter_custom_devices.json,使用flutter-elinux devices查看是否成功创建了真机的连接;
2打debug包
如上release包一样,使用如下命令创建debug打包shell文件,添加权限,然后执行打包命令:
flutter-elinux build elinux --target-arch=arm64 \
--target-compiler-triple=aarch64-buildroot-linux-gnu \
--target-sysroot=/home/root1/buildroot/output/staging \
--target-compiler-flags=--gcc-toolchain=/home/root1/buildroot/output/host \
--debug
打包完成后,执行flutter-elinux run –d deviceId, deviceId就是上一步中配置文件中的id
2.4.3 可能出现的问题
问题1
[ERROR][ELinuxWindowWayland(1066)] Failed to connect to the Wayland display.
[ERROR][CreateRenderSurface(1338)] Wayland display is invalid.
首先在板子上执行:weston-simple-egl,看能否跳出来wayland的动画示例,然后执行weston &,查看XDG_RUNTIME_DIR绑定的路径和.flutter_custom_devices.json绑定的一致,如下截图:
2.4.4 快速调试
以上方式自动化程度高,本人测试只能自动化部署到板子并且启动,不能让vsCode连接到vmService,并且通过ssh传输文件很慢,尤其是传输debug包(160MB)的时候,要几分钟才能传输成功,非常慢,所以最好是使用ftp直接传输,详细步骤:
- 打包部署,参照2.4.2,对项目进行打包,然后打开虚拟机中的资源管理器,如下图进行连接:
连接成功以后进入程序部署目录,然后将打好的包从虚拟机中拷贝到板子部署目录;
- 启动可执行文件,使用HyperTerminal连接板子(或者直接使用ssh),启动flutter可执行文件,如下图:
- 拷贝vmService的启动地址: http://127.0.0.1:42801/fzgpO39Wp1E=/ 到虚拟机中的vscode的launch.json中的attach项,如下图
- 端口转发,在虚拟机中执行如下指令,将虚拟机的端口转发到嵌入式板子的对应端口,为下一步attach做准备;
ssh -L 42801:127.0.0.1:42801 root@192.168.4.72
- 启动attach,在虚拟机中,vscode的Run and Debug中选择Attach,然后启动,如下图:
如下图就能连接成功了,可以打断点进行调试