环境

宿主机:红米 K20 pro (12+512G)
系统:ubuntu 26
软件:Docker+ubuntu:22.04+大雕/coolsnowwolf/lede.git

结论

  • 可行,成功!
  • 耗时:1个小时50分钟 (上午10:02开始,11:52 完成)
    ( make dirclean && make -j$(nproc) V=s 开始算 )

2026-05-24T04:17:06.png

73B680BAF17B3B7A588BD4A7E1DE5EFA.gif

步骤1.创建编译镜像

docker build -t lede-builder .

cat Dockerfile

# ============================================================
# LEDE (Lean's OpenWrt) 编译环境
# 宿主机: aarch64  |  目标固件: x86_64
# ============================================================
FROM ubuntu:22.04

LABEL maintainer="lede-builder"
LABEL description="LEDE x86_64 build environment for aarch64 host"

# 避免交互式提示
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 允许 root 用户编译(绕过 autoconf/configure 的 root 检查)
ENV FORCE_UNSAFE_CONFIGURE=1

# ── Go Bootstrap 路径(解决 aarch64 宿主机编译 golang 包的问题)─
ENV GOROOT_BOOTSTRAP=/usr/local/go
ENV PATH=/usr/local/go/bin:$PATH

# ── 基础系统更新 ─────────────────────────────────────────────
RUN apt-get update -y && apt-get full-upgrade -y

# ── 安装编译依赖 ─────────────────────────────────────────────
# 注意:去除了 libc6-dev-i386 / gcc-multilib / g++-multilib
# 这三个包是 x86_64 宿主机专用的 32-bit 支持库,aarch64 上不存在
RUN apt-get install -y --no-install-recommends \
    ack \
    antlr3 \
    asciidoc \
    autoconf \
    automake \
    autopoint \
    binutils \
    bison \
    build-essential \
    bzip2 \
    ca-certificates \
    ccache \
    clang \
    cmake \
    cpio \
    curl \
    device-tree-compiler \
    flex \
    gawk \
    genisoimage \
    gettext \
    git \
    gperf \
    haveged \
    help2man \
    intltool \
    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 \
    qemu-utils \
    rsync \
    scons \
    squashfs-tools \
    subversion \
    swig \
    texinfo \
    uglifyjs \
    unzip \
    upx-ucl \
    vim \
    wget \
    xmlto \
    xxd \
    zlib1g-dev \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*

# ── 安装新版 Go(解决 aarch64 上 go-bootstrap 问题)────────────
# 系统自带的 golang-go 版本过旧(1.18),OpenWrt golang 包需要 1.20+
# 手动安装 1.22 到 /usr/local/go 并设为 bootstrap 根目录
RUN wget -q https://go.dev/dl/go1.22.3.linux-arm64.tar.gz -O /tmp/go.tar.gz \
 && rm -rf /usr/local/go \
 && tar -C /usr/local -xzf /tmp/go.tar.gz \
 && rm /tmp/go.tar.gz \
 && go version

# ── 使用 root,无需创建额外用户 ──────────────────────────────
WORKDIR /root

# ── 克隆 LEDE 源码 ───────────────────────────────────────────
RUN git clone --depth=1 https://github.com/coolsnowwolf/lede.git /root/lede

WORKDIR /root/lede

# ── 更新 feeds ───────────────────────────────────────────────
RUN ./scripts/feeds update -a \
 && ./scripts/feeds install -a

# ── 写入 x86_64 默认配置 ─────────────────────────────────────
RUN echo "CONFIG_TARGET_x86=y"                        >  .config \
 && echo "CONFIG_TARGET_x86_64=y"                     >> .config \
 && echo "CONFIG_TARGET_x86_64_DEVICE_generic=y"      >> .config \
 && make defconfig

# ── 配置 Go 外部 Bootstrap 路径(写入 .config)──────────────────
# 对应 menuconfig 中:Languages → Go → External Bootstrap Go Root Directory
RUN echo 'CONFIG_GOLANG_EXTERNAL_BOOTSTRAP_ROOT="/usr/local/go"' >> .config

# ── 预下载 dl 依赖包(可选,网络慢时建议开启)─────────────────
# RUN make download -j8 V=s

# ── 编译入口 ─────────────────────────────────────────────────
CMD ["/bin/bash"]

启动容器

docker run -it \
  -v $(pwd)/output:/root/lede/bin \
  --name lede \
  lede-builder

步骤2.进入容器后编译

## 进入容器
docker -exec -it lede /bin/bash

# 如果需要自定义配置(交互式菜单)
make menuconfig

# 下载依赖
make download -j8 V=s

# 编译(第一次推荐单线程)
make -j1 V=s

# 后续编译可多线程
make -j$(nproc) V=s
# 排查错误

make -j1 V=s 2>&1 | tee build.log | grep -E "^(make\[|ERROR|error:)"

清空编译的内容重来

# 清理所有编译产物(保留源码和配置)
make clean

# 如果要连工具链也一起清掉(完全重来,耗时最长)
make dirclean