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

使用qemu命令启动虚拟机

1. 安装相关软件

yum install qemu edk2* libvirt  -y 

启动libvirt服务

systemctl start libvirtd
systemctl status libvirtd

2. 创建虚拟机

2.1. qemu启动命令示例

/usr/bin/qemu-system-loongarch64  \-machine virt,accel=kvm   \-nodefaults  \-m 2048  \-smp 2,maxcpus=4,cores=2,threads=1,sockets=2   \-cpu 'la464-loongarch-cpu'  \-bios /usr/share/edk2/loongarch64/QEMU_EFI.fd    \-drive file=/home/OpenCloudOS-9.4.qcow2,if=virtio  \-nographic      \-serial stdio    \-monitor telnet:localhost:4444,server,nowait   \-msg timestamp=on

2.2. 各参数的详细解析

参数作用
-machine virt,accel=kvm使用虚拟化机器类型并启用KVM加速
-nodefaults禁用默认设备
-m 2048分配内存2048M,即2GB
-smp 2,maxcpus=4,cores=2,threads=1,sockets=2CPU拓扑:2个激活vCPU,最多4个,2核心/插槽,无超线程
-cpu ‘la464-loongarch-cpu’模拟龙芯LA464 CPU
-bios /usr/share/edk2/loongarch64/QEMU_EFI.fd指定UEFI固件
-drive file=/home/OpenCloudOS-9.4.qcow2,if=virtio使用VirtIO半虚拟化磁盘
-nographic禁用图形界面
-serial stdio将串口重定向到终端
-monitor telnet:localhost:4444,server,nowait启用QEMU Monitor的Telnet接口
-msg timestamp=on日志添加时间戳

3. 启动虚拟机

问题:直接使用2.1章节的命令,发现无法正常进入到操作系统中
解惑:内核的启动日志和登录串口一般显示在图形界面,qemu启动参数使用的是串口启动

3.1. 在grub中添加内核启动参数

在grub里面添加内核启动参数 “console=ttyS0,115200 earlycon=uart,mmio,0x1fe001e0

注释:
uart,mmio指定UTRA类型为mmio(内存映射I/O)
0x1fe001e0为龙芯3A5000的UART0地址

3.2. 直接打开图形界面

修改qemu启动参数
删除 -nographic
增加 -device virtio-gpu-pci \ -device qemu-xhci \ -device usb-kbd \ -device usb-tablet \

4. 举一反三

4.1. console和earlycon对比

核心功能对比

特性consoleearlycon
作用阶段内核初始化完成后(驱动加载后)内核极早期(解压、硬件初始化阶段)
依赖条件需要完整的串口/TTY驱动直接操作硬件寄存器,无需完整驱动
输出内容系统启动后的全部日志和交互控制台仅内核解压、内存初始化等早期日志
典型配置console=ttyS0,115200earlycon=uart,mmio,0x1fe001e0
调试用途常规系统操作和故障排查解决内核卡死在启动前期的严重问题

4.2. earlycon参数分析

参数结构分析

earlycon=<接口类型>,<寄存器类型>,<物理地址>[,选项]
部分说明
earlycon=-声明启用早期控制台
uart串口设备类型指定使用UART(Universal Asynchronous Receiver/Transmitter)协议
mmio内存映射I/O表示UART通过内存映射寄存器访问
0x1fe001e0物理地址龙芯3A5000的UART0寄存器基地址(不同芯片需要调整)

4.3. 查看芯片的寄存器基地址

在linux系统中查看

## 在已运行系统中:
sudo cat /proc/iomem |grep -i "serial"## 输出示例:
1fe001e0-1fe001e7 : serial

1fe001e0-1fe001e7:UART0寄存器占用的物理地址范围
serial:标识为串口设备

http://www.xdnf.cn/news/1171009.html

相关文章:

  • linux辅助知识(Shell 脚本编程)
  • 基于卷积神经网络与小波变换的医学图像超分辨率算法复现
  • AWE2026启动:加码AI科技,双展区联动开启产业新格局
  • 【kubernetes】-2 K8S的资源管理
  • Spring、Spring MVC、Spring Boot、Spring Cloud的联系和区别
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十课——车牌识别的FPGA实现(2)实现车牌定位
  • 类加载过程及双亲委派模型
  • 数据结构自学Day12-- 排序算法2
  • Pycharm下载、安装及配置
  • 【运维】SGLang服务器参数配置详解
  • 大数据之Hive:Hive中week相关的几个函数
  • 微调大语言模型(LLM)有多难?
  • SpringBoot全局异常报错处理和信息返回
  • Vue 脚手架基础特性
  • Maven 环境配置全攻略:从入门到实战
  • Typecho三种版权保护方法对比与实战指南
  • 渗透部分总结
  • 如何把jar包打成docker镜像(SpringBoot项目打包成Docker )部署到Linux
  • 本地代理和服务器代理区别
  • 【MyBatisPlus】一文讲清 MyBatisPlus 基本原理及基本使用方式
  • NumPy库使用教学,简单详细。
  • allegro 16.6配置CIS库报错 ORCIS-6129 ORCIS-6469
  • Matplotlib绘制各种图参考
  • 时序数据库IoTDB好不好?
  • 在 Linux 系统中基于 Nginx 搭建 openlab 网站及子页面
  • 浅谈——C++和C#差异
  • 从 COLMAP 到 3D Gaussian Splatting
  • 【面试】Redis分布式ID与锁的底层博弈:高并发下的陷阱与破局之道
  • 机器人氩弧焊保护气降成本的方法
  • kafka主题管理详解 - kafka-topics.sh