OpenWrt编译固件的两三事
前言
然而,鉴于大家可能的本地编译固件需求,我提供了在WSL (Windows Subsystem Linux) 里编译固件的教程。
安装WSL参考教程
参考链接:史上最全的WSL安装教程
在WSL内使用代理教程
宿主机安装代理工具如 Clash
、V2rayN
等工具,配置好连接。
由于 Linux 子系统也是通过 Windows 访问网络,所以 Linux 子系统中的网关指向的是 Windows,DNS 服务器指向的也是 Windows,基于这两个特性,我们可以将 Windows 的 IP 读取出来。
例如,在 Ubuntu 子系统中,通过 cat /etc/resolv.conf
查看 DNS 服务器 IP。
cat /etc/resolv.conf
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.25.44.1
可以看到 DNS 服务器是 172.25.44.1
,通过环境变量 ALL_PROXY
配置代理:
export ALL_PROXY="http://172.25.44.1:7890"
7890
是 Windows 上运行的代理客户端的端口,记得要在 Windows
代理客户端上配置允许本地局域网请求。
打开你的WSL Shell 输入下方命令,配置代理端口:
# 设置host_ip
host_ip=172.25.44.1 # 记得改成自己的dns主机
# 使用Clash
export HTTP_PROXY=http://$host_ip:7890
export HTTPS_PROXY=http://$host_ip:7890
export ALL_PROXY=socks5://$host_ip:7890
# 使用v2rayN
export HTTP_PROXY=http://$host_ip:10809
export HTTPS_PROXY=http://$host_ip:10809
export ALL_PROXY=socks5://$host_ip:10808
一键配置脚本
将上面的过程写入一个 bash 脚本,可以轻松的实现一键配置代理:
#!/bin/bash
host_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
export ALL_PROXY="http://$host_ip:7890"
输入以下命令,确保代理服务器已经添加到临时环境变量中:
echo $<代理变量名> # 如HTTP_PROXY,HTTPS_PROXY,ALL_PROXY
1. 安装编译依赖
sudo apt update -y
sudo apt full-upgrade -y
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev
2. 下载源代码
git clone https://github.com/openwrt/openwrt #官方版本
git clone https://github.com/coolsnowwolf/lede #lede版本
git clone https://github.com/Lienol/openwrt #lienol版本
git clone https://github.com/immortalwrt/immortalwrt #immortalwrt版本
cd openwrt #切换到文件目录
如需指定openwrt版本,可以使用以下命令
git tag # 查看稳定版,回车键拉到最低,按Q结束!
git checkout v22.03.3 # 指定版本,红色部分位版本号
3. 添加插件或主题
打开openwrt文件夹,找到feeds.conf.default文件打开,添加到最下面!
src-git amlogic https://github.com/ophub/luci-app-amlogic # 必须添加
src-git alist https://github.com/sbwml/luci-app-alist # Alist插件
src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall.git;packages
src-git passwall_luci https://github.com/xiaorouji/openwrt-passwall.git;luci
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git argonnew https://github.com/jerrykuku/luci-theme-argon.git;main # 主题
4. 更新源码
./scripts/feeds update -a # 更新源码
./scripts/feeds install -a # 拷贝源码
5. 定制openwrt系统
make menuconfig # 打开openwrt配置面板
以下是menuconfig
页面中各选项的说明:
- Target System:选择你的设备所使用的处理器架构。
- Subtarget:根据设备的详细型号,选择相应的子目标。
- Target Profile:选择你的设备型号。这会自动设置与设备兼容的预设选项。
- Target Images:选择生成的固件类型,例如:
squashfs
、ext4
等。 - Global build settings:配置全局编译设置,例如:启用/禁用软件包的签名检查、IPv6支持等。
- Base system:选择基本系统组件,例如:网络配置、系统日志、防火墙等。
- Extra packages:选择额外的软件包,如:文件系统支持、VPN、代理等。
- Kernel modules:选择内核模块,如:支持的硬件设备、文件系统、网络协议等。
- LuCI:选择Web界面组件,包括主题、应用、协议支持等。
- Languages:选择系统支持的语言包。
- Libraries:选择编译时需要的库文件,如:加密库、数据库库等。
- Utilities:选择实用工具,如:文件管理器、终端模拟器、脚本语言支持等。
根据你的设备型号和需求进行配置,在配置过程中要注意不要选择有冲突的软件包。配置完成后,保存并退出。
Arm平台
cpu参考按需更换,或按照如下配置运行在虚拟机内
*** 必须设置项目(CPU架构,镜像文件格式)
Target System -> QEMU ARM Virtual Machine
Subtarget -> QEMU ARMv8 Virtual Machine (cortex-a53)
Target Profile -> Default
Target Images -> tar.gz
x86平台
*** 必须设置项目(CPU架构,镜像文件格式):
Target System -> x86
Subtarget -> x86_64
Target Profile -> Generic x86/64
Target Images -> tar.gz
按需配置
*** 基础依赖包,保证打出的包可以写入EMMC,可以在EMMC上在线升级,不包含具体的应用(有在线升级的需求选填)
Languages -> Perl
-> perl-http-date
-> perlbase-file
-> perlbase-getopt
-> perlbase-time
-> perlbase-unicode
-> perlbase-utf8
Utilities -> Compression -> bsdtar 或 p7zip(非官方源)、pigz
-> Disc -> blkid、fdisk、lsblk、parted
-> Filesystem -> attr 、btrfs-progs(Build with zstd support)、chattr、dosfstools、e2fsprogs、f2fs-tools、f2fsck、lsattr、mkf2fs、xfs-fsck、xfs-mkfs
-> Shells -> bash
-> gawk、getopt、losetup、tar、uuidgen
*** Wifi必选
Kernel modules -> Wireless Drivers -> kmod-cfg80211
-> kmod-mac80211
-> USB Support -> kmod-usb2
-> kmod-usb3
Network -> WirelessAPD -> hostapd-common
-> wpa-cli
-> wpad-basic
-> iw
添加应用参考(通用)
OpenWrt 编译 LuCI-> Applications 插件应用说明
*** 插件和主题,语言设置选项,根据需求设置,为了减少编译失败的概率,除了必要的晶晨插件,其他都不要安装,主题也是。可以编译成功后单独编译插件在安装。
LUCI -> 1. Collections -> luci-ssl-openssl 启用OpenSSL 防止进不去
-> 2. Modules -> Translations -> Chinese simplified 简体中文 自选
-> 3. Applications -> luci-app-amlogic 晶晨插件,必选
-> 4. Themes 尽量不要安装,不然容易后台面板进不去!
6. 开始编译固件
初次编译
make download -j8 # 下载 dl 库,编译固件 (-j 后面是线程数)
make V=s -j1 # 初次编译有debug需求,推荐线程数为1,便于快速找到错误
二次编译
cd lede
git pull
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make download -j8
make V=s -j$(nproc)
重新编译
rm -rf ./tmp && rm -rf .config #清理缓存和配置文件
make menuconfig
make V=s -j$(nproc)
编译失败,执行以下命令清除文件:
make clean # 删除编译目录/bin和/build_dir目录中的文件
make dirclean # 除了删除编译目录之外还删除编译工具目录,删除/bin /build_dir目录的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件,一般在更换CPU架构的情况下才操作。
7. 下载编译压缩包
编译完成后输出路径:bin/targets
后排提示,由于openwrt灵活度高,入门时候就容易觉得东西太多不知道用,所以其实很多东西不用选(大不了以后改),按照默认配置来即可,官方也提供默认配置,还有不懂之处可以看官方wiki.
Inference
OpenWrt 固件自编译教程:从入门到酸爽 X86安装openwrt 教你如何编译OpenWrt,定制属于自己的固件 从零开始:自己编译OpenWrt系统 openwrt编译教程及踩坑记录 新手折腾进阶篇-openwrt编译入门
Comments
Leave a comment