Skip to content

createskyblue/openwrt-mongoose-web-deploy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

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 需要首先读取记忆文件获取环境信息,然后自主完成交叉编译环境搭建、代码编译、部署调试等全流程工作。

人类领航员角色

本次实验的核心价值不仅在于验证 AI 的能力,更在于展示如何有效地使用 AI 作为生产力工具

在整个任务过程中,用户(人类领航员)扮演了以下关键角色:

  1. 任务规划者:在开始前创建 MEMORY.md,预先准备好所有必要的连接信息、注意事项和任务目标
  2. 环境准备者:提前准备好编译服务器(虚拟机)和开发板,确保网络可达
  3. 审批者:每次 AI 提交执行的指令都需要用户手动批准,确保操作安全可控
  4. 方向引导者:当 AI 遇到困难或走错方向时,及时给予提示(如:引导使用 agent-browser 工具解决网络问题)
  5. 质量把控者:监控任务进展,在关键节点进行验证(如检查编译结果、测试服务运行)
  6. 终点把舵者:任务完成后,引导 AI 编写完整的项目文档和复盘总结

这类似于自动驾驶中的 L2/L3 级别辅助驾驶——人可以离开方向盘,但必须时刻监视路面,随时准备接管。AI 负责执行具体的操作步骤,而人类负责确认方向是否正确。

介入统计:整个任务中,人类仅在以下时机介入:

  • 工具链下载失败时,引导使用本地浏览器工具
  • 资源文件路径错误时,指出需要修正
  • 任务完成后,引导生成项目文档

这种"人类领航员 + AI 执行者"的模式,是当前 AI 代理落地应用的最佳实践——既发挥了 AI 强大的执行能力,又保证了任务的正确方向。

测试日志

以下是用户在测试过程中的时间记录:

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

总结

  • 安装工具链:<7分钟
  • 交叉编译:<3分钟
  • 部署调试(含修复):约8分钟

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

一、环境准备

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/releases/24.10.0/targets/ramips/mt7620/openwrt-toolchain-24.10.0-ramips-mt7620_gcc-13.3.0_musl.Linux-x86_64.tar.zst

2.2 安装步骤

# 创建目录并下载工具链
sudo mkdir -p /opt
cd /opt
wget https://downloads.openwrt.org/releases/24.10.0/targets/ramips/mt7620/openwrt-toolchain-24.10.0-ramips-mt7620_gcc-13.3.0_musl.Linux-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/bin:$PATH

验证安装成功:

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/

4.5 启动服务

cd /tmp/app
./mongoose-web-server &

验证服务运行:

netstat -tlnp | grep 8000
# tcp  0.0.0.0:8000  LISTEN

访问 http://192.168.31.14:8000 即可看到 Web 界面。

Web界面截图

部署路径

五、总结

5.1 关键点

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

5.2 最终目录结构

/tmp/app/
├── mongoose-web-server    # 主程序
└── public/
    └── dist/            # 前端资源
        ├── index.html
        └── assets/

六、相关命令速查

# 编译命令
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 root@192.168.31.14
cd /tmp/app
./mongoose-web-server &

2026年2月19日 UTC+8

About

Cross-compile and deploy mongoose web server on OpenWrt Xiaomi Mini router (MT7620A). A complete tutorial demonstrating OpenCode + MiniMax agent capabilities for embedded development.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors