编辑
2024-08-16
Openwrt
0
请注意,本文编写于 66 天前,最后修改于 13 天前,其中某些信息可能已经过时。

目录

准备工作
环境
依赖
源码
配置
vermagic
获取值
修改内核配置文件
时区
默认IP
软件包
菜单配置
预下载
编译
获取成果

Screenshot 2024-08-16 at 15.44.21.png

更新至官方 23.05.5 版本、arm 架构编译为例,若为其他平台(x86、树莓派等其他架构)则下文中获取内核的魔法值、菜单配置需自行更改

准备工作

环境

  • 系统:Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-45-generic x86_64)
  • 网络:科学上网
  • 磁盘:大约有 70G 的空闲空间
  • 内存:至少 4G 物理内存
  • CPU:越快越好,影响编译速度

依赖

以 root 用户执行以下命令或者有 root 权限的用户运行以下命令

Debian / Ubuntu / Mint

Modernized set for Ubuntu 24.04 that has Python 3.12 without python3-distutils: (OpenWrt main/master in Apr 2024)

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

源码

以下命令以普通用户执行,不要用 root

先进入自己的工作目录,例如我的是~/Downloads

cd Downloads

下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 )

git clone -b v23.05.5 --single-branch --depth=1 https://github.com/openwrt/openwrt.git

进入到该目录

cd openwrt

配置

vermagic

编译时,一定会遇到内核的魔法值不一样,需要完成如下修改:

获取值

获取值时,要注意后续选择平台,本文以 arm 平台为例

方式一:

执行以下脚本即可写入到 vermagic 文件中。注意: 23.05.5 为版本号

curl -s https://downloads.openwrt.org/releases/23.05.5/targets/ipq40xx/generic/openwrt-23.05.5-ipq40xx-generic.manifest | grep kernel | awk '{print $3}' | awk -F- '{print $3}' > vermagic

方式二:

  1. 打开官方对应版本的下载链接:https://downloads.openwrt.org/releases
  2. 点击:23.05.5 -> targets -> ipq40xx -> generic 页面最底下
  3. 下载 Supplementary Files 中的 openwrt-23.05.5-ipq40xx-generic.manifest 文件
  4. 使用文本编辑器打开该文件,记录下 kernel 最后面的字符串(不包含版本号“5.15.167-1-”)
  5. 执行以下脚本写入到 vermagic 文件中
echo '8f9ae65a21e1c33e542689b57c4d70f0' > vermagic

修改内核配置文件

编辑配置文件

vim include/kernel-defaults.mk +121

找到这一行,然后注释掉!

# grep '=[ym]' $(LINUX_DIR)/.config.set | LC_ALL=C sort | $(MKHASH) md5 > $(LINUX_DIR)/.vermagic

再在下一行添加如下内容

cp $(TOPDIR)/vermagic $(LINUX_DIR)/.vermagic

时区

编辑配置文件

vim package/base-files/files/bin/config_generate +315

修改时区为 CST-8

set system.@system[-1].timezone='CST-8'

再在下一行添加如下内容

set system.@system[-1].zonename='Asia/Shanghai'

默认IP

默认管理IP为 192.168.1.1 ,可以根据自己的需求进行修改

编辑配置文件

vim package/base-files/files/bin/config_generate +165

修改如下内容

lan) ipad=${ipaddr:-"192.168.50.1"} ;;

软件包

添加第三方软件有两种方式:

  1. 将软件包仓库地址写入 feeds.conf.default 文件中,可以参考 kenzok8 的软件包的说明文档
  2. 使用 git clone 手动下载软件包放入到 package 文件夹中(本人使用这种方式),添加 nft-fullcone 软件包
git clone https://github.com/fullcone-nat-nftables/nft-fullcone package/nft-fullcone
  1. 不论是哪种方式加入第三方软件,都需要执行以下代码更新 feeds 包
./scripts/feeds update -a ./scripts/feeds install -a

菜单配置

执行以下命令打开菜单配置

make menuconfig

终于来到了一个图形化界面,该界面有如下操作

提示

  • 键:上下切换
  • PgUp PgDn 键:上下翻页
  • Enter 回车键: -进入子菜单 -选择/确认
  • Sapce 空格键:在 < > 上进行操作,按一次变为 <*>,按两次变为 < M >
  • Y 键:选中,在 < > 上进行操作,操作后变为 <*>
  • N 键:取消选中,在 <*> 上进行操作,操作后变为 < >
  • Esc 键:连击两下,返回上层菜单,如果在主菜单则为退出配置

配置根据自己的需要进行选择

  • Target System -> Qualcomm Atheros IPQ40XX

  • Subtarget -> generic

  • Target Profile -> Linksys WHW03 V2

  • [*] Package the OpenWrt-based Toolchain

  • Base system --->

    < > dnsmasq

    <*> dnsmasq-full

  • Kernel modules ---> Netfilter Extensions --->

    <M> kmod-nft-fullcone

    {M} kmod-nft-compat

  • LuCI ---> Collections --->

    <*> luci

  • LuCI ---> Collections ---> Modules --->

    <*> luci-base

  • LuCI ---> Collections ---> Modules ---> Translations --->

    <*> Chinese Simplified

如果不小心配错了,可以执行以下命令重新配置

rm -rf ./tmp && rm -rf .config make menuconfig

预下载

先把编译时需要的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通)

make download -j$(nproc)

编译

接下来就要进入漫长的编译时间了,使用 -j 参数可以指定编译时使用的线程数

亲测Thinkpad X1 Carbon i5 线程全开需要接近1小时完成

根据CPU核心数开启指定线程数执行编译

make V=s -j$(nproc)

如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查(注:有时候单线程就不报错了)

make V=s -j1

获取成果

编译完成后,文件所在位置是: ~/Downloads/openwrt/bin/targets/ipq40xx/generic/

本文作者:Jackie.H

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!