本文编写于 283 天前,最后修改于 25 天前,其中某些信息可能已经过时。
前言
恩山论坛上有很多用户编译好的现成固件,自己编译固件最大的优势是可以根据需求更好的自定义,建议没有特别需求的用户还是直接选用现成的固件即可。编译固件也是一种乐趣,整个过程大约1-3小时左右,需要耐心等待。
前期准备
1.Debian 11 或者 Ubuntu LTS。(其他linxu理论上也能跑起来)
2.黑魔法,全局那种(必须)
开始手搓
1.配置linxu环境
# 升级
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 libfuse-dev libglib2.0-dev libgmp3-dev \
libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libpython3-dev libreadline-dev \
libssl-dev libtool lrzsz mkisofs msmtp ninja-build p7zip p7zip-full patch pkgconf python3 \
python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
# 清理
sudo apt autoremove --purge
sudo apt clean
2.拉取Lean大佬的LEDE分支(有做本土化,更适合国内宝宝的体质)
git clone https://github.com/coolsnowwolf/lede
cd lede
如有报错,调整你的黑魔法并重试,直到没有报错为止,下同,不再复述
3.添加软件源,L大源码里默认有四个软件源里面包含了大部分常用插件,如果要添加其他没有的插件(黑魔法书等)则需要自行添加软件源至 feeds.conf.default 文件,当然也可以单独添加某个插件
vim feeds.conf.default
# 添加软件源(打开下方仓库链接可以查看包含的插件列表,一般选前两个源就行)
src-git kenzo https://github.com/kenzok8/openwrt-packages
src-git small https://github.com/kenzok8/small
src-git haibo https://github.com/haiibo/openwrt-packages
src-git liuran001 https://github.com/liuran001/openwrt-packages
# 单独添加(在更新并安装插件之前执行)
## 插件
git clone https://github.com/esirplayground/luci-app-poweroff.git package/luci-app-poweroff
4.更新并安装插件
./scripts/feeds clean
./scripts/feeds update -a
./scripts/feeds install -a
5.自定义配置
------
设置默认lan口ip
位置:/package/lean/default-settings/files/zzz-default-settings
在exit 0之前加入以下内容:
#设置默认IP及网关
uci set network.lan.proto='static'
uci set network.lan.ipaddr='192.168.10.2'
uci set network.lan.netmask='255.255.255.0'
uci set network.lan.gateway='192.168.10.1'
uci set network.lan.dns='114.114.114.114 8.8.8.8'
uci commit network
------
设置自定义防火墙
位置:/package/lean/default-settings/files/zzz-default-settings
在exit 0之前加入以下内容:
#设置自定义防火墙
echo "iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53" >> /etc/firewall.user
echo "iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53" >> /etc/firewall.user
echo "iptables -I zone_lan_forward -t filter -m conntrack --ctstate DNAT -j ACCEPT" >> /etc/firewall.user
------
设置自定义版本号
位置:/package/lean/default-settings/files/zzz-default-settings
在exit 0之前加入以下内容:
#自定义版本号
sed -i '/DISTRIB_REVISION/d' /etc/openwrt_release
echo "DISTRIB_REVISION='Super-S-极简-R$(TZ=UTC-8 date +%Y%m%d) by 塞猫胡德'" >> /etc/openwrt_release
------
设置编译输出文件名
位置:/lede/include/image.mk
把$(shell date +"%Y%m%d")-加入40行等号以后。编译后得到的文件有年份和日期。
IMG_PREFIX:=$(shell date +"%Y%m%d")-$(VERSION_DIST_SANITIZED)-$(IMG_PREFIX_VERNUM)$(IMG_PREFIX_VERCODE)$(IMG_PREFIX_EXTRA)$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET))
------
取消默认主题
位置:/feeds/luci/collections/luci/Makefile
删除+luci-theme-bootstrap
6.修改编译设置(含插件选择)
执行
make menuconfig
命令进入编译菜单
------
# 选择 CPU 类型
Target System (x86) --> # 软路由选择 x86,硬路由根据型号厂家自行选择
Subtarget (x86_64) --> # CPU 子选项
Target Profile (Generic x86/64) --> # 厂家具体型号
# 设置镜像编译的格式(squashfs,ext4)
Target Images --> # 默认 squashfs
# 添加较多插件时,为了避免空间不足,建议修改下面两项默认大小(x86/64)
Target Images --> (16) Kernel partition size (in MB) # 默认是16,建议修改为256
Target Images --> (400) Root filesystem partition size (in MB) # 默认是400,建议修改为1024
# 开启 IPv6 支持
Extra packages --> ipv6helper(选定这个后,下面几项会自动选择)
Network --> odhcp6c
Network --> odhcpd-ipv6only
LuCI --> Protocols --> luci-proto-ipv6
LuCI --> Protocols --> luci-proto-ppp
# 开启适用于 VMware 的 VMware Tools
Utilities --> open-vm-tools
Utilities --> open-vm-tools-fuse
# 选择插件
LuCI --> Applications # 根据需要选择,* 代表编入固件,M 表示编译成模块或者IPK包,为空表示不编译
# 选择主题
LuCI --> Themes # 选择喜欢的主题,可以选多个
# 其他选项一般不需要调整,如感兴趣可以自行了解
插件中文说明对照表:https://www.right.com.cn/forum/thread-3682029-1-1.html
之后一路Exit,提示保存,选择yes,回到命令行。
7.开始编译
编译分两种情况,首次编译及二次编译:
7.1首次编译
# 预下载编译所需的软件包
make download -j8
# 检查文件完整性
find dl -size -1024c -exec ls -l {} \;
# 检查文件完整性命令可以列出下载不完整的文件,小于1k的文件属于下载不完整,如果存在则用下面的命令删除,然后重新下载编译所需的软件包,再次检查
# 确认所有文件完整可大大提高编译成功率,避免浪费时间
find dl -size -1024c -exec rm -f {} \;
# 编译固件(-j 后面是线程数,首次编译推荐用单线程)
make V=s -j1
7.2二次编译
cd lede
git pull #可选,重新pullL大源码
./scripts/feeds update -a #可选,更新插件源码
./scripts/feeds install -a #可选,写入插件源码
make clean #可选,源码有大规模更新或者内核更新后执行,以保证编译质量,此操作会删除 /bin 和 /build_dir 目录中的文件
make dirclean #可选,更换架构编译前必须执行
rm -rf ./tmp && rm -rf .config #可选,清除临时文件和编译配置文件
make menuconfig #可选,配置编译设置
make -j$(nproc) #必选,编译开始
常见问题QA:
------
源码大幅修改后无法pull
git reset --hard #放弃所有本地修改
git pull #重新pull源码