记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

LEDE源码编译教程

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

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):