用 PC 上的 Codex 远程开发 ARM 嵌入式 Linux
目标是让 Codex 运行在性能更强的 PC 上,但实际操作、编译和运行发生在 ARM 嵌入式 Linux 设备中。 整体结构: PC 上的 Codex -> 通过 SSH 向 ARM 发送命令 -> ARM 执行编译、测试和程序运行 -> stdout、stderr、退出码返回 PC -> Cod

目标是让 Codex 运行在性能更强的 PC 上,但实际操作、编译和运行发生在 ARM 嵌入式 Linux 设备中。
整体结构:
PC 上的 Codex
-> 通过 SSH 向 ARM 发送命令
-> ARM 执行编译、测试和程序运行
-> stdout、stderr、退出码返回 PC
-> Codex 根据结果继续修改代码
Codex 不需要真正安装在 ARM 设备上。只要 PC 能通过 SSH 控制 ARM,就可以完成大部分远程开发任务。
1. ARM 设备安装 SSH
在 ARM Linux 上执行:
sudo apt update
sudo apt install openssh-server rsync
sudo systemctl enable --now ssh
查看 ARM 的 IP 地址:
hostname -I
假设 ARM 设备信息为:
IP:192.168.1.50
用户名:user
在 PC 上测试连接:
ssh user@192.168.1.50
2. 配置免密登录
在 PC 上生成 SSH 密钥:
ssh-keygen -t ed25519
把公钥复制到 ARM:
ssh-copy-id user@192.168.1.50
之后再次连接:
ssh user@192.168.1.50
如果不再要求输入密码,说明配置成功。
可以在 PC 的 ~/.ssh/config 中添加别名:
Host arm-dev
HostName 192.168.1.50
User user
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 30
之后直接使用:
ssh arm-dev
3. 理解 SSH 命令和管道
下面这条命令中,管道在 ARM 上执行:
ssh arm-dev 'dmesg | grep -i error'
下面这条命令中,dmesg 在 ARM 上执行,grep 在 PC 上执行:
ssh arm-dev 'dmesg' | grep -i error
因此可以自由决定数据在哪一端处理。
SSH 会把远端程序的标准输出、错误输出和退出码返回 PC:
ssh arm-dev 'ls /not_exist'
echo $?
如果远程命令失败,SSH 通常也会返回非零退出码,Codex 可以据此判断任务是否成功。
4. 创建远程执行脚本
推荐不要让 Codex 每次拼接复杂 SSH 命令,而是在项目中准备固定脚本。
项目结构:
my_project/
├── src/
├── CMakeLists.txt
├── scripts/
│ ├── sync.sh
│ ├── build.sh
│ ├── run.sh
│ └── test.sh
└── AGENTS.md
同步代码
创建 scripts/sync.sh:
#!/usr/bin/env bash
set -euo pipefail
REMOTE_HOST="arm-dev"
REMOTE_DIR="/home/user/projects/my_project"
ssh "$REMOTE_HOST" "mkdir -p '$REMOTE_DIR'"
rsync -az --delete \
--exclude ".git/" \
--exclude "build/" \
./ "$REMOTE_HOST:$REMOTE_DIR/"
远程编译
创建 scripts/build.sh:
#!/usr/bin/env bash
set -euo pipefail
REMOTE_HOST="arm-dev"
REMOTE_DIR="/home/user/projects/my_project"
"$(dirname "$0")/sync.sh"
ssh "$REMOTE_HOST" "
set -e
cd '$REMOTE_DIR'
cmake -S . -B build
cmake --build build -j\$(nproc)
"
远程运行
创建 scripts/run.sh:
#!/usr/bin/env bash
set -euo pipefail
REMOTE_HOST="arm-dev"
REMOTE_DIR="/home/user/projects/my_project"
ssh -t "$REMOTE_HOST" "
cd '$REMOTE_DIR'
./build/my_program
"
远程测试
创建 scripts/test.sh:
#!/usr/bin/env bash
set -euo pipefail
REMOTE_HOST="arm-dev"
REMOTE_DIR="/home/user/projects/my_project"
"$(dirname "$0")/build.sh"
ssh "$REMOTE_HOST" "
cd '$REMOTE_DIR'
ctest --test-dir build --output-on-failure
"
添加执行权限:
chmod +x scripts/*.sh
5. 配置 Codex 的项目规则
在项目根目录创建 AGENTS.md:
# ARM remote development rules
This project targets an ARM64 embedded Linux device.
## Remote environment
- SSH host: arm-dev
- Remote directory: /home/user/projects/my_project
- The PC is only used for editing and orchestration.
- Final compilation and execution must happen on the ARM device.
## Required workflow
1. Modify source code locally.
2. Run `./scripts/sync.sh`.
3. Run `./scripts/build.sh`.
4. Run `./scripts/test.sh`.
5. Analyze the complete stdout, stderr and exit code.
6. Continue fixing the project until tests pass.
## Safety restrictions
- Do not run destructive commands.
- Do not modify files outside the remote project directory.
- Do not use sudo unless explicitly authorized.
- Do not reboot or power off the ARM device.
然后在 PC 项目目录中启动 Codex:
cd my_project
codex
可以直接给 Codex 下达任务:
检查并修复这个项目。所有编译和测试必须在 ARM 设备上完成。
使用 ./scripts/build.sh 编译,使用 ./scripts/test.sh 测试。
根据远程返回的完整错误输出持续修改,直到测试通过。
6. 查看远程日志
查看最近的系统日志:
ssh arm-dev 'journalctl -n 100 --no-pager'
持续查看某个服务:
ssh arm-dev 'journalctl -fu my-service'
查看内核日志:
ssh arm-dev 'dmesg | tail -n 100'
将远程日志保存到 PC:
ssh arm-dev 'journalctl -u my-service --no-pager' > service.log
7. 传输二进制文件
SSH 不只能传输文本,也可以传输二进制数据。
从 ARM 获取文件:
ssh arm-dev 'cat /tmp/frame.raw' > frame.raw
把本地固件传到 ARM:
cat firmware.bin | ssh arm-dev 'cat > /tmp/firmware.bin'
实际项目中,普通文件传输更推荐使用:
scp firmware.bin arm-dev:/tmp/
或者:
rsync -av firmware.bin arm-dev:/tmp/
8. 什么时候需要自己写服务
多数情况下,SSH 加固定脚本已经足够。
只有出现以下需求时,才有必要在 ARM 上编写额外服务:
- 任务需要断开 SSH 后继续运行
- 需要任务队列和任务编号
- 需要结构化 JSON 返回
- 需要管理多台 ARM 设备
- 需要限制 Codex 只能执行白名单操作
- 需要保存历史日志
- 需要远程烧录、重启服务或控制硬件
可以设计类似接口:
POST /build
POST /run
POST /test
GET /status
GET /logs
但第一阶段不建议直接写服务。先使用:
SSH直接执行
-> SSH调用固定脚本
-> 有明确需求后再开发远程Agent服务
结论
最实用的方案是:
PC 保存源码并运行 Codex
-> rsync 同步代码
-> SSH 在 ARM 上编译和运行
-> 输出和退出码返回 PC
-> Codex继续分析和修改
从 Codex 的角度看,ARM 设备相当于一个远程命令执行后端。只要命令、文件、标准输入输出和退出码能够稳定传输,就没有必要强行在 ARM 上安装 Codex。