LEDE源码编译教程
Rockchip RK3568 预编译固件发布 Release 下载更新地址 (包括 H68K ):https://github.com/coolsnowwolf/lede/releases/tag/20220716
注意:
XML/HTML代码
- 尽量不要用 root 用户进行编译
- 国内用户编译前最好准备好梯子
- 默认登陆IP 192.168.1.1 密码 password
编译命令:
1.首先装好 Linux 系统,推荐 Debian 11 或 Ubuntu LTS(Linux Mint 21和LMDE 5)
2.安装编译依赖
XML/HTML代码
- 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 python2.7 python3 \
- python3-pyelftools python3-setuptools qemu-utils rsync scons squashfs-tools subversion swig texinfo \
- uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
3.下载源代码,更新 feeds 并选择配置
XML/HTML代码
- git clone https://github.com/coolsnowwolf/lede
- cd lede
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
4.下载 dl 库,编译固件 (-j 后面是线程数,第一次编译推荐用单线程)
XML/HTML代码
- make download -j8
- make V=s -j1
本套代码保证肯定可以编译成功。里面包括了 R22 所有源代码,包括 IPK 的。
5.二次编译
XML/HTML代码
- cd lede
- git pull
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make defconfig
- make download -j8
- make -j$(($(nproc) + 1)) V=s
如果需要重新配置:
XML/HTML代码
- rm -rf ./tmp && rm -rf .config
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
编译完成后输出路径:bin/targets
简单编译命令,只要默认或者修改不是很多,也基本一次成功。
首次编译
XML/HTML代码
- git clone https://github.com/coolsnowwolf/lede
- cd lede
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
二次编译
XML/HTML代码
- cd lede
- git pull
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
feeds.conf.default
XML/HTML代码
- src-git helloworld https://github.com/fw876/helloworld.git;master
- src-git passwall https://github.com/xiaorouji/openwrt-passwall.git;main
- src-git passwall2 https://github.com/xiaorouji/openwrt-passwall2.git;main
- src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall-packages.git;main
- src-git OpenClash https://github.com/vernesong/OpenClash.git;master
src-git homeproxy https://github.com/immortalwrt/homeproxy.git (不兼容lean的OP,防火墙冲突)
passwall现在分为package和luci两个分支。
XML/HTML代码
- src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall-packages.git;main
- src-git passwall https://github.com/xiaorouji/openwrt-passwall.git;main
passwall2
XML/HTML代码
- src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall-packages.git;main
- src-git passwall2 https://github.com/xiaorouji/openwrt-passwall2.git;main
lede/package/base-files/files/bin/config_generate
搜索192.168.1.1,找到下面的地址,修改即可修改编译的LEDE的默认地址。
lan) ipad=${ipaddr:-"192.168.1.1"} ;;
LEDE根目录下.config就是编译的固件配置,备份下在编译其他修改版本,可以避免出错。
lean大的openwrt不支持在root用户环境下编译,需要输入命令禁用环境。
XML/HTML代码
- export FORCE_UNSAFE_CONFIGURE=1
- 或者
- export FORCE=1
- 或者在编译目录运行
- sudo make FORCE_UNSAFE_CONFIGURE=1
注意:lean代码升级到最新后,科学插件SSR+中的trojan和gfwlist模式会失效,还会出现一些奇怪问题,如需老版本lede,可以git切换回去,然后进行设置插件,编译。
XML/HTML代码
- #查看分支
- git tag
- #切换到20221001分支
- git checkout 20221001
切换回最新主分支:git checkout master
第三方插件仓库:
openwrt固件与插件下载(kenzo):
ImmortalWrt:https://github.com/immortalwrt/immortalwrt
Download:https://downloads.immortalwrt.org/
精品系统:
sirpdboy固件:https://github.com/sirpdboy/openwrt
常用的 OpenWRT & LEDE x86_64 热门固件
XML/HTML代码
- # iStoreOS
- https://fw.koolcenter.com/iStoreOS/x86_64/
- # DHDAXCW(骷髅头)
- https://github.com/DHDAXCW/OpenWRT_x86_x64
- # SuLingGG
- https://openwrt.cc/releases/targets/x86/64/
- # coolsnowwolf
- https://github.com/coolsnowwolf/lede
- # immortalwrt
- https://github.com/immortalwrt/immortalwrt
安装编译必须组件(系统要求同LEDE)
XML/HTML代码
- 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 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 lrzsz \
- mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip python3-ply \
- python-docutils qemu-utils re2c rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
- vim wget xmlto xxd zlib1g-dev
或者一键安装脚本:
XML/HTML代码
- sudo bash -c 'bash <(curl -s https://build-scripts.immortalwrt.eu.org/init_build_environment.sh)'
首次编译
XML/HTML代码
- git clone -b master --single-branch https://github.com/immortalwrt/immortalwrt
- cd immortalwrt
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
git clone -b <branch> --single-branch https://github.com/immortalwrt/immortalwrt
分支有:master openwrt-21.02 openwrt-18.06-k5.4 openwrt-18.06
二次编译
XML/HTML代码
- cd immortalwrt
- git pull
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
最新版本的LEDE内核已经升级到了6.1,占用资源更大,如果想切换到5.x核心,以X86为例,在 lede/target/linux/x86 目录下可以看到多个内核版本,config-5.4 config-5.10 config-5.15 config-6.1 这几个就是内核版本,选择你需要的版本,编译此目录下 Makefile 文件,修改 KERNEL_PATCHVER:=5.15 即可以编译5.15内核的LEDE。简单来说 以x86为例 /target/linux/x86/Makefile 修改 KERNEL_PATCHVER:=内核版本。保存编译OK。
WSL (Windows Subsystem for Linux) 中编译OpenWrt在执行./scripts/feeds update -a 过程中会遇到如下错误。
Build dependency: OpenWrt can only be built on a case-sensitive filesystem
# OpenWrt只能构建在区分大小写的文件系统上
导致的原因是 Windows 文件系统对大小写不敏感。
从 Windows 10 insider build 17093 版本开始,新增了一种区分文件大小写的新方法:单个目录区分大小写。它可以良好的在 WSL 中和其他 Windows应用程序中使用。这个功能仅修改指定目录本身的属性,故不会对系统有任何的影响。
以管理员权限运行 cmd 输入下面这个命令就可以开启某个目录区分大小写。
fsutil.exe file setCaseSensitiveInfo <path> enable
执行成功后会反馈一条信息
需要注意的是,这个操作不会对此目录中已有的文件生效,只有新写入的文件才会继承这个属性。所以对于目录中已有的文件,需要把文件剪切到其它目录,然后再复制回来。(同盘符下的剪切不是写入,所以后面的操作是复制。)
如果不理解上面这段话的含义,直接删除此目录中所有文件,重新克隆源码,再继续操作。另外,因为编译需要大量空间,默认的C盘可能不够,最好是用lxrunoffline命令将编译的Linux系统迁移到其他分区,以免造成空间不够的情况。也可以安装wsl时候就直接安装在其他分区。教程1 教程2 教程3 教程4 教程5
ipv6 支持
XML/HTML代码
- Lean’Openwrt
- Extra packages --> ipv6helper
- NetWork --> Firewall --> ip6tables 下的俩个全选
原版 22.03 固件需要启用这 4 个 odhcp6c odhcpd ip6tables luci-proto-ipv6
odhcpd 可替换成 odhcpd6
具体设置参考官方说明。
更新:
经测试,版本切换到 R23.7.7 版本,一切正常
XML/HTML代码
- git clone https://github.com/coolsnowwolf/lede.git
- cd lede
- git reset --hard b201c29fa2749a6265ebf0b80ac3a94ad34ba6e4
- export FORCE_UNSAFE_CONFIGURE=1
- ./scripts/feeds update -a && ./scripts/feeds install -a
- make menuconfig
- make -j$(($(nproc) + 1)) V=s
feeds.conf.default
XML/HTML代码
- src-git helloworld https://github.com/fw876/helloworld.git;master
- src-git passwall https://github.com/xiaorouji/openwrt-passwall.git;main
- src-git passwall_packages https://github.com/xiaorouji/openwrt-passwall-packages.git;main
- src-git OpenClash https://github.com/vernesong/OpenClash.git;master
经过上面编译的科学插件全都正常,后面版本会出现科学问题,比如SSR+中的trojan不能正常使用,或者网页打不开等。在旁路由下面出问题比较多,建议 R23.7.7 或者更老版本系统可能更好点,插件可以正常更新。
2023.12 ssr+编译出现 libopenssl-legacy 找不到的错误提示,可以通过以下命令屏蔽
XML/HTML代码
- sed -i 's/ +libopenssl-legacy//g' feeds/helloworld/shadowsocksr-libev/Makefile
再进行编译即可,libopenssl-legacy是openwrt 23 with openssl 3.0 用的,可以屏蔽不用。
Github云编译:https://github.com/haiibo/OpenWrt
可以直接下载也可以fork自己Github账号修改后定制自己的OP固件。
修改openclash源代码的配置文件
XML/HTML代码
- option github_address_mod '0'
- 改成
- option github_address_mod 'https://mirror.ghproxy.com/'
可以直接更新clash核心程序,方便一些。也可以到openclash的复写设置,Github 地址修改输入自定义地址:https://mirror.ghproxy.com/ 保存,就可以在线0更新程序。
2024.3.3编译原版代码出错:net/netfilter/xt_flowoffload.o 是内核问题,从5.15到最新的6.6都有问题,使用5.10内核编译通过。正在编译过程中,发现 coolsnowwolf 大佬刚刚修复,无用的研究和知识又多了一点。
附快速修改命令:
XML/HTML代码
- # 1-设置默认主题(netgear)
- sed -i 's/bootstrap/netgear/g' ./feeds/luci/collections/luci/Makefile
- # 2-设置管理地址(192.168.0.111)
- sed -i 's/192.168.1.1/192.168.0.111/g' package/base-files/files/bin/config_generate
- # 3-编译内核版本(6.6)
- sed -i 's/KERNEL_PATCHVER:=6.1/KERNEL_PATCHVER:=6.6/g' ./target/linux/x86/Makefile
- # 4-设置密码为空
- sed -i '/CYXluq4wUazHjmCDBCqXF/d' package/lean/default-settings/files/zzz-default-settings
- # 5-修改时间格式
- sed -i 's/os.date()/os.date("%Y-%m-%d %H:%M:%S")/g' package/lean/autocore/files/*/index.htm
- # 6-添加固件日期
- sed -i 's/IMG_PREFIX:=/IMG_PREFIX:=$(BUILD_DATE_PREFIX)-/g' ./include/image.mk
- sed -i '/DTS_DIR:=$(LINUX_DIR)/a\BUILD_DATE_PREFIX := $(shell date +'%F')' ./include/image.mk
- # 7-修正硬件信息
- sed -i 's/${g}.*/${a}${b}${c}${d}${e}${f}${hydrid}/g' package/lean/autocore/files/x86/autocore
- # 8-增固件连接数(最大165535)
- sed -i '/customized in this file/a net.netfilter.nf_conntrack_max=165535' package/base-files/files/etc/sysctl.conf
XML/HTML代码
- # 9-TTYD终端无需输入密码直接登录
- sed -i '/\/bin\/login -f root/!s|/bin/login|/bin/login -f root|' feeds/packages/utils/ttyd/files/ttyd.config
XML/HTML代码
src-git mihomo https://github.com/morytyann/OpenWrt-mihomo.git;main- src-git lucky https://github.com/gdy666/luci-app-lucky.git
src-git easytier https://github.com/EasyTier/luci-app-easytier.git
增加easytier插件
XML/HTML代码
- git clone https://github.com/EasyTier/luci-app-easytier.git package/easytier
增加natmap插件(nat打洞)
XML/HTML代码
- git clone https://github.com/blueberry-pie-11/luci-app-natmap package/natmap
2024.8.29编译原版代码出错,本地和云编译都一样问题,经过检查是 SSR+ 源码 feeds/helloworld/gn/Makefile 中PKG_SOURCE从2024-05-13更新到2024-08-13造成的,将三行源代码改成2024-05-13的版本就可以了。据说安装clang,把gcc升级到12或13版本也可以解决,本人未测试,直接apt安装的gcc,版本为 10.2.1 。
在openwrt中安装软件出现如下提示:Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest 还有提示libpthread , libstdcpp6的,参考下面命令
XML/HTML代码
- opkg update
- opkg install libgcc1
然后再安装软件就可以正常运行了。