环境
宿主机:红米 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开始算 )


步骤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 最后一次更新于2026-05-24


