OpenWrt 编译

一、准备编译环境

  1. 一个Linux发行版,这里以Ubuntu 24.04.3 LTS为例

  2. 执行下面的命令,安装工具链,详情参考OpenWrt官网

    1
    2
    3
    4
    sudo 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

二、下载源码并配置

  1. 使用普通用户完成下面所有操作,不要使用root
  2. 下面的操作不涉及第三方feeds的添加,这些工具应该在安装完OpenWrt系统后手动安装,不应该编译到固件里面,以免造成编译错误或者固件不稳定
  1. 下载源码

    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
  2. 修改默认时区和网络

    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
      4
      add_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
      2
      set network.$1.gateway='192.168.1.1'
      set network.$1.dns='127.0.0.1 223.5.5.5 8.8.8.8'
  3. 更新并安装插件

    1
    2
    3
    4
    cd ~/openwrt
    ./scripts/feeds clean
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  4. 配置

    首先替换.config为官方版本,该步骤非常关键,关乎以后能否热更新模块,这里以24.10.5版本,x86/64架构为例

    1
    2
    3
    4
    cd ~/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
      • Applications
        • 这里不动,安装好OpenWrt系统后手动安装最新版本即可
    • Network
      • File Transfer
        • <*> curl
        • <*> wget-ssl
    • Utilities
      • <*> open-vm-tools // 非必选,按需选择
      • <*> open-vm-tools-fuse // 非必选,按需选择

    注意,如果配置错误,可以执行下面的命令重新配置

    1
    rm -rf ./tmp && rm -rf .config

三、编译固件

  1. 预下载

    会先下载大部分编译所需文件,后面编译阶段还会下载

    1
    make download -j8 V=s
  2. 编译

    • 全核编译

      1
      make V=s -j$(nproc)
    • 单线程编译

      如果全核编译报错,需要使用单线程编译,排查错误

      1
      make V=s -j1

    编译过程非常漫长,以Intel Core i5-10400为例,需要2个小时

    如果实在无法找出错误,建议执行下面的命令后从二、下载源码并配置重新开始

    1
    rm -rf ~/openwrt

四、获取结果(以x86/64为例)

1
2
cd ~/openwrt/bin/targets/x86/64/
ls -all