接触 OpenWRT 一年多, 大部分时间都在进行固件编译和刷机。在这个过程中遇到过不少问题, 下面记录下编译过程的详细步骤, 供以后参考
操作步骤
准备工具:
- 系统环境: Ubuntu 16.04 LTS 64 位
- 路由器型号: ZBT-WA05
- OpenWRT 版本: CC
编译过程建议使用非 root 用户
安装编译所需的工具
打开终端, 输入以下命令安装所需的编译工具
sudo apt-get update
sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip
sudo apt-get install subversion mercurial
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
下载 OpenWRT 源码
下载 OpenWRT 源码前, 请确保有足够的磁盘空间 (至少 12GB)。源码体积约为几百 MB, 但编译过程中会产生大量文件。由于大部分 SVN 仓库都是失效的, 所以一些老的教程就不能参考了, 要使用 Git 下载源码。
要下载哪个版本, 可以参考 OpenWRT 的 wiki。以 CC 版本为例, 在主文件夹下执行以下命令
git clone git://git.openwrt.org/15.05/openwrt.git
安装可用的 feeds
进入 OpenWRT 源码目录, 更新并安装依赖
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a
等待下载完成
配置编译选项
执行以下命令进行编译配置
make menuconfig
在弹出的配置界面中, 可以通过方向键选择、空格键进行选项勾选 (出现 M
表示编译但不打包进固件, *
表示编译并打包进固件)。根据 ZBT-WA05 路由器的配置, 选择硬件平台、CPU 型号等选项
建议勾选以下选项 (前面出现 *
号)
- LuCI (Web 界面的控制台)
LuCI
->1.Collections
->luci
LuCI
->2.Modules
->Translations
->Chinese(zh-cn)
(中文语言包)
- 勾选
Package the OpenWrt-base Toolchain
, OpenWRT 的交叉编译工具链
完成后, 选 Save
保存更改, 退出
以上是基本的固件编译, 如果需要其他功能, 需要再勾选添加
编译固件
执行以下命令开始编译
make V=s -j
V=s
用于显示编译信息, 一定要勾选, 否则出错的话无法看到错误信息-j
代表使用全部的 CPU 线程数, 后面跟数字表示并行编译线程数 (例如: 4C8T 的 CPU 可以使用-j8
代表使用 8 个线程)。可以根据自己 CPU 核心数选择线程数, 但请确保系统内存足够, 若不确定可以省略-j
参数或使用-j1
编译完成后, 显示如下信息并且终端上没有 error 时, 表示编译成功
Signing package index...
make[2]: Leaving directory '/home/goldmoon/openwrt'
make[1]: Leaving directory '/home/goldmoon/openwrt'
/home/goldmoon/openwrt/bin/ramips/openwrt-ramips-mt7620-zbt-wa05-squashfs-sysupgrade.bin
结尾的文件路径即为编译出的固件文件
常见错误排查
在编译过程中, 可能会遇到一些错误, 大部分都是文件下载错误 (OpenWRT 源码仓库通常在国外, 最好自备梯子), 有时候需要科学上网才行。或手动下载缺失的文件放到 dl
目录中。
网络配置
LAN (Local Area Network, 局域网): 指的是一个局限在较小范围内 (如家庭、公司等) 的网络, 通常用于连接在同一地理位置内的设备。我们计算机和路由器之间的连接通常就是通过这个口进行
AN (Wide Area Network, 广域网): 指的是覆盖较大地理范围的网络, 通常指的是通过运营商提供的互联网连接。运营商拉进来的网线通常连接到路由器的 WAN 口
VLAN (Virtual Local Area Network, 虚拟局域网): VLAN 是一种将局域网划分为多个虚拟网段的技术。通过 VLAN, 一个物理网络可以被逻辑划分为多个独立的子网, 使得不同 VLAN 之间的设备通常不能直接通信。这样做的目的是为了提高网络的安全性和管理性。VLAN 可以在同一局域网内创建多个独立的网络段, 而 LAN 和 WAN 也可以在 VLAN 中划分
配置 WAN 口和 LAN 口
在 OpenWRT 中, 网络配置文件位于 /etc/config/
目录下。特别是 WAN 和 LAN 口的配置在 /etc/config/network
文件中。以下是基本的配置示例
配置文件的参数注释
config interface 'lan' # 配置 LAN 口
option type 'bridge' # 桥接方式
option ifname 'eth0.1' # 代表 VLAN1, 这个很重要, 必须与下文的 switch 配置一致
option proto 'static' # 静态 IP
config device 'lan_dev' # 配置 LAN 硬件信息
option macaddr 'XX:XX:XX:XX:XX:XX' # 设置 MAC 地址
config interface 'wan' # 配置 WAN 口
option type 'dhcp' # 使用 DHCP 获取 IP 地址
config switch # 交换机
option enable_vlan '1' # 启用 VLAN
config switch_vlan
option vlan '1' # VLAN1, 配置 LAN 口。和上面的 option ifname 'eth0.1' 相匹配
option ports '0 1 2 3 6t' # 0-3 是 LAN 口, 6t 为 CPU 端口, RT5350 有 5 个端口
config switch_vlan
option vlan '2' # VLAN2, 配置 WAN 口。和上面的 option ifname 'eth0.2' 相匹配
option ports '4 6t' # 4 是 WAN 口, 6t 为 CPU 端口
配置解释:
config interface 'lan'
: 配置 LAN 口,eth0.1
对应的是 VLAN1config interface 'wan'
: 配置 WAN 口, 使用 DHCP 自动获取 IP 地址config switch
: 启用 VLAN 功能config switch_vlan
: 配置 VLAN1 和 VLAN2, 分别对应 LAN 和 WAN 口
原文
官方文档: Build system – Installation
OpenWRT编译——从源码到固件
OpenWRT(二)配置WAN口和LAN口