OpenWrt 中文教程:从零编译专属软路由固件
2026-08-27发表于
编程语言一、速览:这个仓库是做什么的?
入门
OpenWrt 是一套可以运行在路由器上的操作系统,你可以把它理解成路由器的“安卓系统”:官方固件像手机出厂系统,功能固定;OpenWrt 则允许你自由安装插件、调整网络功能。coolsnowwolf/openwrt 是基于 OpenWrt 的稳定版源码集合,国内很多软路由玩家用它来编译自定义固件。
这个仓库解决了一个具体痛点:厂商路由器固件往往功能少、更新慢,甚至内置广告或收集数据。通过编译 Lean 提供的源码,你可以得到一个干净、可定制的路由器系统,只保留自己需要的功能,比如去广告、科学上网、流量监控等。
编译好的固件适合刷入 x86/x64 软路由,也就是一台小体积、低功耗、专门用来跑网络系统的电脑主机。下图是常见的软路由硬件形态,铝合金外壳,带多个千兆网口。


二、准备工作:编译前必须满足的条件
入门
开始编译前,你需要准备一台安装了 Ubuntu 18 LTS x64 系统的机器。Ubuntu 是一种常见的 Linux 桌面/服务器系统,编译 OpenWrt 需要它提供的完整开发工具链。这台机器可以是物理机,也可以是虚拟机(如 VMware、VirtualBox 中安装的 Ubuntu)。
机器最好具备至少 4GB 内存和 20GB 以上可用磁盘空间,因为编译过程中会下载大量源码依赖,产生很多中间文件。另外,整个编译过程不能用 root 用户进行,必须使用普通用户;root 权限只用于安装依赖包。
国内用户还需要准备一个稳定的“梯子”,也就是科学上网工具,因为下载源码和依赖库时可能访问境外服务器,网络不稳定会导致编译失败。
先在终端里更新软件包列表:
sudo apt-get update
然后安装编译所需的全部依赖。下面这条命令较长,但可以一次性完成:
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget
注意:Ubuntu 18 官方源可能已停止维护,如果安装依赖时提示找不到包,建议更换为可用的 Ubuntu 旧版镜像源或使用更新版本的系统,但兼容性可能略有差异。
三、获取源码并初始化 feeds
入门
依赖装好后,用 git clone 把 Lean 的源码仓库下载到本地。git 是一个版本管理工具,clone 相当于把整个项目的完整代码复制一份到你的电脑上。
git clone https://github.com/coolsnowwolf/openwrt
cd openwrt
进入 openwrt 目录后,需要初始化 feeds。你可以把 feeds 理解成 OpenWrt 的“软件源索引”,里面记录了各种插件和软件包的下载位置。先更新索引,再安装到本地源码树中:
./scripts/feeds update -a
./scripts/feeds install -a
重要:这里再次提醒,执行
git和后续编译命令时,请确保你当前登录的是普通用户,不要用 root。用 root 会导致部分脚本权限判断异常,直接报错。
四、用 menuconfig 选择你的固件功能
进阶 · 推荐细读
接下来进入配置界面。输入:
make menuconfig
这会打开一个蓝底黄字的终端图形界面,操作方式有点像自助餐选菜:用键盘上下键移动,用空格键勾选或取消,用左右键选择底部操作项。如果只想编译一个基础、能跑起来的固件,直接选择保存退出即可,不用修改任何项。
在这个界面里,你需要重点关注三个配置:
Target System:目标硬件平台,比如 x86、ramips、ipq40xx 等。要根据你的路由器或软路由 CPU 架构选择。Subtarget和Target Profile:更细分的硬件型号。选错型号会导致固件无法启动。LuCI相关选项:LuCI 是 OpenWrt 的网页管理后台,建议勾选,否则装好后只能用命令行管理。
第一次编译建议不要勾选太多第三方插件,先确保基础固件能编译通过。修改完选择 Save 保存,系统会在源码根目录生成一个 .config 文件,里面记录你刚才的所有选择。
五、编译:真正开始生成固件
进阶 · 推荐细读
在正式编译前,先下载第三方源码包,OpenWrt 内部称之为 dl 库。很多插件依赖的外部项目源码需要提前拉取到本地:
make -j8 download V=s
-j8 表示同时用 8 个线程下载,加快速度;V=s 表示输出详细日志,方便排查。国内网络环境下这一步很容易卡住,建议全程开启全局科学上网。
下载完成后,开始正式编译:
make -j1 V=s
-j1 代表只用一个线程编译。第一次编译强烈建议单线程,因为多线程虽然快,可一旦出错,日志会交错在一起,新手很难看懂。编译耗时可能从半小时到数小时不等,取决于机器性能和勾选功能。
编译成功后,固件文件输出在:
openwrt/bin/targets
你可以在这个目录下按硬件平台路径找到类似 .img.gz 或 .bin 的固件文件,把它刷入路由器即可。
六、二次编译与重新配置
深入 · 老手可选
当 Lean 仓库更新了源码,或者你想同步最新插件时,不需要重新克隆整个仓库,直接更新即可:
cd openwrt
git pull
./scripts/feeds update -a && ./scripts/feeds install -a
make defconfig
make -j8 download
make -j$(($(nproc) + 1)) V=s
git pull 拉取上游代码变更;make defconfig 会根据现有 .config 补齐新增选项的默认值,避免手动配置遗漏。最后一行中的 $(($(nproc) + 1)) 是自动计算 CPU 核心数并加 1 的写法,能充分利用机器性能。
如果你想推翻当前配置,重新选一遍功能:
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s
rm -rf 会删除临时文件和旧配置,让编译环境回到干净状态。请谨慎执行,确认自己确实需要重新配置。
七、踩坑与注意事项
入门
根据源码仓库的说明和常见实践,下面这些点值得关注:
- 千万不能用 root 编译:很多兄弟第一次用 root 登录 Ubuntu 直接编译,结果脚本报权限错。正确做法是创建普通用户,只有装依赖时用
sudo。 - 国内网络必须备好梯子:
make download阶段会访问 GitHub 和各类开源站点,网络不通会反复重试甚至中断。 - 第一次不要盲目多线程:
-j8下载没问题,但编译阶段用-j1更稳。等成功一次后再尝试多线程。 - 编译失败先看日志末尾:不要立刻重跑,打开终端往上翻,通常最后几行会指出具体错误。
- 默认登录信息:编译出来的固件默认管理地址是
192.168.1.1,用户名root,密码password。首次登录后建议立刻修改。 - 二次发布需注明来源:Lean 的源码允许自由使用,但如果编译后二次发布固件,请保留 GitHub 仓库链接,这是基本的开源礼仪。
OpenWrt 编译的难点不在命令本身,而在于环境准备和网络稳定性。把前置条件做扎实,后面按顺序执行命令即可。
项目信息
| 项目 | 值 |
|---|---|
| 仓库 | coolsnowwolf/openwrt |
| 语言 | C |
| Star | 854 |
| Fork | 680 |
| 主页 | 无 |
参考链接
延伸阅读
想继续探索?这些同领域的教程可能也适合你:
121
72
1
1344
文章目录
评论