当前位置: 首页 > news >正文

Qemu 详解与 ARM 虚拟机搭建指南

1. Qemu 是什么?

Qemu(Quick Emulator)是一款开源的机器模拟器虚拟化工具,支持多种硬件架构(如 x86、ARM、PowerPC 等)。它的核心功能包括:

  • 动态指令翻译:将不同架构的指令实时翻译为本机指令(如将 ARM 指令翻译为 x86 指令)。

  • 全系统模拟:模拟完整的计算机硬件环境(CPU、内存、外设等),允许运行未经修改的操作系统。

  • 虚拟化加速:与 KVM(Kernel-based Virtual Machine)结合时,能直接利用硬件虚拟化技术(如 Intel VT-x、AMD-V),提供接近物理机的性能。


2. Qemu 的两种模式
  1. 用户模式(User Mode)

    • 功能:运行跨架构的单个程序(如 ARM 程序在 x86 主机上执行)。

    • 原理:动态翻译目标程序的指令集,无需模拟整个操作系统。

    • 示例:在 x86 主机上直接运行 ARM 架构的 hello_world 程序:

      qemu-arm ./hello_world
  2. 系统模式(System Mode)

    • 功能:模拟完整的计算机系统(如 CPU、内存、硬盘、网络等)。

    • 应用:运行完整的操作系统(如 Ubuntu ARM 版),适合开发、测试和调试。

    • 性能优化:结合 KVM 时,可启用硬件虚拟化加速。


3. 为什么需要 ARM 模拟系统?
  • 跨平台开发:在 x86 主机上开发和测试 ARM 软件(如嵌入式系统、IoT 设备程序)。

  • 成本与便捷性:无需购买物理 ARM 设备,即可调试和验证系统。

  • 兼容性测试:验证软件在不同架构下的行为。


4. Qemu 能做什么?适合哪些场景?
  • 跨架构程序运行:直接运行不同指令集的程序。

  • 操作系统开发:模拟完整的硬件环境,调试内核或驱动程序。

  • 虚拟化:创建轻量级虚拟机(需 KVM 支持)。

  • 教育与研究:学习计算机体系结构或操作系统原理。


5. 在 Ubuntu 16.04 搭建 ARM 虚拟机的步骤

以下以模拟 ARM vexpress-a9 开发板为例:

1. 安装 Qemu 及依赖
sudo apt update
sudo apt install qemu-system-arm gcc-arm-linux-gnueabihf
2. 准备 ARM 系统镜像
  • 下载内核和根文件系统

    wget https://files.kernel.org/pub/linux/utils/boot/qemu/vexpress/zImage
    wget https://files.kernel.org/pub/linux/utils/boot/qemu/vexpress/vexpress-v2p-ca9.dtb
    wget https://downloads.openwrt.org/releases/19.07.1/targets/armvirt/32/openwrt-armvirt-32-rootfs-ext4.img.gz
    gunzip openwrt-armvirt-32-rootfs-ext4.img.gz
3. 启动 ARM 虚拟机
qemu-system-arm \
  -M vexpress-a9 \
  -m 512M \
  -kernel zImage \
  -dtb vexpress-v2p-ca9.dtb \
  -append "root=/dev/mmcblk0 console=ttyAMA0" \
  -drive file=openwrt-armvirt-32-rootfs-ext4.img,format=raw,if=sd \
  -nographic
  • 参数说明

    • -M vexpress-a9: 模拟 ARM vexpress-a9 开发板。

    • -m 512M: 分配 512MB 内存。

    • -kernel-dtb: 指定内核和设备树文件。

    • -drive: 加载根文件系统镜像。

    • -nographic: 禁用图形界面,直接使用终端。

4. 登录虚拟机

启动后输入用户名 root(无密码),进入 ARM 虚拟系统。


6. 编写并运行 HelloWorld 程序
1. 交叉编译 ARM 程序

在主机上编写 hello.c

#include <stdio.h>
int main() {
  printf("Hello, ARM World!\n");
  return 0;
}

编译为 ARM 可执行文件:

arm-linux-gnueabihf-gcc -static hello.c -o hello
2. 将程序传输到虚拟机
  • 方法 1:通过虚拟 SD 卡

    1. hello 复制到根文件系统镜像:

      sudo mount openwrt-armvirt-32-rootfs-ext4.img /mnt
      sudo cp hello /mnt/root/
      sudo umount /mnt
    2. 在虚拟机中运行:

      ./hello
  • 方法 2:通过网络传输

    1. 在虚拟机中启动 SSH 服务。

    2. 使用 scp 从主机传输文件:

      scp hello root@虚拟机IP:/root/

总结

通过 Qemu 的系统模式,开发者可以在 x86 主机上低成本地模拟完整的 ARM 环境,极大方便了嵌入式开发和跨平台测试。结合交叉编译工具链,能够快速验证程序在目标架构上的行为。

相关文章:

  • Python递归与递推的练习(初步了解复杂度,全排列的价值,奇妙的变换,数正方形,高塔登顶方案)
  • HarmonyOS三层架构实战
  • java 使用命令创建jar的常用参数整理
  • 【计算机视觉】工业表计读数(2)--表计检测
  • 387. 字符串中的第一个唯一字符
  • 泛型主要是用于静态类型检查的工具,它并不会在运行时自动验证返回值类型和传入类型是否一致
  • vsftpd服务权限配置
  • Redis如何实现持久化
  • 基本不等式
  • 如何高效定位网络丢包问题?
  • 【C++】:C++11详解 —— 入门基础
  • Matlab 经验模态分解和时频图绘制
  • SAP WORKFLOW BUSINESS PROCESS AUTOMATION
  • QVariant:Qt中万能类型的使用与理解
  • 重生之我在学Vue--第17天 Vue 3 项目优化与部署
  • openEuler系统迁移 Docker 数据目录到 /home,解决Docker 临时文件占用大问题
  • 鸿蒙路由 HMRouter 配置及使用 三 全局拦截器使用
  • AtCoder Beginner Contest 397 A - D题解
  • 举例说明 牛顿法 Hessian 矩阵
  • python实现简单的图片去水印工具
  • 国际奥委会举办研讨会,聚焦如何杜绝操纵比赛
  • 复原展出孙吴大墓,江苏首座考古博物馆将开放
  • 问责!美国海军对“杜鲁门”号航母一系列事故展开调查
  • 陕西旱情实探:大型灌区农业供水有保障,大旱之年无旱象
  • 75万买299元路由器后续:重庆市纪委、财政局、教委联合调查
  • 优化营商环境,服务上海“五个中心”建设,北外滩有何举措?