OpenWrt 编译
一、准备编译环境
一个Linux发行版,这里以Ubuntu 24.04.3 LTS为例
执行下面的命令,安装工具链,详情参考OpenWrt官网
1
2
3
4sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses5-dev libssl-dev \
python3-setuptools rsync swig unzip zlib1g-dev file wget
二、下载源码并配置
- 使用普通用户完成下面所有操作,不要使用
root- 下面的操作不涉及第三方feeds的添加,这些工具应该在安装完OpenWrt系统后手动安装,不应该编译到固件里面,以免造成编译错误或者固件不稳定
下载源码
1
2
3
4下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 )
git clone -b v24.10.5 --single-branch --depth=1 https://github.com/openwrt/openwrt.git
进入该目录
cd openwrt修改默认时区和网络
1
2编辑配置文件
vim package/base-files/files/bin/config_generate修改时区
1
2
3
4修改时区为 CST-8
set system.@system[-1].timezone='CST-8'
修改地区为 Asia/Shanghai
set system.@system[-1].zonename='Asia/Shanghai'修改NTP服务器,推荐下面几个服务器,从上至下,依次是
中国科学院国家授时中心
Apple NTP服务器
NTP授时快速域名服务
开源NTP服务器
1
2
3
4add_list system.ntp.server='ntp.ntsc.ac.cn'
add_list system.ntp.server='time.apple.com'
add_list system.ntp.server='cn.ntp.org.cn'
add_list system.ntp.server='cn.pool.ntp.org'修改IP、网关和DNS
1
lan) ipad=${ipaddr:-"192.168.1.1"} ;;
在uci -q batch <<-EOF部分添加下面的内容
1
2set network.$1.gateway='192.168.1.1'
set network.$1.dns='127.0.0.1 223.5.5.5 8.8.8.8'
更新并安装插件
1
2
3
4cd ~/openwrt
./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a配置
首先替换
.config为官方版本,该步骤非常关键,关乎以后能否热更新模块,这里以24.10.5版本,x86/64架构为例1
2
3
4cd ~/openwrt
wget https://downloads.openwrt.org/releases/24.10.5/targets/x86/64/config.buildinfo
rm -rf .config
mv config.buildinfo .config接着执行下面的命令,进入配置菜单
1
make menuconfig
该界面有如下操作
↑ ↓键:上下切换PgUp PgDn键:上下翻页Enter回车键:- 进入子菜单
- 选择/确认
Y键:选中,在< >上进行操作,操作后变为<*>N键:取消选中,在<*>上进行操作,操作后变为< >Esc键:连击两下,返回上层菜单,如果在主菜单则为退出配置/键:调出搜索功能
按照下面的清单配置,加粗部分强烈建议配置
- Target System -> x86
- Subtarget -> x86_64
- Target Profile -> Generic x86/64
- Target Images
- < > tar.gz
- < > ext4
- < > Build GRUB images
- (0) Seconds to wait before booting the default entry // 尽可能快的重启OpenWrt
- (64) Kernel partition size (in MB)
- (2048) Root filesystem partition size (in MB) // 建议尽可能多的分配存储空间
- Base system
- <*> block-mount
- < > dnsmasq // 不选,使用下面
- <*> dnsmasq-full // dnsmasq完整版本
- LuCI
- Collections
- <*> luci
- < > luci-ssl // 不选,使用下面
- <*> luci-ssl-openssl // OpenSSL版
- Modules
- Translations
- <*> Simplified Chinese (zh_Hans)
- <*> luci-compat
- Translations
- Applications
- 这里不动,安装好OpenWrt系统后手动安装最新版本即可
- Collections
- Network
- File Transfer
- <*> curl
- <*> wget-ssl
- File Transfer
- Utilities
- <*> open-vm-tools // 非必选,按需选择
- <*> open-vm-tools-fuse // 非必选,按需选择
注意,如果配置错误,可以执行下面的命令重新配置
1
rm -rf ./tmp && rm -rf .config
三、编译固件
预下载
会先下载大部分编译所需文件,后面编译阶段还会下载
1
make download -j8 V=s
编译
全核编译
1
make V=s -j$(nproc)
单线程编译
如果全核编译报错,需要使用单线程编译,排查错误
1
make V=s -j1
编译过程非常漫长,以
Intel Core i5-10400为例,需要2个小时如果实在无法找出错误,建议执行下面的命令后从
二、下载源码并配置重新开始1
rm -rf ~/openwrt
四、获取结果(以x86/64为例)
1 | cd ~/openwrt/bin/targets/x86/64/ |