前言
最近入手了个 R2S 的小玩具,主要想着做个网关,给家里电视盒子去去广告什么的,用了 openwrt 官方的固件,折腾的时候每次刷完都要先进行一些设置和安装都比较麻烦,索性就尝试自己编固件了~
准备环境
我这里用了 ubuntu 22.04.2 的 server 环境,由于手头没其他好的设备,就装在了 NAS 的虚拟机里面(估计单核编译可以到天荒地老~)
创建用户
装完后,不要用 root 用户编译,可能会出现一些奇奇怪怪的问题,可以新建个自己的账号(由于安装 Ubuntu 的时候,顺带一并创建了,这步就跳过了),否则按照下面的步骤进行即可:
# 创建 test 用户
adduser test
# 为 test 用户设置密码
passwd test
# 从 root 切换到 test 用户
su test
之后的所有操作都在非 root 账户下进行!
更新 Ubuntu 的环境
sudo apt update && sudo apt upgrade -y
每个终端中,首次使用 sudo 命令时,会要求你输入密码,输入回车即可!
安装编译依赖
sudo apt -y install 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 python3-setuptools
首次编译
拉取官方源
目前最新官方源 main 分支,可以直接使用如下命令:
git clone https://github.com/openwrt/openwrt.git
当然,如果想要拉取某个其他 tag,可以加上 -b
参数:
git clone -b v23.05.0-rc2 https://github.com/openwrt/openwrt.git
或者 clone
之后再切换:
# 克隆
git clone https://github.com/openwrt/openwrt.git && cd openwrt
# 查看所有标签
git tag
# 检出指定标签
git check v23.05.0-rc2
更新源并安装软件包
cd openwrt
./scripts/feeds update -a && ./scripts/feeds install -a
手动添加软件包
如果某些软件在 openwrt 官方源中没有,可以手动添加进去:
# 进入 openwrt 下的 package 目录
cd package
# 添加要的软件包
git clone xxx.git # 要下载的 git 包
更改默认 IP/时区/主机名等
虽然这些之后固件安装完成以后也可以改,但是直接编译进固件也省去了后面还要修改的麻烦!所有配置都在 config_generate 文件里面:
nano package/base-files/files/bin/config_generate
修改后,按 Ctrl+O
保存,Ctrl+X
退出。
定制固件
使用默认配置:
make defconfig
使用自定义配置:
make menuconfig
稍等片刻,会进入固件配置页面,再次可以进行固件自定义:
下载编译所需软件包
# 使用 8 线程下载
make download -j8 V=s
正式编译固件
make -j1 V=s
首次编译建议使用单线程(方便定位错误),
-j1
就是使用单线程进行编译!此时间可能非常漫长,请耐心等待😂二次及后续编译
更新本地环境
# 更新系统环境
sudo apt update && sudo apt upgrade -y
# 拉取最新源码
cd openwrt && git pull
# 更新下载安装订阅源包含的软件包
./scripts/feeds update -a && ./scripts/feeds install -a
清理旧文件
# 删除/bin和/build_dir目录中的文件
make clean
如果更换架构,例如从 x86 更换成 arm,建议直接使用
make dirclean
深度清理。make dirclean
:清理 /bin 和 /build_dir 目录的中的文件 (make clean
) 以及 /staging_dir、/toolchain、/tmp 和 /logs 中的文件。
需要重新调整组件配置的,则先删除旧配置文件:
rm -rf ./tmp && rm -rf .config
然后再执行 make menuconfig
生成新配置,以及 make download -j8 V=s
下载所需软件包。
正式编译固件
make -j$(nproc) || make -j1 || make -j1 V=s
此时编译可以使用多线程来进行了,上面命令是优先使用多线程,报错会自动使用单线程,仍然报错会单线程执行编译并输出详细日志。
最后,感谢这位大佬的文章,写的很详细了!
Comments NOTHING