硬汉嵌入式论坛

 找回密码
 立即注册
查看: 14|回复: 0
收起左侧

小米路由器Mini OpenWrt 交叉编译 mongoose-web-server 实战 - 测试 OpenCode 代理能力

[复制链接]

2

主题

4

回帖

10

积分

新手上路

积分
10
发表于 昨天 20:47 | 显示全部楼层 |阅读模式
本帖最后由 CacheRivulet 于 2026-2-19 21:00 编辑

OpenWrt 交叉编译 mongoose-web-server实战记录

背景

本次实验的主要目标是测试 OpenCode 配合 MiniMax2.5 模型的代理能力。通过让 AI 自主完成一个完整的嵌入式开发任务——在 OpenWrt 路由器上交叉编译并部署 Web 服务器,来验证其远程操作、多步骤任务处理和问题排查能力。

测试项目https://github.com/createskyblue/mongoose-web-server-demo
用户预先创建了 MEMORY.md 文件,其中包含了:
  • 远程编译服务器的 SSH 连接信息(IP、端口、用户名、密码)
  • 开发板的 SSH 连接信息
  • 使用 sudo 时需要通过管道注入密码的注意事项
AI 需要首先读取记忆文件获取环境信息,然后自主完成交叉编译环境搭建、代码编译、部署调试等全流程工作。

webui截图.png

人类领航员角色
本次实验的核心价值不仅在于验证 AI 的能力,更在于展示如何有效地使用 AI 作为生产力工具
在整个任务过程中,用户(人类领航员)扮演了以下关键角色:
  • 任务规划者:在开始前创建 MEMORY.md,预先准备好所有必要的连接信息、注意事项和任务目标
  • 环境准备者:提前准备好编译服务器(虚拟机)和开发板,确保网络可达
  • 审批者:每次 AI 提交执行的指令都需要用户手动批准,确保操作安全可控
  • 方向引导者:当 AI 遇到困难或走错方向时,及时给予提示(如:引导使用 agent-browser 工具解决网络问题)
  • 质量把控者:监控任务进展,在关键节点进行验证(如检查编译结果、测试服务运行)
  • 终点把舵者:任务完成后,引导 AI 编写完整的项目文档和复盘总结

这类似于自动驾驶中的 L2/L3 级别辅助驾驶——人可以离开方向盘,但必须时刻监视路面,随时准备接管。AI 负责执行具体的操作步骤,而人类负责确认方向是否正确。
介入统计:整个任务中,人类仅在以下时机介入:
  • 工具链下载失败时,引导使用本地浏览器工具
  • 资源文件路径错误时,指出需要修正
  • 任务完成后,引导生成项目文档

测试日志
以下是用户在测试过程中的时间记录:
  • 00:00 - 开始测试 AI 智能体独立安装 OpenWrt 交叉编译工具链
  • 00:07 - AI 成功完成任务,耗时 不到7分钟
  • 00:07 ~ 00:10 - 完成 mongoose-web-server-demo 的交叉编译,耗时 不到3分钟
  • 00:50 - 开发板准备就绪,开始部署
  • 00:55 - 部署完成(程序运行成功),但忘记复制前端资源文件
  • 01:03 - 修复资源文件问题,人工介入修正路径,最终成功

一、环境准备1.1 远程编译服务器(虚拟机)
  • IP: ***.***.***.205
  • SSH端口: ****
  • 用户: mint
  • 密码: 123456
  • 系统: Linux Mint 22.3 (Ubuntu 24.04)
  • 内核: 6.14.0-37-generic
  • 内存: 7.7GB
  • 架构: x86_64

1.2 开发板信息(测试/开发用途)
  • 设备: Xiaomi Mini (MT7620A)
  • IP: 192.168.31.14
  • 系统: OpenWrt 6.6.73
  • 架构: mipsel (MIPS)
  • libc: musl

二、交叉编译环境搭建2.1 下载工具链
目标是为 MT7620A 芯片编译程序,该芯片属于 ramips/mt7620 系列。

网络问题
由于编译服务器 global internet 网络环境不佳,AI 多次尝试从 OpenWrt 官网下载工具链均失败。最终在用户的引导下,使用本地电脑的 agent-browser 工具(有网络加速器)访问 OpenWrt 官网,成功找到了 24.10.0 版本的可下载链接:
https://downloads.openwrt.org/re ... inux-x86_64.tar.zst

2.2 安装步骤
# 创建目录并下载工具链
sudo mkdir -p /opt
cd /opt
wget https://downloads.openwrt.org/re ... inux-x86_64.tar.zst

# 解压
tar -xf openwrt-toolchain-24.10.0-ramips-mt7620_gcc-13.3.0_musl.Linux-x86_64.tar.zst


2.3 配置环境变量
export PATH=/opt/openwrt-toolchain-24.10.0-ramips-mt7620_gcc-13.3.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-13.3.0_musl/binPATH

验证安装成功:
mipsel-openwrt-linux-gcc --version
# 输出: mipsel-openwrt-linux-musl-gcc.bin (OpenWrt GCC 13.3.0) 13.3.0


三、编译项目3.1 克隆源码
cd /tmp
git clone https://github.com/createskyblue/mongoose-web-server-demo.git


3.2 首次编译(动态链接)
cd mongoose-web-server-demo
cmake -B build -DCMAKE_C_COMPILER=mipsel-openwrt-linux-gcc

cmake --build build
编译成功,但后续部署时发现问题。

3.3 构建前端资源
cd public
npm install

npm run build
生成的文件在 public/dist 目录。

四、部署与调试
4.1 文件传输
由于开发板只能从内网访问,需要通过跳板机中转:
# 从编译服务器下载到本地
scp -P 6626 mint@***.***.***.205:/tmp/mongoose-web-server-demo/build/mongoose-web-server ./

# 上传到开发板
scp mongoose-web-server root@192.168.31.14:/tmp/


4.2 第一个坑:动态链接失败
第一次编译的程序是动态链接的:
ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked,
interpreter /lib/ld-uClibc.so.0


上传到开发板后运行报错:
ash: /tmp/mongoose-web-server: not found



4.3 解决:静态编译
问题根源是开发板使用 musl libc,而编译时链接了 uClibc。解决方案是使用静态链接:

cmake -B build -DCMAKE_C_COMPILER=mipsel-openwrt-linux-gcc \
      -DCMAKE_C_FLAGS="-static -O2"
cmake --build build


静态编译后验证:
ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked



4.4 第二个坑:资源文件路径
程序代码中指定静态资源路径为 public/dist,需要将构建好的前端资源上传到开发板的正确位置:
# 创建项目目录
mkdir -p /tmp/app

# 上传程序和资源
mv mongoose-web-server /tmp/app/
mkdir -p /tmp/app/public
# 上传 dist 目录内容到 /tmp/app/public/dist/


xiaomi_mini_openwrt_app部署路径.png

4.5 启动服务
[C] 纯文本查看 复制代码
cd /tmp/app
./mongoose-web-server &
验证服务运行:
[C] 纯文本查看 复制代码
netstat -tlnp | grep 8000
# tcp  0.0.0.0:8000  LISTEN
访问 http://192.168.31.14:8000 即可看到 Web 界面。



五、总结
5.1 关键点
  • 工具链选择:MT7620A 对应 ramips/mt7620 目标,OpenWrt 24.10.0 提供了预编译工具链
  • 静态链接:OpenWrt 路由器通常使用 musl libc,必须静态编译才能直接运行
  • 路径注意:Web 服务器的静态资源路径要与程序中的配置匹配(public/dist)
  • 文件传输:开发板在内网,需要通过跳板机或本地中转

5.2 最终目录结构
PixPin_2026-02-19_20-50-55.png

六、相关命令速查
[C] 纯文本查看 复制代码
# 编译命令
export PATH=/opt/openwrt-toolchain-24.10.0-ramips-mt7620_gcc-13.3.0_musl.Linux-x86_64/toolchain-mipsel_24kc_gcc-13.3.0_musl/bin:$PATH
cmake -B build -DCMAKE_C_COMPILER=mipsel-openwrt-linux-gcc -DCMAKE_C_FLAGS="-static -O2"
cmake --build build

# 开发板操作
ssh [url=mailto:root@192.168.31.14]root@192.168.31.14[/url]
cd /tmp/app
./mongoose-web-server &


*2026年2月19日 UTC+8*
本文档由用户在任务完成后,引导 AI 编写完成。记录了完整的实验过程、踩坑经历和解决方案,可作为 OpenWrt 交叉编译入门的参考资料,也可作为展示 AI 代理能力的实践案例。




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-2-20 06:53 , Processed in 0.058677 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表