3.5启动QEMUARM64虚拟机

3.5 启动QEMU ARM64虚拟机

3.5.1 启动QEMU ARM64虚拟机

这条命令启动了一个基于 ARM 架构的虚拟机,配置了 4 GB 内存、4 个 CPU 核心、一个 VirtIO 硬盘和一个 VirtIO 网络设备,并指定了启动内核和根文件系统。通过 -nographic 和端口转发,可以在终端中直接操作虚拟机,并通过 SSH 访问虚拟机。

qemu-system-aarch64 \
-m 4096 \
-cpu cortex-a72 \
-M virt,gic-version=3 \
-smp 4 \
-kernel linux-build/arch/arm64/boot/Image.gz \
-append "noinitrd sched_debug console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw crashkernel=256M loglevel=8 nokaslr" \
-drive if=none,format=raw,file=rootfs/linuxroot.img,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=eth0,hostfwd=tcp::56789-:22 -device virtio-net-device,netdev=eth0 \
-nographic

正常情况下,你会见到如下登录界面。

Ubuntu 22.04.5 LTS xeno-demo ttyAMA0

xeno-demo login: 

以下是对该 qemu-system-aarch64 命令的逐行解释:

1. qemu-system-aarch64

这是 QEMU 的命令,用于启动一个基于 ARM 架构(64 位)的虚拟机。aarch64 表示使用 ARMv8-A 64 位架构。

2. -m 4096

指定虚拟机的内存大小为 4096 MB(即 4 GB)。
-m 参数控制分配给虚拟机的 RAM 大小。

3. -cpu cortex-a72

指定虚拟机使用的 CPU 模型为 Cortex-A72。
Cortex-A72 是 ARM 的一款高性能处理器核心。

4. -M virt,gic-version=3

指定虚拟机的机器类型为 virt,这是 QEMU 提供的一种通用的虚拟化平台,用于模拟 ARM 系统。
gic-version=3 表示使用 Generic Interrupt Controller (GIC) 版本 3,这是一种中断控制器标准,用于管理 ARM 系统中的中断。

5. -smp 4

指定虚拟机的 CPU 核心数量为 4。
-smp 参数用于设置虚拟机的对称多处理(SMP)配置,这里表示虚拟机有 4 个虚拟 CPU 核心。

6. -kernel linux-build/arch/arm64/boot/Image.gz

指定虚拟机启动时使用的内核镜像文件路径。
Image.gz 是一个压缩的 Linux 内核镜像,位于 linux-build/arch/arm64/boot/ 目录下。

7. -append "noinitrd sched_debug console=ttyAMA0 root=/dev/vda rootfstype=ext4 rw crashkernel=256M loglevel=8 nokaslr"

向内核传递启动参数:

  • noinitrd: 不使用 initrd(初始 RAM 磁盘)。
  • sched_debug: 启用调度器调试信息。
  • console=ttyAMA0: 将控制台输出重定向到 ttyAMA0(虚拟串口)。
  • root=/dev/vda: 指定根文件系统所在的设备为 /dev/vda
  • rootfstype=ext4: 指定根文件系统的类型为 ext4。
  • rw: 以读写模式挂载根文件系统。
  • crashkernel=256M: 预留 256 MB 内存用于崩溃转储(kdump)。
  • loglevel=8: 设置内核日志级别为 8(最高级别,显示所有日志信息)。
  • nokaslr: 禁用内核地址空间布局随机化(KASLR),主要用于调试。
8. -drive if=none,format=raw,file=rootfs/linuxroot.img,id=hd0

定义一个块设备(硬盘):

  • if=none: 表示不直接连接到任何接口,而是通过后续的 -device 参数进行绑定。
  • format=raw: 指定磁盘镜像格式为原始格式(raw)。
  • file=rootfs/linuxroot.img: 指定磁盘镜像文件路径。
  • id=hd0: 为该驱动器分配一个标识符 hd0,用于后续引用。
9. -device virtio-blk-device,drive=hd0

将前面定义的块设备 hd0 连接到虚拟机,并使用 VirtIO 半虚拟化驱动程序。
VirtIO 是一种高效的 I/O 虚拟化技术,能够显著提高性能。

10. -netdev user,id=eth0,hostfwd=tcp::56789-:22

定义一个用户模式网络设备:

  • id=eth0: 为该网络设备分配标识符 eth0
  • hostfwd=tcp::56789-:22: 设置端口转发规则,将主机的 56789 端口映射到虚拟机的 22 端口即SSH服务端口。这允许通过主机访问虚拟机的 SSH 服务ssh -p 56789 localhost
11. -device virtio-net-device,netdev=eth0

将前面定义的网络设备 eth0 连接到虚拟机,并使用 VirtIO 网络驱动程序。

12. -nographic

禁用图形界面输出,并将虚拟机的串口输出直接显示在终端上。

3.5.2 检查Cobalt内核

为了测试 Xenomai Cobalt内核是否正常启动,检查内核启动日志中的消息:

root@xeno-demo:~# dmesg | grep -i xenomai
[    0.502146] [Xenomai] scheduling class idle registered.
[    0.502310] [Xenomai] scheduling class rt registered.
[    0.502880] IRQ pipeline: high-priority Xenomai stage added.
[    0.511492] [Xenomai] Cobalt v3.2.4

上述命令通过 dmesg 查看内核启动日志,并使用 grep 筛选出与 Xenomai 相关的消息,用于验证 Cobalt 内核是否正常启动。日志中显示了 Xenomai 的关键初始化信息,例如调度类(idle 和 rt)的注册以及 Cobalt 版本号(v3.2.4)。这些消息表明 Xenomai 实时子系统已成功加载并运行。如果未出现相关日志或存在错误信息,则可能意味着内核模块未正确加载或配置存在问题,需进一步排查安装和引导过程。

Xenomai Cobalt 内核正常启动后,会在 /proc/xenomai 目录下生成多个文件,用于提供运行时信息和调试支持。

root@xeno-demo:~# cat /proc/xenomai/version
3.2.4

root@xeno-demo:~# cat /proc/xenomai/sched/stat
CPU  PID    MSW        CSW        XSC        PF    STAT       %CPU  NAME
  0  0      0          0          0          0     00018000  100.0  [ROOT/0]
  1  0      0          0          0          0     00018000  100.0  [ROOT/1]
  2  0      0          0          0          0     00018000  100.0  [ROOT/2]
  3  0      0          0          0          0     00018000  100.0  [ROOT/3]

/proc/xenomai/version 显示当前 Xenomai 的版本号(如 3.2.4),用于确认安装的版本是否正确。而 /proc/xenomai/sched/stat 提供了实时调度器的统计信息,包括每个 CPU 核心的任务模式切换次数(MSW)、上下文切换次数(CSW)、异常切换次数(XSC)、PF(缺页异常)以及STAT(任务状态)等。这些数据有助于监控系统实时性能和排查潜在问题,是调试和优化实时应用的重要工具。

为什么这里CPU的占用率是100%?这里 ROOT/x 是内核 idle 线程,在没有 Xenomai 实时线程运行的情况下,idle线程会占完整个CPU,这里的100%不代表整个系统都被跑满,旨在说明在没有用户态实时线程时,CPU都消耗在内核idle线程。等到有其他线程运行时,CPU会分配过去,也会看到非PID=0、非ROOT/x的线程在运行。

Xenomai Cobalt 内核的启动参数可以通过 /sys/module/xenomai/parameters/ 目录查看,这些参数在内核模块加载时被初始化,用于配置 Xenomai 的运行行为。

root@xeno-demo:~# ls /sys/module/xenomai/parameters/
allowed_group  state  supported_cpus  sysheap_size

root@xeno-demo:~# cat /sys/module/xenomai/parameters/sysheap_size
4096

例如,sysheap_size 表示系统堆的大小(以 KB 为单位),这里显示为 4096 KB,即 4 MB,用于分配实时任务的内存资源。其他参数如 allowed_group 控制访问权限,supported_cpus 定义支持的 CPU 掩码,state 显示模块状态。这些参数为管理员提供了灵活的配置选项,便于优化和调试实时系统性能。

3.5.3 检查Xenomai用户层库和工具

执行 Xenomai 的 latency 工具可以验证其实时性能和相关库是否正确安装。latency 是 Xenomai 提供的一个基准测试工具,用于测量系统的实时延迟特性。运行该工具时,它会定期触发定时器中断,并记录系统响应的最大、最小和平均延迟。通过观察输出结果,可以判断 Xenomai 内核和用户空间库是否正常工作。如果工具能够成功运行并输出延迟数据,说明 Xenomai 环境已正确配置。

因为当前是在QMEU ARM64虚拟机下运行,具体的延迟数值可以忽略。在真实的硬件下测试,得到的延迟数值才有参考价值。

root@xeno-demo:~# latency
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT|  00:00:01  (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD|    132.110|    495.434|   1184.420|       2|     0|    132.110|   1184.420
RTD|    133.921|    503.454|   1131.748|       7|     0|    132.110|   1184.420
RTD|     70.308|    538.631|   1391.883|      16|     0|     70.308|   1391.883
RTD|    167.898|    494.612|   1416.772|      21|     0|     70.308|   1416.772
RTD|    122.023|    498.749|   1110.043|      28|     0|     70.308|   1416.772
RTD|     73.017|    483.336|   1479.383|      32|     0|     70.308|   1479.383
内容概要:本文围绕SecureCRT自动化脚本开发在毕业设计中的应用,系统介绍了如何利用SecureCRT的脚本功能(支持Python、VBScript等)提升计算机、网络工程等相关专业毕业设计的效率与质量。文章从关键概念入手,阐明了SecureCRT脚本的核心对象(如crt、Screen、Session)及其在解决多设备调试、重复操作、跨场景验证等毕业设计常见痛点中的价值。通过三个典型应用场景——网络设备配置一致性验证、嵌入式系统稳定性测试、云平台CLI兼容性测试,展示了脚本的实际赋能效果,并以Python实现的交换机端口安全配置验证脚本为例,深入解析了会话管理、屏幕同步、输出解析、异常处理和结果导出等关键技术细节。最后展望了低代码化、AI辅助调试和云边协同等未来发展趋势。; 适合人群:计算机、网络工程、物联网、云计算等相关专业,具备一定编程基础(尤其是Python)的本科或研究生毕业生,以及需要进行设备自动化操作的科研人员; 使用场景及目标:①实现批量网络设备配置的自动验证与报告生成;②长时间自动化采集嵌入式系统串口数据;③批量执行云平台CLI命令并分析兼容性差异;目标是提升毕业设计的操作效率、增强实验可复现性与数据严谨性; 阅读建议:建议读者结合自身毕业设计课题,参考文中代码案例进行本地实践,重点关注异常处理机制与正则表达式的适配,并注意敏感信息(如密码)的加密管理,同时可探索将脚本与外部工具(如Excel、数据库)集成以增强结果分析能力。
### 配置 QEMU ARM64 虚拟机的桥接网络 在 Linux Ubuntu 虚拟机中配置 QEMU ARM64 虚拟机的桥接网络,需要将虚拟机的网络接口直接连接到宿主机的物理网络中,使其获得与宿主机处于同一子网的 IP 地址,并能够与其他设备通信。以下是具体的配置步骤和命令。 首先,确保宿主机上安装了 `bridge-utils` 工具,并加载了 `tun` 内核模块。可以通过以下命令检查和加载模块: ```bash modprobe tun ``` 随后,创建桥接设备(如 `br0`),并将其与宿主机的物理网络接口(如 `eth0`)绑定: ```bash ip link add name br0 type bridge ip link set br0 up ip link set eth0 up ip link set eth0 master br0 ``` 接着,创建 TAP 设备(如 `tap0`),并将其加入桥接设备中: ```bash ip tuntap add dev tap0 mode tap ip link set tap0 up ip link set tap0 master br0 ``` 完成桥接网络的配置后,启动 QEMU 时需指定桥接模式,并绑定到 `tap0` 接口。以下是一个典型的启动命令示例: ```bash sudo qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -nographic \ -smp 4 \ -m 1024 \ -kernel /path/to/Image \ -initrd /path/to/rootfs.cpio.gz \ -net nic,model=virtio,macaddr=52:54:00:12:34:01 \ -net tap,ifname=tap0,script=no ``` 在上述命令中,`-net nic` 定义了一个虚拟网卡,并指定了 MAC 地址;`-net tap` 将虚拟机网络接口绑定到 `tap0` 设备上,并通过 `script=no` 禁用默认的网络脚本,从而使用手动配置的桥接网络 [^1]。 在虚拟机内部,需要确保网络配置正确。如果宿主机的物理网络支持 DHCP,则虚拟机可以自动获取 IP 地址: ```bash dhclient eth0 ``` 若采用静态 IP 配置,需编辑 `/etc/network/interfaces` 或使用 `nmcli` 等工具设置固定 IP: ```bash auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 ``` 这样虚拟机即可通过桥接网络与宿主机处于同一子网,并实现与其他网络设备的通信 [^1]。 如果在启动 QEMU 时遇到以下警告信息: ``` warning: could not configure /dev/net/tun: no virtual network emulation Could not initialize device 'tap' ``` 可以手动执行以下命令配置 TAP 设备: ```bash /etc/qemu-ifup tap0 ``` 注意:不可使用 `sudo` 执行上一条命令,每次启动 Ubuntu 后都需要手动执行一次该命令 [^2]。 此外,在企业环境中,OpenNebula 作为私有云平台,其虚拟机的网络配置也涉及桥接机制,头节点会为虚拟机分配虚拟 MAC 地址,并在计算节点上设置网络桥接 [^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值