qemu编译使用

本文介绍了在Ubuntu 20.04服务器环境下,如何编译QEMU并创建启动虚拟机。首先,详细列出了安装编译所需依赖的步骤,包括python3.7、re2c、ninja-build、gettext和libglib2.0-dev等。然后,通过静态编译QEMU源码,并打包启动文件。接着,使用qemu-img创建磁盘文件,以及利用qemu-system-x86_64安装CentOS系统。最后,详细说明了启动虚拟机的命令,包括设置内存大小、启用KVM、VNC显示和端口转发。

环境:ubuntu20-server

编译

1、安装依赖
1)、安装python3.7;
2)、源码编译安装re2c;
3)、安装ninja-build, sudo apt-get install ninja-build;
4)、安装gettext、libglib2.0-dev, sudo apt-get install gettext、libglib2.0-dev;
5)、安装pkg-config;

2、静态编译
源码下载:https://download.qemu.org/
./configure --static --prefix="$PWD/staging/static" --enable-debug
配置选项可以根据需求添加;
make -j8 && make install
生成文件在 staging/user-static下;

3、打包必需的启动文件
cd staging/user-static
mkdir -p qemu
cp share/qemu/keymaps/en-us qemu -rf
cp share/qemu/bios-256k.bin qemu -rf
cp share/qemu/vgabios-stdvga.bin qemu -rf
cp share/qemu/kvmvapic.bin qemu -rf
cp bin/qemu-system-x86_64 qemu -rf
cp bin/qemu-img qemu -rf

qemu目录下即为启动vm需要的文件。

创建并启动虚拟机

创建磁盘文件

./qemu-img create -f qcow2 centos.img 10G

安装系统

./qemu-system-x86_64 -m 2048 -enable-kvm cento

### QEMU 编译失败的解决方案 QEMU编译失败可能由多种原因引起,包括环境配置错误、依赖缺失或代码本身的问题。以下是针对常见问题的解决方法: #### 1. 环境配置问题 确保开发环境已正确配置。例如,xPack QEMU Arm 支持 Windows、macOS 和 GNU/Linux 操作系统[^1]。如果在非支持的操作系统上尝试编译,可能会导致失败。 #### 2. 依赖项缺失 编译 QEMU 需要一系列依赖库。如果缺少必要的依赖项,编译过程会中断并提示错误信息。可以参考以下步骤安装依赖项: ```bash sudo apt-get update sudo apt-get install -y build-essential git libglib2.0-dev zlib1g-dev \ pkg-config libpixman-1-dev ``` 上述命令适用于基于 Debian 的 Linux 发行版。对于其他操作系统,请查阅官方文档以获取适当的依赖项列表[^3]。 #### 3. 文件路径冲突 有时,QEMU编译错误可能是由于文件路径冲突引起的。例如,“recipe for target ‘accel/tcg/cpu-exec.o’ failed” 是一个常见的错误[^3]。此问题通常与补丁应用失败有关。可以通过注释掉 `qemu_mode/build_qemu_support.sh` 文件中的相关补丁代码来解决: ```bash # patch -p1 <../patches/cpu-exec.diff || exit 1 ``` 将上述行注释后重新运行编译脚本。 #### 4. 使用静态编译 如果动态编译遇到问题,可以尝试静态编译 QEMU。静态编译可以减少对外部库的依赖。以下是一个静态编译的示例命令[^4]: ```bash ./configure --static --target-list=i386-softmmu make ``` #### 5. 调试失败类型 为了更好地调试编译失败问题,可以生成每种可能的失败类型的最小示例。这种方法可以帮助定位具体问题所在[^2]。例如: ```bash make V=1 ``` 通过启用详细输出模式 (`V=1`),可以获得更详细的错误信息,从而更容易找到问题的根本原因。 #### 6. 检查日志 编译失败时,检查生成的日志文件是关键。日志中通常包含详细的错误描述和上下文信息,这些信息对解决问题至关重要。 --- ### 示例代码:静态编译 QEMU 以下是一个完整的静态编译 QEMU 的示例: ```bash # 克隆 QEMU 源码 git clone https://github.com/qemu/qemu.git cd qemu # 配置静态编译 ./configure --static --target-list=x86_64-softmmu # 编译 make -j$(nproc) ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值