編譯環境準備
環境說明本教程以烏班圖22.04作為環境
請確保編譯過程全局魔法
基礎編譯過程
設置環境變量(不知道有沒有用):
注意使用root编译会报错,可以在/etc/profile 最后添加export FORCE_UNSAFE_CONFIGURE=1,然后执行
export FORCE_UNSAFE_CONFIGURE=1
- 系統軟件包更新
sudo apt-get -y update && sudo apt-get -y upgrade
- 安裝依賴關係與編譯工具鏈
sudo apt install -y ack antlr3 aria2 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-pip libpython3-dev qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
- 下載 OpenWrt 源碼
git clone https://github.com/openwrt/openwrt.git && cd openwrt
git clone https://github.com/coolsnowwolf/lede && cd lede
# 还有个
git clone https://github.com/istoreos/istoreos
(源碼有很多,本教程以官方源碼和LEDE為例)
- 切換適合分支
openwrt-22.03 已將 iptables 移除,為避免兼容性問題,暫時切換到 openwrt-21.02分支:
git checkout openwrt-21.02
- 更新並安裝 feeds 軟件源
./scripts/feeds update -a && ./scripts/feeds install -a
(以下為校園網防檢測部署)
- 加入模塊
git clone https://github.com/Zxilly/UA2F.git package/UA2F
git clone https://github.com/CHN-beta/rkp-ipid.git package/rkp-ipid
- 配置編輯
make menuconfig
配置編譯 rdp-ipid:
- Kernel modules → Other modules → kmod-rkp-ipid
配置編譯 ua2f:
- Network → Routing and Redirection → UA2F
配置編譯 iptables 模塊(Firewall中)
選中:
- iptables-mod-filter
- iptables-mod-ipopt
- iptables-mod-u32
基本界面配置:
- LuCI → Collections → luci (lede 默認已選)
- LuCI → Modules → Translations → Chinese Simplified (zh_Hans) (lede 默認已選)
- LuCI → Modules → luci-compat
- LuCI → Applications → luci-app-ttyd(網頁終端)
- LuCI → Themes → xxxxx (根據需要自己選管理界面的主題,如果路由器儲存太小,建議就維持默認的)
其他配置:
- 添加EXT4硬盤格式支持:Kernel modules > Filesystem > kmod-fs-ext4
- 添加USB支持(如不添加可能會不響應鍵盤):Kernel modules > USB Support
網卡驅動配置:
- 經查找網卡使用的是Intel IG211-AT,走的是PCIE通道,這裡要選用e1000e
- Kernel modules > Network Devices將kmod-e1000e,kmod-igb驅動選中
無線網卡驅動:
- 內核中的無線驅動找到RTL8821AE的驅動
- Kernel modules > Wireless Drivers
作者:KANSUNG 鏈接:https://www.jianshu.com/p/5190ab903820 來源:簡書
添加其他工具(可選):
- LuCI > Applications -> luci-app-openclash
- LuCI > Applications -> luci-app-adblock
- LuCI > Applications -> luci-app-ddns-go
添加必要組件:
- Kernel modules -> Network Support -> kmod-tun (openclash TUN模式必須)
排除衝突組件:
- Base system -> dnsmasq (取消勾選,因為默認會安裝dnsmasq-full,需要排除dnsmasq避免衝突報錯)
編輯配置文件:
- 使用 vim .config,在開頭添加一行(UA2F 插件需要):
CONFIG_NETFILTER_NETLINK_GLUE_CT=y
- 編譯和配置內核
make kernel_menuconfig
make -j1 V=sc kernel_menuconfig # 日志更详细
配置路徑: Networking support → Networking options → Network packet filtering framework (Netfilter) (要先選中再進去)→ Core Netfilter Configuration →
選中以下選項:
- Netfilter NFNETLINK interface
- Netfilter LOG over NFNETLINK interface
- Netfilter connection tracking support
- Connection tracking netlink interface
- NFQUEUE and NFLOG integration with Connection Tracking
- 編譯 下載編譯工具:
make download -j$(nproc) V=s
開始編譯:
make -j$(nproc) V=s
make -j1 V=sc 2> build.log # 错误输出到日志
二次編譯需要更新源碼:
git pull
重新配置如果需要重新配置:
rm -rf ./tmp && rm -rf .config
make menuconfig
make -j$(($(nproc) + 1)) V=s # 多线程编译失败后自动进入单线程编译,失败则输出详细日志
編譯更換其它CPU架構的固件(建議操作)
清除舊的編譯產物:
make clean
在源碼有大規模更新或者內核更新後執行,以保證編譯質量。此操作會刪除/bin和/build_dir目錄中的文件。
清除舊的編譯產物、交叉編譯工具及工具鏈等目錄:
make dirclean
更換架構編譯前必須執行。此操作會刪除/bin和/build_dir目錄的中的文件(make clean)以及/staging_dir、/toolchain、/tmp和/logs中的文件。
清除 OpenWrt 源碼以外的文件(可選):
make distclean
除非是做開發,並打算 push 到 GitHub 這樣的遠程倉庫,否則幾乎用不到。此操作相當於make dirclean外加刪除/dl、/feeds目錄和.config文件。
還原 OpenWrt 源碼到初始狀態(可選):
git clean -xdf
如果把源碼改壞了,或者長時間沒有進行編譯時使用。
清除臨時文件:
rm -rf tmp
刪除執行make menuconfig後產生的一些臨時文件,包括一些軟件包的檢索信息,刪除後會重新加載package目錄下的軟件包。若不刪除會導致一些新加入的軟件包不顯示。
刪除編譯配置文件:
rm -f .config
在不刪除的情況下如果取消選擇某些組件它的依賴組件不會自動取消,所以對於需要調整組件的情況下建議刪除。
注意:所有操作不要使用root用戶
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
原文鏈接:https://blog.csdn.net/u010674953/article/details/129280724