<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/ DTD/wml_1.1.xml">

<wml>
<head>
<meta http-equiv="cache-control" content="max-age=180,private" />
</head>
<card title="LEDE源码编译教程">
<p>
作者:<a href="index.php?action=showuser&amp;userid=1&amp;hash=">admin</a><br />时间:2022-11-26 09:10<br />分类:<a href="index.php?action=list&amp;cid=3&amp;hash=">电脑技术</a><br />内容:


LEDE源码编译教程


Github：https://github.com/coolsnowwolf/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 clang cmake cpio curl device-tree-compiler flex gawk gcc-multilib g++-multilib gettext \

    
genisoimage 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 llvm lrzsz msmtp ninja-build p7zip p7zip-full patch pkgconf \

    
python3 python3-pyelftools python3-setuptools python3-pip qemu-utils rsync scons squashfs-tools subversion \

    
swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev









XML/HTML代码


    #其他  

    apt -y install rustc cargo golang clang  







3.下载源代码，更新 feeds 并选择配置




XML/HTML代码


    git clone https://github.com/coolsnowwolf/lede

    cd lede

    ./scripts/feeds update -a &amp;&amp; ./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 &amp;&amp; ./scripts/feeds install -a

    make menuconfig

    make defconfig

    make download -j8

    make -j$(($(nproc) + 1)) V=s







如果需要重新配置：


XML/HTML代码


    rm -rf ./tmp &amp;&amp; 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 &amp;&amp; ./scripts/feeds install -a

    make menuconfig

    make -j$(($(nproc) + 1)) V=s





二次编译




XML/HTML代码


    cd lede

    git pull

    ./scripts/feeds update -a &amp;&amp; ./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/Openwrt-Passwall/openwrt-passwall.git;main

    src-git passwall2       https://github.com/Openwrt-Passwall/openwrt-passwall2.git;main

    src-git passwall_packages   https://github.com/Openwrt-Passwall/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/Openwrt-Passwall/openwrt-passwall-packages.git;main

    src-git passwall https://github.com/Openwrt-Passwall/openwrt-passwall.git;main







passwall2




XML/HTML代码


    src-git passwall_packages https://github.com/Openwrt-Passwall/openwrt-passwall-packages.git;main

    src-git passwall2 https://github.com/Openwrt-Passwall/openwrt-passwall2.git;main







lede/package/base-files/files/bin/config_generate


搜索192.168.1.1，找到下面的地址，修改即可修改编译的LEDE的默认地址。


lan) ipad=${ipaddr:-&quot;192.168.1.1&quot;} ;;


LEDE根目录下.config就是编译的固件配置，备份下在编译其他修改版本，可以避免出错。


lean大的openwrt不支持在root用户环境下编译，需要输入命令禁用环境。




XML/HTML代码


    export FORCE_UNSAFE_CONFIGURE=1

    或者

    export FORCE=1

    或者在编译目录运行

    sudo make FORCE_UNSAFE_CONFIGURE=1







或者直接创建一个user密码password的用户，用此用户登陆编译（推荐）




XML/HTML代码


    sudo useradd -m -s /bin/bash user

    echo 'user:password' | sudo chpasswd









XML/HTML代码


    #赋予 sudo 权限（重新登录或重启生效）

    usermod -aG sudo user




注意：lean代码升级到最新后，科学插件SSR+中的trojan和gfwlist模式会失效，还会出现一些奇怪问题，如需老版本lede，可以git切换回去，然后进行设置插件，编译。




XML/HTML代码


    #查看分支

    git tag

    #切换到20221001分支

    git checkout 20221001







切换回最新主分支：git checkout master


在线编译网站：https://supes.top/   https://openwrt.ai/   https://op.supes.top/


第三方插件仓库：


https://github.com/liuran001/openwrt-packages


https://github.com/kenzok8/openwrt-packages


https://github.com/kenzok8/small-package


https://github.com/kiddin9/openwrt-packages


https://github.com/NueXini/NueXini_Packages


openwrt固件与插件下载（kenzo）：


https://op.dllkids.xyz/


ImmortalWrt：https://github.com/immortalwrt/immortalwrt


Download：https://downloads.immortalwrt.org/


在线编译网站：https://firmware-selector.immortalwrt.org/


精品系统：


eSir谷歌云盘：https://drive.google.com/drive/folders/1dqNUrMf9n7i3y1aSh68U5Yf44WQ3KCuh


sirpdboy固件：https://github.com/sirpdboy/openwrt


常用的 OpenWRT &amp; 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 &lt;(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 &amp;&amp; ./scripts/feeds install -a

    make menuconfig

    make -j$(($(nproc) + 1)) V=s









git clone -b &lt;branch&gt; --single-branch https://github.com/immortalwrt/immortalwrt




分支有：master openwrt-24.10  openwrt-23.05  openwrt-21.02  openwrt-18.06-k5.4  openwrt-18.06


二次编译




XML/HTML代码


    cd immortalwrt

    git pull

    ./scripts/feeds update -a &amp;&amp; ./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 (Win&shy;dows Sub&shy;sys&shy;tem for Linux) 中编译Open&shy;Wrt在执行./scripts/feeds update -a 过程中会遇到如下错误。


Build dependency: OpenWrt can only be built on a case-sensitive filesystem


# OpenWrt只能构建在区分大小写的文件系统上


导致的原因是 Win&shy;dows 文件系统对大小写不敏感。


解决方案


从 Win&shy;dows 10 in&shy;sider build 17093 版本开始，新增了一种区分文件大小写的新方法：单个目录区分大小写。它可以良好的在 WSL 中和其他 Win&shy;dows应用程序中使用。这个功能仅修改指定目录本身的属性，故不会对系统有任何的影响。


以管理员权限运行 cmd 输入下面这个命令就可以开启某个目录区分大小写。


fsutil.exe file setCaseSensitiveInfo &lt;path&gt; enable


执行成功后会反馈一条信息


需要注意的是，这个操作不会对此目录中已有的文件生效，只有新写入的文件才会继承这个属性。所以对于目录中已有的文件，需要把文件剪切到其它目录，然后再复制回来。（同盘符下的剪切不是写入，所以后面的操作是复制。）


如果不理解上面这段话的含义，直接删除此目录中所有文件，重新克隆源码，再继续操作。另外，因为编译需要大量空间，默认的C盘可能不够，最好是用lxrunoffline命令将编译的Linux系统迁移到其他分区，以免造成空间不够的情况。也可以安装wsl时候就直接安装在其他分区。教程1 教程2 教程3 教程4 教程5


ipv6 支持




XML/HTML代码


    Lean&rsquo;Openwrt

    Extra packages --&gt; ipv6helper

    NetWork --&gt; Firewall --&gt; ip6tables 下的俩个全选







原版 22.03 固件需要启用这 4 个 odhcp6c odhcpd ip6tables luci-proto-ipv6


odhcpd 可替换成 odhcpd6


具体设置参考官方说明。


更新：




XML/HTML代码


    git reset --hard commit_id     退到/进到 指定commit的sha码







经测试，版本切换到 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 &amp;&amp; ./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(&quot;%Y-%m-%d %H:%M:%S&quot;)/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





注意最新版本的Lede使用Luci2，需要使用以下命令修改默认IP




XML/HTML代码


    # 修改固件默认IP

    sed -i 's/192.168.1.1/192.168.0.111/g' package/base-files/luci2/bin/config_generate






新增软件源：（clash lucky easytier）




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





Nikki (formerly MihomoTProxy)




XML/HTML代码


    src-git nikki https://github.com/nikkinikki-org/OpenWrt-nikki.git;main 






其他待添加。 






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 。切换gn版本  gn版本历史

XML/HTML代码


    sudo apt-get install gn ninja-build  









在openwrt中安装软件出现如下提示：Multiple packages (libgcc1 and libgcc1) providing same name marked HOLD or PREFER. Using latest 还有提示libpthread , libstdcpp6的，参考下面命令


XML/HTML代码


    opkg update

    opkg install libgcc1







然后再安装软件就可以正常运行了。




2025.7更新：使用最新代码编译


1、Luci问题


Lean大佬的Luci版本较老，使用luci-theme-bootstrap直接编译会出现登录后不兼容，很多设置有问题，故需要修改feed使用最新代码。


在编译固件前修改LEDE源码中feeds.conf.default,


将第二行#src-git luci https://github.com/coolsnowwolf/luci的注释符号&quot;#&quot;删除,


再将第三行的src-git luci https://github.com/coolsnowwolf/luci的前面插入注释符号&quot;#&quot;;


也就是需要将:


XML/HTML代码


    #src-git luci https://github.com/coolsnowwolf/luci

    src-git luci https://github.com/coolsnowwolf/luci.git;openwrt-23.05

    更改为:

    src-git luci https://github.com/coolsnowwolf/luci

    #src-git luci https://github.com/coolsnowwolf/luci.git;openwrt-23.05





或者在LEDE源码路径下,使用以下命令直接更改LuCI源:


XML/HTML代码


    sed -i '/^#src-git luci https:\/\/github.com\/coolsnowwolf\/luci$/s/^#//' feeds.conf.default &amp;&amp; sed -i '/^src-git luci https:\/\/github.com\/coolsnowwolf\/luci\.git;openwrt-23\.05$/s/^/#/' feeds.conf.default





2、设置boot分区大小，去除生成固件时候错误提示


修改以下文件


XML/HTML代码


        PADDING=&quot;1&quot; SIGNATURE=&quot;$(IMG_PART_SIGNATURE)&quot; \

            $(if $(filter $(1),efi),GUID=&quot;$(IMG_PART_DISKGUID)&quot;) $(SCRIPT_DIR)/gen_image_generic.sh \

            $@ \

            $(CONFIG_TARGET_KERNEL_PARTSIZE) $@.boot \

            $(CONFIG_TARGET_ROOTFS_PARTSIZE) $(IMAGE_ROOTFS) \

            256

    endef





将256替换成1024，修改boot分区大小跳过错误提示。


2026.1.14更新：kmod编译出错




XML/HTML代码


    configure: error: *** scdoc needed for building manpages. Either install it or pass --disable-manpages




问题是系统缺少 scdoc 组件，使用 sudo apt install scdoc  命令安装即可。


Docker编译


Dockerhub：https://hub.docker.com/r/10467106/openwrtenv-sshd


在本地建立一个挂载目录，编译过程中产生的所有文件 (包括但不限于源码文件，中间文件，软件包，编译完成后的镜像文件) 都会被存放到这里：


XML/HTML代码


    mkdir ~/workspace





或者一次执行

XML/HTML代码


    mkdir -p ~/workspace &amp;&amp; chmod 777 ~/workspace







拉取本项目镜像，使用镜像建立容器：


XML/HTML代码


    docker run -itd --privileged=true --restart=always -p 2222:22 -v ~/workspace:/home/admin/workspace --name openwrtenv 10467106/openwrtenv-sshd:22.04

    简化

    docker run -itd -p 2222:22 -v ~/workspace:/home/admin/workspace --name openwrtenv 10467106/openwrtenv-sshd:22.04





ssh登陆端口2222 默认用户名admin默认密码admin


因为镜像稍微老点，可以启动后update更新一下，顺便golang clang之类自己需要的组件安装上。如果是NAS上，注意共享目录路径和权限需要修改。




其实任意一个ubuntu或者debian镜像都可以按照官方的说明编译，不过这个已经配置好了需要组件，现成的编译环境，有洁癖的可以自己使用官方镜像或者支持ssh的镜像，自己手动编译，没任何区别。


注意最新的lucky和lean的luci有兼容性问题，可以使用下面的源。




XML/HTML代码


    src-git lucky https://github.com/sirpdboy/luci-app-lucky.git




此版本完美兼容，建议使用此源。




 

</p><p>
<a href="index.php?action=login&amp;hash=">立即登陆发表评论</a><br />
</p>
<p><a href="index.php?action=list&amp;hash=">返回日志列表</a><br /><a href="index.php?action=index&amp;hash=">返回主页</a></p>
</card>
</wml>
