生成一个干净的 Dockerfile,只包含你所需的必要包,专门用于 QEMU PowerPC e500 + uC/OS-III + TCG 插件开发。
首先: 生成的 Dockerfile
dockerfile
# ============================================
# 开发环境:QEMU PowerPC e500 + uC/OS-III + TCG 插件
# 基础镜像:Ubuntu 22.04 (Jammy)
# ============================================
FROM ubuntu:22.04
# 设置非交互式安装,避免时区等配置弹窗
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 设置工作目录
WORKDIR /workspace
# 更新源并安装必要包
RUN apt-get update && apt-get install -y \
# ========== 基础系统 ==========
ca-certificates \
curl \
git \
openssh-server \
net-tools \
vim \
wget \
sudo \
# ========== PowerPC 交叉编译工具链 ==========
binutils-powerpc-linux-gnu \
gcc-powerpc-linux-gnu \
gcc-11-multilib-powerpc-linux-gnu \
gdb-multiarch \
# ========== QEMU 编译依赖 ==========
build-essential \
make \
cmake \
ninja-build \
bison \
flex \
libglib2.0-dev \
libpixman-1-dev \
libssl-dev \
libcapstone-dev \
libelf-dev \
libslirp-dev \
python3 \
python3-dev \
python3-pip \
python3-setuptools \
python3-wheel \
pkg-config \
meson \
swig \
# ========== 调试工具 ==========
gdb \
strace \
bc \
# ========== TCL 库(QEMU 测试脚本用)==========
tcllib \
tdom \
# ========== QEMU 模拟硬件支持 ==========
libftdi1-2 \
libflashrom1 \
# ========== 清理缓存,减小镜像体积 ==========
&& rm -rf /var/lib/apt/lists/* \
&& apt-get clean
# 可选:如果你想使用系统自带的 QEMU(而不是源码编译)
# RUN apt-get update && apt-get install -y qemu-system-ppc && rm -rf /var/lib/apt/lists/*
# ========== 配置 SSH 服务 ==========
RUN mkdir /var/run/sshd \
&& echo 'root:root' | chpasswd \
&& sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
&& sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
# ========== 创建开发用户(可选)==========
# 取消注释以下行来创建一个普通用户(推荐)
# ARG USERNAME=developer
# ARG USER_UID=1000
# ARG USER_GID=1000
# RUN groupadd --gid $USER_GID $USERNAME \
# && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
# && echo "$USERNAME:devpassword" | chpasswd \
# && echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
# USER $USERNAME
# ========== 设置环境变量 ==========
ENV PATH="/workspace/qemu-build/bin:${PATH}"
# ========== 暴露 SSH 端口 ==========
EXPOSE 22
# ========== 启动 SSH 服务并保持容器运行 ==========
CMD ["/usr/sbin/sshd", "-D"]
二、构建和使用方法
1. 构建镜像
bash
# 在 Dockerfile 所在目录执行
docker build -t ucover-dev:latest .
2. 运行容器
bash
# 运行容器并映射 SSH 端口
docker run -d \
--name ucover-dev \
-p 2222:22 \
-v /path/to/your/code:/workspace/code \
ucover-dev:latest
三、自动一键安装的脚本
#!/bin/bash
# 配置参数
CONTAINER_NAME=${1:-"my-ubuntu-container"} # 第一个参数为容器名,默认为 my-ubuntu-container
# 检查容器是否存在
if ! docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "错误:容器 $CONTAINER_NAME 不存在"
echo "可用的容器:"
docker ps -a --format 'table {{.Names}}\t{{.Status}}'
exit 1
fi
# 检查容器是否运行
if ! docker ps --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
echo "容器 $CONTAINER_NAME 未运行,正在启动..."
docker start $CONTAINER_NAME
sleep 2
fi
echo "=== 开始批量安装开发工具到容器: $CONTAINER_NAME ==="
# 批量安装函数
install_packages() {
docker exec $CONTAINER_NAME bash -c "
echo '--- 更新软件源 ---' && \
apt-get update && \
echo '--- 安装开发工具 ---' && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
ca-certificates curl git openssh-server net-tools vim wget sudo \
binutils-powerpc-linux-gnu gcc-powerpc-linux-gnu gcc-11-multilib-powerpc-linux-gnu gdb-multiarch \
build-essential make cmake ninja-build bison flex \
libglib2.0-dev libpixman-1-dev libssl-dev libcapstone-dev libelf-dev libslirp-dev \
python3 python3-dev python3-pip pkg-config meson swig \
gdb strace bc tcllib tdom libftdi1-dev libflashrom-dev && \
echo '--- 清理缓存 ---' && \
rm -rf /var/lib/apt/lists/* && \
apt-get clean && \
echo '--- 安装完成 ---'
"
}
# 配置 SSH
configure_ssh() {
docker exec $CONTAINER_NAME bash -c "
echo '--- 配置 SSH ---' && \
mkdir -p /var/run/sshd && \
echo 'root:root' | chpasswd && \
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config
"
}
# 安装 Python 包
install_python_packages() {
docker exec $CONTAINER_NAME pip3 install --no-cache-dir numpy matplotlib jupyter
}
# 设置环境变量
setup_environment() {
docker exec $CONTAINER_NAME bash -c "
echo '--- 设置环境变量 ---' && \
grep -qxF 'export PATH=/workspace/qemu-build/bin:\$PATH' /root/.bashrc || \
echo 'export PATH=/workspace/qemu-build/bin:\$PATH' >> /root/.bashrc && \
grep -qxF 'export CROSS_COMPILE=powerpc-linux-gnu-' /root/.bashrc || \
echo 'export CROSS_COMPILE=powerpc-linux-gnu-' >> /root/.bashrc && \
grep -qxF 'export ARCH=powerpc' /root/.bashrc || \
echo 'export ARCH=powerpc' >> /root/.bashrc
"
}
# 验证安装
verify_installation() {
echo "=== 验证安装 ==="
docker exec $CONTAINER_NAME bash -c "
echo 'GCC 版本:' && powerpc-linux-gnu-gcc --version | head -1
echo ''
echo 'Python 版本:' && python3 --version
echo ''
echo 'QEMU 工具链:' && which powerpc-linux-gnu-gcc
"
}
# 执行安装
install_packages
configure_ssh
install_python_packages
setup_environment
verify_installation
echo "=== 所有工具安装完成!==="
echo "如需 SSH 连接到容器:ssh root@localhost -p 2222(需要先映射端口)"
echo "进入容器:docker exec -it $CONTAINER_NAME bash"
.
四、VSCode 连接
在 VSCode 中使用 Remote-SSH 连接:
text
ssh root@localhost -p 2222
# 密码: root
镜像体积优化说明
| 优化措施 | 效果 |
|---|---|
| 合并 RUN 命令 | 减少镜像层数 |
| 删除 apt 缓存 | 节省约 100-200MB |
| 不安装推荐包 | 节省约 50-100MB |
预计最终镜像大小:1.2-1.5GB
QEMU 源码编译(在容器内执行)
进入容器后,按以下步骤编译支持 TCG 插件的 QEMU:
bash
# 进入容器
docker exec -it ucover-dev bash
# 克隆 QEMU 源码
git clone https://gitlab.com/qemu-project/qemu.git /opt/qemu-source
cd /opt/qemu-source
# 配置(启用 TCG 插件和 PowerPC 目标)
./configure \
--target-list=ppc-softmmu \
--enable-plugins \
--enable-debug \
--enable-trace-backends=log \
--prefix=/opt/qemu-e500
# 编译(使用多核)
make -j$(nproc)
# 安装
make install
# 添加到 PATH
echo 'export PATH=/opt/qemu-e500/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 测试 e500 模拟
qemu-system-ppc -M mpc8544ds -cpu e500 -nographic
🎯 验证安装
bash
# 验证交叉编译器
powerpc-linux-gnu-gcc --version
# 验证调试器
gdb-multiarch --version
# 验证 SSH 服务
service ssh status
# 验证 QEMU(如果源码编译了)
qemu-system-ppc --version
qemu-system-ppc -plugin help
📝 可选变体
轻量版(只保留核心,约 800MB)
如果你不需要调试工具和 TCL 库,删除以下行:
dockerfile
# 删除这些
gdb strace bc
tcllib tdom
libftdi1-2 libflashrom1
完整版(包含预编译 QEMU,约 2GB)
取消注释 Dockerfile 中的 QEMU 安装行:
dockerfile
RUN apt-get update && apt-get install -y qemu-system-ppc && rm -rf /var/lib/apt/lists/*