基于ubuntu22.04 生成一个,专门用于 QEMU PowerPC e500 + uC/OS-III + TCG 插件开发的环境

生成一个干净的 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/*
相关推荐
中屹指纹浏览器2 小时前
2026浏览器指纹追踪的合规边界与隐私优先的反检测技术落地框架
经验分享·笔记
xuhaoyu_cpp_java4 小时前
MyBatis学习(二)
java·经验分享·笔记·学习·mybatis
天行健王春城老师4 小时前
从物流路径优化看车间布局设计的底层逻辑
经验分享
2501_943205054 小时前
【177期】硬盘检测坏道修复工具!
经验分享
edtoplort6 小时前
AI成本控制清单:8个让Token消耗降低80%的实战策略
经验分享
梅羽落6 小时前
cobaltstrike(CS)下载
经验分享
LaughingZhu6 小时前
Product Hunt 每日热榜 | 2026-04-25
人工智能·经验分享·深度学习·神经网络·产品运营
xuhaoyu_cpp_java8 小时前
MyBatis学习(一)
java·经验分享·笔记·学习·mybatis
空管电小二8 小时前
【低压断路器的选择性配合】低压配电“安全后盾“:后备保护到底是什么?
运维·经验分享·安全·学习方法