RV1106 板端程序上手:交叉编译、VS Code 远程开发与部署
这份笔记记录怎么在 RV1106 板子上跑自己写的程序。VM 负责交叉编译,板子负责运行,中间通过 scp 或 make run 部署。
一、一句话原理
交叉编译出来的程序只能在板子上跑。
VM(x86_64)负责编译,板子(ARM)负责运行。
二、为什么会报 Exec format error
在 VM 上执行 ./hello 就会报这个:VM 是 x86_64 的 Ubuntu,而 hello 是 32 位 ARM 程序。
这不是程序写错了,是架构不对。
三、环境速查
| 项目 | 值 |
|---|---|
| VM | wangbeihong@10.0.0.245(密码 wang) |
| 板子 | 10.0.0.214,主机名 luckfox-502d,root 密码 luckfox |
| 项目目录(VM) | ~/dev/rv1106-apps/rv1106-hello |
| 同一目录(容器里) | /home/luckfox-dev/rv1106-apps/rv1106-hello |
| 工具链 | ~/luckfox-pico/tools/linux/toolchain/arm-rockchip830-linux-uclibcgnueabihf/bin/ |
四、日常循环
改 hello.c → make run → 看板子的输出。不用重新刷固件。
五、做法一:一条命令
依次执行:
cd ~/dev/rv1106-apps/rv1106-hellomake run会问你两次密码,都是板子密码 luckfox:
- 第一次是
scp(传文件) - 第二次是
ssh(执行)
看到 hello from board 就成功了。
六、做法二:拆开做
# 1) 编译,产物是 ./hello
make
file hello # 应显示 ARM, EABI5, statically linked
# 2) 传到板子的 /tmp
scp hello root@10.0.0.214:/tmp/ # 密码 luckfox
# 3) 登录板子
ssh root@10.0.0.214 # 密码 luckfox
# 4) 提示符变成 root@luckfox-502d:~# 之后,在这里执行:
chmod +x /tmp/hello
/tmp/hello # 输出 hello from board
exit # 退出板子,回到 VM七、分清两个提示符
| 提示符 | 是什么 | 干什么 |
|---|---|---|
wangbeihong@wangbeihong-rv1106:~$ |
VM(x86_64) | 写代码、编译、scp |
root@luckfox-502d:~# |
板子(ARM) | 运行 ARM 程序 |
在 VM 上跑 ARM 程序必定失败,看到 Exec format error 就是跑错地方了。
八、在容器里编译
依次执行:
bash ~/scripts/run-luckfox.shcd /home/luckfox-dev/rv1106-apps/rv1106-hellomake容器只挂载两个目录,注意路径对应:
| VM(VS Code 里看到的) | 容器里 |
|---|---|
~/dev |
/home/luckfox-dev |
~/luckfox-pico |
/home/luckfox-pico |
九、常见坑
- 不加
-static:程序拷到板子可能报not found(库版本对不上)。Makefile 里已经加了,别删。 - 板子 IP 变了:
BOARD_IP=10.0.0.x make run。 - 每次要输密码:正常。想免密可以
ssh-keygen+ssh-copy-id root@10.0.0.214。 make deploy/make run报 ssh 连接超时:先ping 10.0.0.214确认板子在线。
相关文章
评论
评论区由 giscus 提供(基于 GitHub Discussions),内容会保存在 GitHub 上;详见《隐私政策》。