前言
OpenWrt 是一个面向嵌入式设备的开源操作系统,主要用于路由器、网关以及其他网络设备。它提供了灵活的配置选项和广泛的软件包支持,可以根据用户的需求定制系统。在一些情况下,用户可能需要编译自己的固件以满足特定的功能需求、设备支持或性能优化。无论是出于系统的定制,还是想要使用最新的 OpenWrt 功能,编译固件都是一种强大的解决方案。
为什么需要编译 OpenWrt 固件?
- 自定义功能和包:编译 OpenWrt 允许你在固件中加入或去除特定的软件包。你可以选择支持自己设备的驱动程序、配置防火墙、安装特定的应用程序等。
- 性能优化:通过编译,你可以根据你的硬件和需求定制固件,优化内核、系统设置和驱动程序,从而提高设备的性能。
- 支持新的硬件:OpenWrt 官方支持大量的设备,但对于一些新设备或者较为冷门的设备,你可能需要自己编译固件以便添加对这些设备的支持。
- 构建更新和补丁:通过编译,你可以集成最新的代码和补丁,确保你的设备使用的是最新版本的 OpenWrt,享受更好的安全性和功能。
编译 OpenWrt 固件需要做哪些准备?
- 环境要求:
- 操作系统:通常使用 Linux 系统(如 Ubuntu)进行编译,也可以在 macOS 或 WSL(Windows 子系统 Linux)中进行。
- 依赖软件:需要安装一些基础的开发工具和库,比如 Git、GCC、Make、ncurses 等。
- 网络连接:需要下载 OpenWrt 的源代码和相关的软件包,因此需要稳定的网络连接。
- 环境要求:
- 获取 OpenWrt 源码: OpenWrt 的源代码托管在 Git 仓库中,你可以通过 Git 克隆 OpenWrt 的主仓库,或使用某些特定的分支(如 LEDE、ImmortalWrt 等)根据需要进行编译。
- 配置环境: 你需要为目标设备进行特定的配置。OpenWrt 提供了一个简单的图形化配置界面(
make menuconfig
),允许你选择目标硬件平台、所需的软件包、定制内核等。
- 配置环境: 你需要为目标设备进行特定的配置。OpenWrt 提供了一个简单的图形化配置界面(
- 开始编译: 完成配置后,你就可以启动编译过程,生成适合你设备的固件镜像。编译完成后,固件文件可以直接烧录到设备中。
- 烧录固件: 编译生成的固件可以通过多种方式烧录到设备中。常见的方式有通过 TFTP、USB、Web 界面等进行烧录。
让我们开始吧
用过大佬编译好的固件,也自己基于大佬的固件手动编译,最终还是决定用官方的源码编译,只加入自己想要的软件
相关链接:
- 大佬的源码:
Lean's LEDE
: https://github.com/coolsnowwolf/lede
Lienol's OpenWrt
: https://github.com/Lienol/openwrt
- 大佬的源码:
准备工作
环境
- 系统:Debian 11 x64位系统
- 网络:可以访问外网(国内请全局科学上网)
- 磁盘:大约有 30G 的空闲空间
- 内存:至少 4G 物理内存
- CPU:越快越好,影响编译速度
依赖
请使用Root权限执行,安装编译所需的依赖(建议Ubuntu22.03、Debian11)
1.更新系统
sudo -E apt-get -y update
2.安装依赖
sudo -E apt-get -y install rename $(curl -fsSL is.gd/cXklVO)
3.安装Clang编译器
sudo -E apt-get -y install clang
源码
1.克隆源码
# 下载源码(-b 指定分支/标签、 --single-branch 仅下载单个分支/标签、 --depth=1 只下载最新的一次提交 )
git clone -b v23.05.5 --single-branch --depth=1 https://git.openwrt.org/openwrt/openwrt.git
2.进入openwrt目录
# 进入到该目录
cd openwrt
配置
vermagic
自行编译时,会出现内核的魔法值不一样,需要完成如下修改:
获取值
获取值时,要注意后续选择平台,本文以 x64
平台为例
方式一:
执行以下脚本即可写入到 vermagic
文件中。注意: 23.05.5
为版本号
curl -s https://downloads.openwrt.org/releases/23.05.5/targets/x86/64/openwrt-23.05.5-x86-64.manifest | grep kernel | awk '{print $3}' | awk -F- '{print $3}' > vermagic
方式二:
- 打开官方对应版本的下载链接:https://downloads.openwrt.org/releases
- 点击:23.05.5 -> targets -> x86 -> 64
- 下载
Supplementary Files
中的 openwrt-23.05.5-x86-64.manifest 文件
- 下载
- 使用文本编辑器打开该文件,记录下
kernel
最后面的那串字符串
- 使用文本编辑器打开该文件,记录下
- 执行以下脚本写入到
vermagic
文件中
- 执行以下脚本写入到
# 注意:59d1431675acc6823a33c7eb2323daeb 就是上文中的字符串
echo '59d1431675acc6823a33c7eb2323daeb' > 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
修改完成后效果如下
![图片[1]-OpenWrt零基础编译教程-探索无限](https://www.kejizero.online/wp-content/uploads/2024/11/ab6e1235300f487ea79ad1443f91b92f.png)
修改时区
# 编辑配置文件
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'
修改完成后效果如下:
![图片[2]-OpenWrt零基础编译教程-探索无限](https://www.kejizero.online/wp-content/uploads/2024/11/db888fedc0a74556ab127eeee7268cd0.png)
修改默认IP
默认管理IP为 192.168.1.1
,可以根据自己的需求进行修改
# 编辑配置文件
vim package/base-files/files/bin/config_generate +165
# 修改如下内容
lan) ipad=${ipaddr:-"192.168.188.1"} ;;
![图片[3]-OpenWrt零基础编译教程-探索无限](https://www.kejizero.online/wp-content/uploads/2024/11/180bf37e65964258b7a236bedb712503.png)
安装Feeds
添加第三方软件有两种方式:
- 将软件包仓库地址写入
feeds.conf.default
文件中,可以参考相关的软件包的说明文档
- 将软件包仓库地址写入
- 使用
git clone
手动下载软件包放入到package
文件夹中,下文中使用这种方式
- 使用
不论是哪种方式加入第三方软件,都需要执行以下代码更新 feeds
包
./scripts/feeds update -a
./scripts/feeds install -a
菜单选项
执行以下命令打开菜单配置
make menuconfig
终于来到了一个图形化界面,该界面有如下操作
↑ ↓
键:上下切换
PgUp PgDn
键:上下翻页
Enter
回车键:- 进入子菜单
- 选择/确认
Y
键:选中,在< >
上进行操作,操作后变为<*>
N
键:取消选中,在<*>
上进行操作,操作后变为< >
Esc
键:连击两下,返回上层菜单,如果在主菜单则为退出配置
按照如下配置进行选择,其他未说明的不要动
- Target System -> x86
- Subtarget -> x86_64
- Target Images
- < > tar.gz
- < > ext4
- < > Build GRUB images
- (1) Seconds to wait before booting the default entry
- (256) Root filesystem partition size
- Target Images
- Base system
- < > dnsmasq
- <*> dnsmasq-full
- Base system
- LuCI
- Collections
- <*> luci
- Collections
- Modules
- Translations
- <*> Chinese Simplified
- Translations
- Modules
- Applications
- 根据自己的需要选择软件包
- Applications
- LuCI
如果不小心配错了,可以执行以下命令重新配置
#移除旧的config并删除tmp目录
rm -rf ./tmp && rm -rf .config
make menuconfig
预下载
这里会先把编译时要下载的文件下载下来(只是一部分,后面编译阶段还会下载,仍需保持网络畅通)
make download -j8 V=s
编译
接下来就要进入漫长的编译时间了,使用 -j
参数可以指定编译时使用的线程数
# 根据CPU核心数开启指定线程数执行编译
make V=s -j$(nproc)
# 如果编译过程中报错了,需要使用单线程模式,确认出错的地方,然后排查(注:有时候单线程就不报错了)
make V=s -j1
获取成果
编译完成后,镜像文件地址是:./bin/targets/x86/64/openwrt-x86-64-generic-squashfs-combined-efi.img.gz
暂无评论内容