使用qemu运行arm版本的麒麟系统

用qemu运行arm版麒麟系统教程

#最近搞了个显控程序,但是甲方电脑是arm的麒麟系统,我的是x86完全运行不了,然后跟着b站搞了一下使用qemu跑这个麒麟系统,太卡了,但是能用#

b站有视频看不懂的可以去看这个视频,主波是参考这个视频以及一些文章弄得

Windows 10 使用QEMU安装arm架构系统,并联网_哔哩哔哩_bilibili

qemu虚拟机 安装银河麒麟V10 arm架构系统 桌面版_vmware支持arm吗-CSDN博客

一、准备工作

1、下载安装qemu

下载链接:

https://qemu.weilnetz.de/w64/2024/qemu-w64-setup-20240423.exe

2、下载麒麟镜像

我是去的麒麟官网国产操作系统、麒麟操作系统——麒麟软件官方网站,下载的开源版的

下载链接:https://mirrors.hust.edu.cn/openkylin-cdimage/2.0-SP1/openKylin-Desktop-V2.0-SP1-arm64.iso

3、下载qemu-efi,以及xshell,xftp,还有tab-windows

efi下载地址:

https://publishing-ie-linaro-org.s3.amazonaws.com/releases/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd?Signature=89%2FtNu1I7HcxC%2BZ0DMzsi4lKTSc%3D&Expires=1755499228&AWSAccessKeyId=AKIAIELXV2RYNAHFUP7A

xftp:

https://cdn.netsarang.net/10aefc08/Xftp-8.0.0084p.exe

xshell:

https://cdn.netsarang.net/10aefc08/Xshell-8.0.0084p.exe

tab-windows: 这个是弄一个虚拟网卡的,能让麒麟系统上网

https://obs.cn-north-4.myhuaweicloud.com/gitcode-repo-archive-bj/28e674ee72aa07b7eb62249a469cb6c93ff88be9ffd3da6c730e087c49aadaaf5326104.zip?AWSAccessKeyId=X364SUL65RWWOYRBZEMU&Expires=1755567934&response-content-disposition=attachment%3Bfilename%3D%220b683-main.zip%22&Signature=FV7l0hH4KOWffO3fvIi%2BVC%2Foz7E%3D

二、开始操作

1、就把上面的qemu,记忆xshell,xftp都安装一下,按照安装过程一步一步安装就可以了,这个tab-windows需要自己仔细看教程,然后安装,这里附安装步骤

解压完成之后进入tab64(根据自己的系统选择,主波是win10),右键点击第一个文件.inf然后安装,接着在这个上面的地址里面输入cmd,就直接打开了这个文件夹路径的cmd,输入

tapctl create --name tap0

,这样我们就创建了一个虚拟网卡

由于主波是用的以太网网卡,点击以太网网卡,然后右键属性有一个共享,共享给tap0,此时右键点击tap0的属性,打开ipv4 会固定分配192.168.137.1的ip,此时我们的共享就成功了。

2、进入qemu文件夹,在文件夹内用cmd命令创建一个虚拟磁盘

还是上面的cmd方法,先进入命令界面,然后输入指令创建一个虚拟磁盘

qemu-img create -f qcow2 C:\work\vm\kylindisk.qcow2 70G

然后会出现这个文件

然后接着进入命令行输入下面参数:

qemu-system-aarch64.exe -m 8192 -cpu cortex-a76 -smp 8,sockets=2,cores=4 -M virt -bios G:\QMDownload\QEMU_EFI.fd -device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd -drive if=none,file=F:\arm\kylindisk.qcow2,id=hd0 -device virtio-blk-device,drive=hd0 -drive if=none,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -net nic -net tap,ifname=tap0

-m 8192 表示分配给虚拟机的内存最大 8192 MB

-cpu cortex-a76 指定CPU类型,还可以选择cortex-a53、cortex-a57、cortex-a76等

-smp 4,cores=4,threads=1,sockets=1,cores=2指定虚拟机最大使用的CPU核心数等

-M virt 指定虚拟机类型为virt,具体支持的类型可以使用 qemu-system-aarch64 -M help 查看

-bios \QEMU_EFI.fd 指定UEFI固件文件

-net nic,model=pcnet net tap 启用tap网卡启用网络功能

-device nec-usb-xhci -device usb-kbd -device usb-mouse 启用USB鼠标等设备

-device VGA 启用VGA视图

-drive if=none,file=Z:\uos.iso,id=cdrom,media=cdrom 指定光驱使用镜像文件

-device virtio-scsi-device -device scsi-cd,drive=cdrom 指定光驱硬件类型

-drive if=none,file=img 指定硬盘镜像文件

然后系统就启动成功了,点击安装就慢慢安装了,由于主波没有截图,所以安装的步骤就省略了,然后再做一个简易启动:

把上面的代码放到qemu文件夹中,先放入txt中,然后把文件格式修改为.bat

然后我们就进入了麒麟系统:

然后点击网络配置,就可以愉快的玩耍了

好了,arm版本的麒麟就可以在win10上面运行了,接下来是使用xftp进行文件的互相传输功能,进入xftp

点击左上角文件,新建对话,然后输入我们的麒麟系统的ip,中间会有验证,账户名是你麒麟的账户名,登录是你麒麟的密码,然后点击连接就可以看到以下界面

可以把文件拖拽进去了,xshell原理一样,可以远程使用麒麟的命令行。

<think>我们正在处理用户的问题:在QEMU运行ARM64环境并支持PCIe RC(Root Complex)的实现方法。 根据用户之前的上下文,用户已经了解在x86_64上用q35机器类型支持PCIe RC,现在需要在ARM64(aarch64)上实现类似功能。 关键点: 1. ARM64的QEMU机器类型通常使用“virt”,但默认virt机器可能不包含PCIe支持。 2. 我们需要启用virt机器的高内存区域(GICv3)和PCIe支持。 3. 在QEMUARM64 virt平台上,可以通过设置machine属性来启用PCIe。 步骤: 1. 确保使用足够新的QEMU版本(建议6.0以上),因为PCIe支持在ARM virt平台上是逐步完善的。 2. 在启动QEMU时,使用`virt`机器类型,并通过`-machine`选项启用PCIe支持:`-machine virt,pci=on` 或者更具体的,我们可以使用`-machine virt,pcie=on`(根据QEMU版本可能有差异)。 3. 注意:在ARM64上,PCIe Root Complex是集成在virt平台中的,不需要像x86那样选择q35,但是需要显式启用。 具体命令示例参考用户提供的引用[1]和[4],但需要修改以启用PCIe。 参考用户引用[4]中的命令: ./qemu-4.1.0/bin/qemu-system-aarch64 \ -M virt -cpu cortex-a53 -nographic -smp 1 \ -kernel buildroot-2022.02.2/output/images/Image \ -append "rootwait root=/dev/vda console=ttyAMA0" \ -netdev user,id=eth0 -device virtio-net-device,netdev=eth0 \ -drive file=buildroot-2022.02.2/output/images/rootfs.ext4,if=none,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 -nographic -device edu 我们需要修改这个命令以启用PCIe,并添加PCIe设备和根端口。 修改: 将 `-machine virt` 改为 `-machine virt,pcie=on` 或者 `-machine virt,pci=on`(具体属性名需查证,根据QEMU文档,新版本中可能已经默认开启,但为了确保,我们可以显式开启)。 然后,我们需要添加PCIe根端口(类似x86的pcie-root-port)和PCIe设备。 在ARM64 virt平台上,PCIe根总线的名字是“pcie.0”,我们可以通过`-device pcie-root-port`来添加根端口,然后将设备挂载到根端口上。 例如: -device pcie-root-port,id=rp1,slot=1,chassis=1 -device edu,bus=rp1 注意:edu是一个简单的测试设备,也可以使用其他PCIe设备如nvme。 同时,由于启用了PCIe,可能需要在内核中启用相应的驱动。 因此,完整的命令可能如下: ```bash qemu-system-aarch64 \ -machine virt,pcie=on \ -cpu cortex-a53 \ -smp 4 \ -m 2048 \ -kernel arch/arm64/boot/Image \ -append "rdinit=/linuxrc console=ttyAMA0 root=/dev/vda" \ -device pcie-root-port,id=rp1,slot=1,chassis=1 \ -device nvme,serial=deadbeef,bus=rp1 \ -drive file=rootfs.ext4,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -nographic ``` 注意:这里我们添加了一个NVMe设备,它连接在第一个根端口上。 另外,需要确保内核支持PCIe和NVMe驱动,否则在启动后无法识别设备。 验证方法: 在Linux启动后,使用`lspci`命令查看PCIe设备。 如果启动后没有看到设备,请检查: - QEMU的启动日志(如果有错误输出) - 内核是否支持PCIe host控制器(例如CONFIG_PCI_HOST_GENERIC) 关于内核配置:在编译ARM64内核时,我们需要开启: CONFIG_PCI=y CONFIG_PCI_HOST_GENERIC=y # 这是针对QEMU virt平台的PCIe主机控制器驱动 CONFIG_PCIE_ECAM=y # 使用ECAM配置空间访问 如果需要使用NVMe设备,还需开启: CONFIG_NVME_CORE=y CONFIG_BLK_DEV_NVME=y 用户之前提供的引用[5]提到交叉编译工具链,所以用户应该已经知道如何编译内核。 总结步骤: 1. 编译支持PCIe和NVMe(或所需设备)的ARM64内核。 2. 使用QEMU启动命令,指定-machine virt,pcie=on,并添加根端口和设备。 3. 启动后验证。 相关问题: §§相关问题§§ 1. 如何为ARM64内核配置PCIe支持? 2. 在QEMU中模拟ARM64 PCIe设备时常见的错误有哪些? 3. 如何验证PCIe设备是否正确初始化? 注意:在QEMU中,ARM64的PCIe支持可能不如x86平台成熟,因此如果遇到问题,可能需要更新QEMU版本或查看补丁。 引用:用户提供的引用[1]和[4]中给出了运行ARM64的基本方法,但未提及PCIe,我们在此基础上扩展。 </think>### 在 QEMU运行 ARM64 环境并支持 PCIe Root Complex 的实现方法 在 ARM64 架构下使用 QEMU 模拟 PCIe Root Complex 需要特殊的机器配置和设备设置,以下是具体步骤: #### **1. 编译支持 PCIe 的 QEMU** ```bash # 下载并编译 QEMU(需启用 AArch64 和 PCIe 支持) $ wget https://download.qemu.org/qemu-7.2.0.tar.xz $ tar xvf qemu-7.2.0.tar.xz $ cd qemu-7.2.0 $ ./configure --target-list=aarch64-softmmu --enable-pcie $ make -j$(nproc) && sudo make install # [^2][^3] ``` > 📌 关键配置:`--enable-pcie` 确保 PCI Express 支持被编译 #### **2. 配置支持 PCIe 的 ARM64 虚拟机** ```bash qemu-system-aarch64 \ -machine virt,pcie=on \ # 启用 PCIe -cpu cortex-a57 \ -smp 4 \ # 4 核处理器 -m 4G \ # 4GB 内存 -device pcie-root-port,id=rp1 \ # PCIe 根端口 -device nvme,serial=deadbeef,bus=rp1 \ # NVMe 示例设备 -kernel arch/arm64/boot/Image \ # ARM64 内核 -append "console=ttyAMA0 root=/dev/vda" \ -drive file=rootfs.ext4,if=none,format=raw,id=hd0 \ -device virtio-blk-device,drive=hd0 \ -nographic ``` > 📝 **参数详解**: > - `-machine virt,pcie=on`: 强制启用 virt 平台的 PCIe 支持 > - `-device pcie-root-port`: 创建 PCIe 根端口(必需的下游连接点) > - `bus=rp1`: 将设备挂载到根端口 #### **3. 内核配置要求(Linux 5.15+)** 需在内核编译时启用 PCIe 支持: ```bash # 内核配置选项 CONFIG_PCI=y CONFIG_PCI_HOST_GENERIC=y # QEMU virt 平台专用 CONFIG_PCIE_ECAM=y # PCIe 配置空间支持 CONFIG_PCI_MSI=y # MSI 中断 CONFIG_PCI_MSI_IRQ_DOMAIN=y ``` 编译命令: ```bash make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) # [^1][^5] ``` #### **4. 验证 PCIe 拓扑** 启动后在 Linux 内检查: ```bash # 查看 PCI 设备 lspci -tv # 预期输出 -[0000:00]-+-00.0 Device 1af4:1041 # PCIe 根总线 \-01.0 Device 8086:5845 # NVMe 控制器 ``` #### **5. 常见问题解决** - **设备未识别**:检查 QEMU 启动日志是否有 `pcie-root-port` 初始化错误 - **BAR 分配失败**:增加虚拟机内存(`-m 8G`),或在内核启用 `CONFIG_PCI_QUIRKS` - **中断失效**:确保内核配置包含 `CONFIG_ARM_GIC_V3` ### 技术原理 在 ARM64 virt 平台中,PCIe Root Complex 通过以下组件实现: 1. **ECAM 空间**:位于 `0x3f0000000-0x3ffffffff` 的配置区域 2. **IO 空间**:`0x3eff0000-0x3effffff` 3. **MMIO 空间**:`0x10000000-0x3efeffff` 4. **中断路由**:使用 GICv3 ITS 支持 MSI/MSI-X[^1] $$ \text{PCIe 地址映射} = \begin{cases} \text{ECAM} & : 0x3f0000000 \\ \text{MMIO} & : 0x10000000 \\ \text{PIO} & : 0x3eff0000 \end{cases} $$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值