基于 Docker 的 i.MX6ULL 嵌入式 Linux 开发环境,预装所有必需的工具链和依赖。
- ✅ Ubuntu 24.04 基础镜像
- ✅ ARM GNU Toolchain 15.2.rel1 交叉编译工具链
- ✅ 多阶段构建 优化镜像大小
- ✅ 非 root 用户 运行(安全)
- ✅ 预装所有依赖 开箱即用
我们会为正式 release 提供预构建 Docker 镜像,可以直接拉取使用。正式版本标签从 v0.1.0 开始;如果尚未发布对应标签,请使用本地构建方式。
# 拉取最新版本
docker pull ghcr.io/awesome-embedded-learning-studio/imx-forge:latest
# 启动开发环境
cd imx-forge
docker run -it --rm -v $(pwd):/workspace ghcr.io/awesome-embedded-learning-studio/imx-forge:latest使用特定版本:
docker pull ghcr.io/awesome-embedded-learning-studio/imx-forge:v0.1.0如需自定义或使用国内镜像优化版,可以本地构建:
如果你在中国大陆,建议使用国内镜像源版本:
cd docker
# 方法 1:配置 Docker 镜像加速器(推荐)
sudo mkdir -p /etc/docker
sudo cp daemon.json /etc/docker/daemon.json
sudo systemctl daemon-reload
sudo systemctl restart docker
# 方法 2:使用国内优化的 Dockerfile
DOCKER_BUILDKIT=1 sudo docker build -f Dockerfile.cn -t imx-forge:latest .cd docker
# 使用 BuildKit 构建(推荐)
DOCKER_BUILDKIT=1 docker build -t imx-forge:latest .
# 或使用传统方式
docker build -t imx-forge:latest .构建时间:约 5-10 分钟(取决于网络速度)
docker run -it --rm \
-v $(pwd)/..:/workspace \
imx-forge:latestdocker run -it --rm \
-v /path/to/imx-forge:/workspace \
-v /path/to/output:/workspace/out \
imx-forge:latestdocker run -it --rm \
--privileged \
-v /dev:/dev \
-v $(pwd)/..:/workspace \
imx-forge:latest进入容器后,可以使用以下命令:
./scripts/build_helper/build-uboot.sh # 编译 U-Boot
./scripts/build_helper/build-linux.sh # 编译 Linux 内核
./scripts/build_helper/build-busybox.sh # 编译 BusyBox
./scripts/release-all.sh # 一键构建所有组件- 最终镜像大小:约 2GB(截至文档更新时,实际大小可能存在波动)
- 构建阶段镜像:约 2.5GB(仅构建时使用)
| 工具 | 版本/说明 |
|---|---|
| ARM GNU Toolchain | 15.2.rel1 |
| build-essential | GCC, Make 等 |
| device-tree-compiler | 设备树编译器 |
| u-boot-tools | U-Boot 工具 |
| python3-pyelftools | Python ELF 工具 |
| 其他依赖 | bc, bison, flex, swig 等 |
如果你的宿主机用户 ID 不是 1000,可以自定义:
docker build \
--build-arg USER_ID=$(id -u) \
--build-arg GROUP_ID=$(id -g) \
-t imx-forge:latest \
.docker build \
--build-arg TOOLCHAIN_VERSION=15.2.rel1 \
-t imx-forge:latest \
.VERBOSE 和 Docker 的进度输出是两层不同的开关:
--build-arg VERBOSE=1:让 Dockerfile 里的wget使用详细输出--progress=plain:让 BuildKit 不使用动态刷新界面,按普通日志逐行输出
# 默认模式(显示进度条)
docker build -t imx-forge:latest .
# 详细输出模式(推荐用于调试下载问题)
docker build --progress=plain --build-arg VERBOSE=1 -t imx-forge:latest .
# 如果从项目根目录构建,请显式指定 Dockerfile 路径
docker build --progress=plain --build-arg VERBOSE=1 -f docker/Dockerfile -t imx-forge:latest .
# 国内镜像源版本
docker build --progress=plain --build-arg VERBOSE=1 -f docker/Dockerfile.cn -t imx-forge:latest .参数说明:
| 参数 | 控制对象 | 效果 |
|---|---|---|
VERBOSE=0 或未设置 |
Dockerfile 内部命令 | 使用默认下载输出 |
VERBOSE=1 |
Dockerfile 内部命令 | wget 使用详细输出 |
--progress=plain |
Docker BuildKit 输出界面 | 禁用动态刷新,按普通日志逐行输出 |
注意:如果只设置 --build-arg VERBOSE=1,BuildKit 仍可能使用动态进度界面重绘终端,看起来像日志被覆盖。调试时优先使用 --progress=plain,通常不需要禁用 BuildKit。
创建一个持久化的开发容器:
docker run -dit \
--name imx-dev \
-v $(pwd)/..:/workspace \
imx-forge:latest
docker exec -it imx-dev bash创建 docker-compose.yml:
version: '3'
services:
imx-forge:
build: .
image: imx-forge:latest
volumes:
- ..:/workspace
- ./out:/workspace/out
stdin_open: true
tty: true
privileged: true
devices:
- /dev/ttyUSB0:/dev/ttyUSB0运行:
docker-compose run imx-forgearm-none-linux-gnueabihf-gcc --version预期输出:
arm-none-linux-gnueabihf-gcc (Arm GNU Toolchain 15.2.Rel1 (Build arm-15.86)) 15.2.1 20251203
cd /workspace
./scripts/build_helper/build-uboot.shcd /workspace
./scripts/build_helper/build-linux.shcd /workspace
./scripts/build_helper/build-busybox.shA: 工具链下载需要访问 ARM 官网,可能需要配置代理:
docker build \
--build-arg http_proxy=http://proxy:port \
--build-arg https_proxy=http://proxy:port \
-t imx-forge:latest \
.A: 需要使用 --privileged 参数或将设备挂载到容器:
docker run -it --rm \
--privileged \
-v /dev:/dev \
imx-forge:latestA: 使用与宿主机相同的用户 ID 构建:
docker build \
--build-arg USER_ID=$(id -u) \
--build-arg GROUP_ID=$(id -g) \
-t imx-forge:latest \
.A: 可以配置 Docker 镜像加速器。以下是国内常用的镜像加速源:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker注意: 大部分国内镜像加速器主要针对 Docker Hub,对 ghcr.io 的加速效果有限。如果仍然较慢,建议使用本地构建方式(Dockerfile.cn)。
A: Docker 构建会占用磁盘空间,可以定期清理:
docker system prune -a- 使用卷挂载:将
out目录单独挂载,避免编译产物占用容器空间 - 定期更新:定期重新构建镜像以获取最新工具链和依赖
- CI/CD 集成:可以在 CI/CD 流水线中使用此镜像进行自动化构建
MIT License