环境要求

系统版本

Debian 11 或者 Ubuntu LTS,本次编译使用的是 Ubuntu20 LTS

网络要求

最好是境外主机或者能够访问国际网络,大陆网络环境编译失败率较高

编译依赖
sudo apt update
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils python3-setuptools rsync swig unzip zlib1g-dev file wget \
libboost-dev libpam0g-dev xsltproc liblzma-dev libfreetype-dev

开始编译

  1. 新建一个用户(非必需,但不能使用 root 用户编译),用于编译固件
sudo useradd -m openwrt  # 新建一个名为 openwrt 的用户

# 修改用户默认的 Shell
sudo apt install -y sudo
sudo usermod -s /bin/bash openwrt

# 切换用户
su openwrt
cd ~

  1. 拉取源码,这里用的是 Lean 大佬的 LEDE 分支源码
#本次编译的版本是 v23.05
git clone https://github.com/openwrt/openwrt.git
cd openwrt
  1. 根据需要修改或新增软件源,如果要添加其他没有的插件则需要自行添加软件源至 feeds.conf.default 文件,当然也可以单独添加某个插件
src-git packages https://github.com/openwrt/packages.git;openwrt-23.05
src-git luci https://github.com/openwrt/luci.git;openwrt-23.05
src-git routing https://github.com/openwrt/routing.git;openwrt-23.05
src-git telephony https://github.com/openwrt/telephony.git;openwrt-23.05

#单独添加(在更新并安装插件之前执行)
##插件
git clone https://github.com/esirplayground/luci-app-poweroff.git package/luci-app-poweroff

#更新并安装插件
./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a
  1. 执行 make menuconfig 命令进入编译菜单

    菜单选项简要说明:
    “`shell
    #选择 CPU 类型
    Target System (x86) –> #软路由选择 x86,硬路由根据型号厂家自行选择
    Subtarget (x86_64) –> #CPU 子选项
    Target Profile (Generic x86/64) –> #厂家具体型号
    #设置镜像编译的格式(squashfs,ext4)
    Target Images –> # 默认 squashfs
    #添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
    Target Images –> (16) Kernel partition size (in MB) # 默认是16,建议修改为256
    Target Images –> (400) Root filesystem partition size (in MB) # 默认是400,建议修改为1024
    #开启 IPv6 支持
    Extra packages –> ipv6helper(选定这个后,下面几项会自动选择)
    Network –> odhcp6c
    Network –> odhcpd-ipv6only
    LuCI –> Protocols –> luci-proto-ipv6
    LuCI –> Protocols –> luci-proto-ppp
    #开启适用于 VMware 的 VMware Tools
    Utilities –> open-vm-tools
    Utilities –> open-vm-tools-fuse
    #选择插件
    LuCI –> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译
    #选择主题
    LuCI –> Themes # 选择喜欢的主题,可以选多个
    #其他选项一般不需要调整,如感兴趣可以自行了解</p></li>
    </ol>

    <pre><code class="line-numbers"><br />5. 配置完成后使用编译菜单底部的 Save 保存,然后退出菜单 Exit,开始下载软件包

    “`shell
    #预下载编译所需的软件包
    make download -j8
    #检查文件完整性
    find dl -size -1024c -exec ls -l {} \;
    #检查文件完整性命令可以列出下载不完整的文件,小于1k的文件属于下载不完整,如果存在则用下面的命令删除,然后重新下载编译所需的软件包,再次检查
    #确认所有文件完整可大大提高编译成功率,避免浪费时间
    find dl -size -1024c -exec rm -f {} \;

    1. 最后编译固件,编译完成后输出路径是 bin/targets,默认密码是 password
    #编译固件(-j 后面是线程数,首次编译推荐用单线程)
    make V=s -j1
    

    二次编译

    1. 拉取最新 OpenWrt 源码和更新 feeds 源中的软件包源码
    cd openwrt
    git pull
    ./scripts/feeds update -a
    ./scripts/feeds install -a
    
    1. 清除旧的编译产物和目录(可选)
    make clean
    #源码有大规模更新或者内核更新后执行,以保证编译质量
    #此操作会删除 /bin 和 /build_dir 目录中的文件
    
    make dirclean
    #更换架构编译前必须执行
    #此操作会删除 /bin 和 /build_dir 目录的中的文件(make clean),以及 /staging_dir、/toolchain、/tmp 和 /logs 中的文件
    
    1. 同首次编译,多线程编译失败后自动进入单线程编译,失败则输出详细日志
    make defconfig
    make download -j8
    find dl -size -1024c -exec ls -l {} \;
    make -j$(nproc) || make -j1 || make -j1 V=s
    
    #如果需要重新配置
    rm -rf ./tmp && rm -rf .config #清除临时文件和编译配置文件
    make menuconfig
    make download -j8
    find dl -size -1024c -exec ls -l {} \;
    make -j$(nproc) || make -j1 || make -j1 V=s
    

    参考文档:
    https://fairysen.com/819.html

发表评论