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

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 环境,极大方便了嵌入式开发和跨平台测试。结合交叉编译工具链,能够快速验证程序在目标架构上的行为。


http://www.kler.cn/a/584237.html

相关文章:

  • Vue3计算属性深度解析:经典场景与Vue2对比
  • Python 进程与线程-分布式进程
  • 工作记录 2017-01-09
  • React Next项目中导入Echart世界航线图 并配置中文
  • Flink 中RocksDB 为什么将每个键和值的限制为 2^31 字节
  • SpringCloud带你走进微服务的世界
  • 零信任架构实战手册-企业安全升级
  • 使用 Excel 实现绩效看板的自动化
  • 2024 年第四届高校大数据挑战赛-赛题 A:岩石的自动鉴定
  • css基本功
  • 手写svm primal form形式
  • kafka连问
  • 华为重拳出击!华为重拳出击!华为重拳出击!
  • Postman下载安装及简单入门
  • unity基础——地面(Physic Material)
  • 53. HarmonyOS NEXT 登录模块开发教程(七):性能优化与最佳实践
  • QT信号与槽:实现方法、技术细节、高级用法和底层机制
  • 蓝桥杯备赛-入门训练题 day1
  • 限流及熔断的场景?
  • MinIO问题总结(持续更新)