Docker 编译环境¶
Ubuntu 20.04 原生编译是本手册的基础流程。Docker 适合需要隔离依赖、在其他 Linux 发行版上复现 Ubuntu 20.04 环境,或同时维护多套编译环境的场景。
Docker 只承载编译工具。U-Boot、Linux、Buildroot 和应用源码仍保存在主机的 ~/v3s-workspace 中,容器删除后源码和编译产物不会丢失。
准备文件¶
从资料包取得:
02-开发环境/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
07-Docker/strongpi-v3s-docker.tar.gz
将这两个归档复制到 ~/v3s-workspace,再解压并放置工具链:
cd ~/v3s-workspace
tar -xzf strongpi-v3s-docker.tar.gz
cp gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz \
strongpi-v3s-docker/toolchains/
工作目录应保持以下关系:
~/v3s-workspace/
├── uboot/
├── kernel/
├── buildroot-2023.02.3/
├── projects/
├── strongpi-v3s-support/
└── strongpi-v3s-docker/
安装 Docker¶
Ubuntu 可安装发行版提供的 Docker:
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
默认使用 sudo docker。需要以普通用户运行时,可将当前用户加入 docker 组,重新登录后生效:
sudo usermod -aG docker "$USER"
docker 组具有管理主机容器的权限,只应加入可信用户。
构建镜像¶
cd ~/v3s-workspace/strongpi-v3s-docker
sudo bash scripts/build-image.sh
生成的本地镜像名称为:
v3s-build:ubuntu20.04
进入编译环境¶
cd ~/v3s-workspace/strongpi-v3s-docker
sudo bash scripts/run-container.sh
脚本使用发起 sudo 的宿主用户 UID/GID 运行编译命令,写回源码目录的产物仍归该用户所有。
主机目录映射到容器 /workspace:
| 主机目录 | 容器目录 |
|---|---|
~/v3s-workspace/uboot |
/workspace/uboot |
~/v3s-workspace/kernel |
/workspace/kernel |
~/v3s-workspace/buildroot-2023.02.3 |
/workspace/buildroot-2023.02.3 |
~/v3s-workspace/projects |
/workspace/projects |
~/v3s-workspace/strongpi-v3s-support |
/workspace/strongpi-v3s-support |
容器内的编译命令与 Ubuntu 20.04 原生章节相同,只需把 ~/v3s-workspace 替换为 /workspace。例如:
cd /workspace/kernel
make strongpi_nand_defconfig
make -j"$(nproc)" zImage dtbs
Buildroot 使用外部板级支持目录:
cd /workspace/buildroot-2023.02.3
make BR2_EXTERNAL=/workspace/strongpi-v3s-support \
BR2_DEFCONFIG=/workspace/strongpi-v3s-support/configs/strongpi_v3s_defconfig \
defconfig
make
执行单条命令¶
脚本也可以直接运行非交互命令:
sudo bash scripts/run-container.sh bash -lc \
'cd /workspace/uboot && make -j"$(nproc)"'
TF 卡分区、loop 挂载、dd 写盘和 NAND 烧录涉及主机设备,仍应在主机执行,不应在普通编译容器中操作。