从0开始编译基于immortalwrt的mt798x项目

文章目录

起因前段时间购买了一台小米AX3000T基于mt7981,主要是想用OpenWrt,翻了翻发现了H大的mt798x项目,

immortalwrt-mt798x基于immortalwrt项目,特点如下

  • 基于immortalwrt 21.02分支,内核版本5.4,目前仅支持mt7981/mt7986
  • 使用mtk-openwrt-feeds提供的有线驱动、hnat驱动、内核补丁及配置工具,支持所有硬件加速特性
  • mt7981/mt7986均支持两个ppe,每个ppe有32k Entry(当有线驱动使用ADMAv1时,每个PPE最大支持16k Entry)
  • 使用mtwifi原厂无线驱动(目前默认使用7.6.6.1版本),默认开启802.11k,支持warp在内的所有加速特性
  • 新开发的mtwifi-cfg无线配置工具支持openwrt的原生luci界面以及netifd-wireless标准接口。除此以外,还支持mtk原厂提供的luci-app-mtk和wifi-profile

于是就开始着手编译起来了 顺便写写过程就当记录了。

我使用的是WSL2来做编译,其安装过程就不做过多赘述了,我本次使用的是Ubuntu22.04 非root账户,安装完后启动环境,首先是安装编译所需要的依赖,参考项目的README.md 使用APT或者脚本进行配置依赖

使用apt

1
2
3
4
5
6
7
8
9
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 clang clangd cmake cpio curl device-tree-compiler ecj fastjar flex gawk gettext gcc-multilib \
g++-multilib git gperf haveged help2man intltool lib32gcc-s1 libc6-dev-i386 libelf-dev libglib2.0-dev \
libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5 libncursesw5-dev libreadline-dev \
libssl-dev libtool lld lldb lrzsz mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 \
python3 python3-pip python3-ply python3-docutils qemu-utils re2c rsync scons squashfs-tools subversion swig \
texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev

使用脚本

1
sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.eu.org/init_build_environment.sh)'

注意 因为WSL2的一些特殊性可能需要设置一些环境变量 具体可以参考https://openwrt.org/docs/guide-developer/build-system/wsl
我下面将会直接使用临时方案

全部结束后开始拉取仓库

1
git clone --depth=1 https://github.com/hanwckf/immortalwrt-mt798x.git

然后CD切换到目录下

1
cd immortalwrt-mt798x

如果你需要一些自定义仓库如 bypass、helloword等相关内容 参考下面部分,

我所使用的个性化仓库是kenzok8大佬的仓库kenzok8/small: ssr passwall bypass依赖 (github.com)

使用一键命令

1
2
3
4
5
6
7
8
sed -i '1i src-git kenzo https://github.com/kenzok8/openwrt-packages' feeds.conf.default
sed -i '2i src-git small https://github.com/kenzok8/small' feeds.conf.default
./scripts/feeds update -a && rm -rf feeds/luci/applications/luci-app-mosdns
rm -rf feeds/packages/net/{alist,adguardhome,mosdns,xray*,v2ray*,v2ray*,sing*,smartdns}
rm -rf feeds/packages/utils/v2dat
rm -rf feeds/packages/lang/golang
git clone https://github.com/kenzok8/golang feeds/packages/lang/golang
./scripts/feeds install -a

因为mt798x项目使用的immortalwrt版本过老,SS的一些依赖发生了变化会导致编译失败 所以需要修改部分内容

需要修改目录下 feeds/small/shadowsocksr-libev/Makefile 中的第29行将里面的+libopenssl-legacy 删除保存

完成后针对MT7981芯片使用

1
cp -f defconfig/mt7981-ax3000.config .config

来复制内置预设到目录下

使用

1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make menuconfig

开始自定义固件,自定义结束后使用开始编译

1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j$(nproc)

编译结束后的固件会出现在bin文件夹下找到正常刷入即可。

如果出现编译错误可以使用单线程

1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin make -j1 V=s

来一点点排错,网上相关的编译教程其实一大把,但是一些固件有一些自定义无法完全满足且有一些问题需要修改(比如mt798x项目用的immortalwrt过老导致ss不需要一些依赖但是makefile有存在这种)故写个东西记录下。