OpenWrt/LEDE 的编译与 Mentohust 软件包的添加

首次编译

  • 依赖安装

    1
    2
    sudo apt-get update
    sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 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 curl swig rsync
  • 代码下载,进入目录

    1
    2
    git clone https://github.com/coolsnowwolf/lede
    cd lede
  • 软件包下载、安装

    1
    2
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  • 添加 MentoHUST 软件包

    1
    2
    git clone https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk.git package/mentohust
    git clone https://github.com/BoringCat/luci-app-mentohust.git package/luci-app-mentohust
  • 调整 OpenWrt 系统组件

    1
    make menuconfig

    选择好架构与型号,进入 LuCI 一栏选择插件

    * 代表编入固件,M 表示编译成模块或者 IPK 包, 留空为不编译

    详细插件应用说明参见这里

    添加 MentoHUST 需勾选以下位置:

    • LuCI —> Applications —> luci-app-mentohust
    • Network —> Ruijie —> mentohust
  • 预下载所需文件

    1
    make download -j8 V=s
  • 开始编译

    1
    make -j1 V=s

    -j1:使用单线程编译,数字即为所用线程数。初次推荐单线程编译,一是因为玄学问题可能成功率高,二是方便查看错误日志。

    V=s:输出详细日志,用于编译失败时方便找出错误。

再次编译

  • 进入目录

    1
    cd lede

更新

短期内再次编译可忽略

  • 更新系统软件包

    1
    2
    sudo apt update
    sudo apt upgrade -y
  • 更新 OpenWrt 源码

    1
    git pull
  • 更新 feed 源中软件包

    1
    2
    3
    ./scripts/feeds clean
    ./scripts/feeds update -a
    ./scripts/feeds install -a

    ./scripts/feeds clean 可选,用于避免 feeds 较大修改后更新无效

文件清理

  • 清除旧的编译产物(可选)

    1
    make clean

    在源码有大规模更新或者内核更新后执行,以保证编译质量。此操作会删除 /bin/build_dir 目录中的文件。

  • 清除旧的编译产物、交叉编译工具及工具链等目录(可选)

    1
    make dirclean

    更换架构编译前必须执行。此操作会删除 /bin/build_dir 目录的中的文件 (make clean) 以及 /staging_dir/toolchain/tmp/logs 中的文件。

  • 清除 Open­Wrt 源码以外的文件(可选)

    1
    make distclean

    除非是做开发,并打算 push 到 GitHub 这样的远程仓库,否则几乎用不到。此操作相当于 make dirclean 外加删除 /dl/feeds 目录和.config 文件。

  • 还原 Open­Wrt 源码到初始状态(可选)

    1
    git clean -xdf

    如果把源码改坏了,或者长时间没有进行编译时使用。

  • 清除临时文件

    1
    rm -rf tmp

    删除执行 make menuconfig 后产生的一些临时文件,包括一些软件包的检索信息,删除后会重新加载 package 目录下的软件包。若不删除会导致一些新加入的软件包不显示。

  • 删除编译配置文件

    1
    rm -f .config

    在不删除的情况下如果取消选择某些组件它的依赖组件不会自动取消,所以对于需要调整组件的情况下建议删除。

编译

  • 调整 Open­Wrt 系统组件

    1
    make menuconfig

    如果不打算调整组件则输入 make defconfig,它会检测编译环境并根据更新自动调整编译配置文件。

  • 预下载编译所需的软件包

    1
    make download -j8 V=s
  • 开始编译

    1
    make -j$(nproc) || make -j1 || make -j1 V=s

    多线程编译失败后自动进入单线程编译,失败则输出详细日志。

  • 编译好的固件存放在 lede/bin/targets/ 对应架构的文件下,名称为 openwrt-xxxx-xxxx-squashfs-sysupgrade.bin

进阶操作

致谢

@P3TERX,博客里的文章对我有很大帮助,本文自他的博客总结而来,亦有很大一部分文字直接复制自它的博客。他亦是上文所提到的 Github Action 云编译 OpenWrt 模板的作者。

恩山论坛,我路由相关知识的启蒙点,感谢各路大神的经验分享。

参考链接

https://github.com/coolsnowwolf/lede

https://p3terx.com/archives/openwrt-compilation-steps-and-commands.html

https://www.right.com.cn/forum/thread-344825-1-1.html

https://www.right.com.cn/forum/thread-1237348-1-1.html

https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk

https://github.com/BoringCat/luci-app-mentohust