OpenWrt零基础编译教程

OpenWrt零基础编译教程

前言

OpenWrt 是一个面向嵌入式设备的开源操作系统,主要用于路由器、网关以及其他网络设备。它提供了灵活的配置选项和广泛的软件包支持,可以根据用户的需求定制系统。在一些情况下,用户可能需要编译自己的固件以满足特定的功能需求、设备支持或性能优化。无论是出于系统的定制,还是想要使用最新的 OpenWrt 功能,编译固件都是一种强大的解决方案。

为什么需要编译 OpenWrt 固件?

    1. 自定义功能和包:编译 OpenWrt 允许你在固件中加入或去除特定的软件包。你可以选择支持自己设备的驱动程序、配置防火墙、安装特定的应用程序等。

    1. 性能优化:通过编译,你可以根据你的硬件和需求定制固件,优化内核、系统设置和驱动程序,从而提高设备的性能。

    1. 支持新的硬件:OpenWrt 官方支持大量的设备,但对于一些新设备或者较为冷门的设备,你可能需要自己编译固件以便添加对这些设备的支持。

    1. 构建更新和补丁:通过编译,你可以集成最新的代码和补丁,确保你的设备使用的是最新版本的 OpenWrt,享受更好的安全性和功能。

编译 OpenWrt 固件需要做哪些准备?

    1. 环境要求

        • 操作系统:通常使用 Linux 系统(如 Ubuntu)进行编译,也可以在 macOS 或 WSL(Windows 子系统 Linux)中进行。

        • 依赖软件:需要安装一些基础的开发工具和库,比如 Git、GCC、Make、ncurses 等。

        • 网络连接:需要下载 OpenWrt 的源代码和相关的软件包,因此需要稳定的网络连接。

    1. 获取 OpenWrt 源码: OpenWrt 的源代码托管在 Git 仓库中,你可以通过 Git 克隆 OpenWrt 的主仓库,或使用某些特定的分支(如 LEDE、ImmortalWrt 等)根据需要进行编译。

    1. 配置环境: 你需要为目标设备进行特定的配置。OpenWrt 提供了一个简单的图形化配置界面(make menuconfig),允许你选择目标硬件平台、所需的软件包、定制内核等。

    1. 开始编译: 完成配置后,你就可以启动编译过程,生成适合你设备的固件镜像。编译完成后,固件文件可以直接烧录到设备中。

    1. 烧录固件: 编译生成的固件可以通过多种方式烧录到设备中。常见的方式有通过 TFTP、USB、Web 界面等进行烧录。

让我们开始吧

用过大佬编译好的固件,也自己基于大佬的固件手动编译,最终还是决定用官方的源码编译,只加入自己想要的软件

相关链接:

准备工作

环境

    • 系统: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

方式二:

    1. 打开官方对应版本的下载链接:https://downloads.openwrt.org/releases

    1. 点击:23.05.5 -> targets -> x86 -> 64

    1. 下载 Supplementary Files 中的 openwrt-23.05.5-x86-64.manifest 文件

    1. 使用文本编辑器打开该文件,记录下 kernel 最后面的那串字符串

    1. 执行以下脚本写入到 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零基础编译教程-探索无限

修改时区

# 编辑配置文件
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零基础编译教程-探索无限

修改默认IP

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

# 编辑配置文件
vim package/base-files/files/bin/config_generate +165
# 修改如下内容
lan) ipad=${ipaddr:-"192.168.188.1"} ;;

图片[3]-OpenWrt零基础编译教程-探索无限

安装Feeds

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

    1. 将软件包仓库地址写入 feeds.conf.default 文件中,可以参考相关的软件包的说明文档

    1. 使用 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

    • Base system
        • < > dnsmasq

        • <*> dnsmasq-full

    • LuCI
        • Collections
            • <*> luci

        • Modules
            • Translations
                • <*> Chinese Simplified

        • Applications
            • 根据自己的需要选择软件包

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

#移除旧的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

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容