2022年11月17日
我们平常使用的PC一般都是x86架构的Intel CPU,如果由于某些原因需要使用arm架构的操作系统,我们无法使用一些虚拟机软件(如vmware workstation、virtual box等) 进行安装,因为这种类型的虚拟机软件只能安装和宿主机的CPU相同架构的系统。不过,我们可以使用qemu软件,该软件可以理解为一个模拟器,可以模拟一个arm架构的虚拟机。qemu有时候也被称为虚拟机软件。
本文简单介绍了如何在windows系统中安装并使用qemu安装arm架构的kylinV10系统(其它类似的操作系统也可以参考,仅仅是安装时使用的ISO镜像不同),可以在x86架构的windows上运行arm架构的虚拟机,以便在windows上可以使用其它cpu架构的操作系统进行开发、编译、验证问题等操作。仅供需要的人员作为参考。
QEMU是一款开源的模拟器及虚拟机监管器(Virtual Machine Monitor, VMM)。QEMU主要提供两种功能给用户使用。一是作为用户态模拟器,利用动态代码翻译机制来执行不同于主机架构的代码。二是作为虚拟机监管器,模拟全系统,利用其他VMM(Xen, KVM, etc)来使用硬件提供的虚拟化支持,创建接近于主机性能的虚拟机。
本次安装后虚拟机上网使用的是tap模式,所以启动命令及上网配置都是采用的tap模式,如果使用其它模式,安装和启动命令可能稍微有些不同。
宿主机系统:windows10、windwos11(本文档中的宿主机使用windows11系统)
Qemu软件:qemu-w64-setup-20220831.exe
麒麟V10操作系统安装包:Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso(该安装包需要厂家提供,需要的人也可以从网上中找一找)
麒麟引导文件(EFI文件):qemu-kylin EFI文件
虚拟网卡软件:openvpn-connect-3.3.6.2752_signed.msi
将qemu的安装包下载下来后,直接双击执行就可以,和安装其它的软件一样,不再赘述。安装过程中请记住安装的路径,后面配置环境变量的时候需要用到。
在“我的电脑”上右键,找到“属性”:

弹出“设置”界面,如下图所示:

点击“高级系统设置”,弹出系统属性界面,如下图所示:

点击“环境变量”按钮,弹出环境变量编辑界面,如下图所示:

打开cmd,执行qemu-system-aarch64 -version,可以展示版本信息,如下所示:
qemu-system-aarch64 -version
QEMU emulator version 7.1.0 (v7.1.0-11925-g4ec481870e-dirty)
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
双击下载下来的openvpn-connect-3.3.6.2752_signed.msi软件,和安装其它软件一样,一步步安装即可。
注意:不一定非得安装这个软件,安装别的vpn软件也可以,只要能创建虚拟的网卡就可以。
安装完成后,在网络连接界面可以看到新增加了一块网卡,如下图所示:

注意:大的红框中的网卡是新增加的,黄色框中的名称是经过我修改后的,安装完openven后可能不是这个名字,下面马上要说修改网卡名称的操作。只需要关注小的红框中的网卡类型是否是“TAP-Windows Adapter”即可,找到这种类型的网卡就是新增加的网卡。且连接状态也是未连接状态,不用关注,等启动虚拟机后即可变为正常状态。红框下面的“以太网”是我电脑的真实物理网卡。
右键单击新增加的网卡,重命名该网卡,如下图所示:

注意:我这里修改为了tap0,其它的名称也可以,建议还是修改为tapXX这种形式,最好不要用中文名称。
右键单击本机物理网卡,如下图所示:

点击“属性”按钮,在弹出的界面中选择“共享”选项,如下图所示:

选中“允许其它网络通过此计算机的Internet连接来连接”复选框,“家庭网络连接”项选择刚才新增加的网卡(且是修改过名字后的名称),选中“允许其它网络用户控制或禁用共享的Internet连接”,确定即可。
打开cmd界面,为虚拟机创建目录并使用qemu-img.exe命令创建虚拟机,如下所示:
C:\Users\>mkdir D:\virtual-machines\qemu\kylinV10
C:\Users\>D:
D:\>cd D:\virtual-machines\qemu\kylinV10
D:\virtual-machines\qemu\kylinV10>qemu-img.exe create -f qcow2 kylindisk.qcow2 120G
Formatting 'kylindisk.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=128849018880 lazy_refcounts=off refcount_bits=16
注意:镜像大小可以根据自己的需求进行修改。
在指定目录下会有kylindisk.qcow2的文件。
D:\virtual-machines\qemu\kylinV10 的目录
2022/11/16 15:45 <DIR> .
2022/11/16 15:31 <DIR> ..
2022/11/16 15:43 198,656 kylindisk.qcow2
2022/11/10 13:07 2,097,152 QEMU_Kylin_EFI.fd
2 个文件 2,295,808 字节
2 个目录 318,376,022,016 可用字节
将之前下载的EFI文件拷贝到创建的镜像目录中(不拷贝也可以,使用-bios选项指定即可,拷贝是为了方便以后找到该文件,防止不小心删除了该文件)。
在cmd界面中,使用qemu-system-aarch64.exe命令安装麒麟操作系统:
D:\virtual-machines\qemu\kylinV10>qemu-system-aarch64.exe -m 8192
-cpu cortex-a72 -smp 8,sockets=4,cores=2 -M virt
-bios D:\virtual-machines\qemu\kylinV10\QEMU_Kylin_EFI.fd
-device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd
-drive if=none,file=D:\virtual-machines\qemu\kylinV10\kylindisk.qcow2,id=hd0
-device virtio-blk-device,drive=hd0
-drive if=none,file=D:\softwares\Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso,id=cdrom,media=cdrom
-device virtio-scsi-device -device scsi-cd,drive=cdrom
-net nic -net tap,ifname=tap0
注意:注意:执行命令时请去掉换行符。-net tap,ifname=tap0中的tap0请修改为前面步骤中自己修改后的网卡名称。-bios参数请更换为自己的路径。-drive if-none,file=xxx请更换为自己创建的镜像路径。-drive if=none,file=xxx/Kylin-Server-10-SP2-aarch64-Release-Build09-20210524.iso请更换为自己的镜像路径。
主要参数说明如下
-m 虚拟机内存的大小,单位是MB
-cpu cpu类型,可以使用qemu-system-aarch64 -M help命令查看支持的类型。
-bios 引导文件的路径
此时会启动一个图形界面,如下图所示:

选择后会进入操作系统安装界面,如下图所示:

和安装其它linux系统一样,按照自己的需求一步步配置即可。建议尽量小的安装,只选择必须的组件,因为安装过多功能需要的时间可能会比较长。
在cmd界面中,使用qemu-system-aarch64.exe命令启动麒麟操作系统
D:\virtual-machines\qemu\kylinV10>qemu-system-aarch64.exe -m 8192
-cpu cortex-a72 -smp 8,sockets=4,cores=2 -M virt
-bios D:\virtual-machines\qemu\kylinV10\QEMU_Kylin_EFI.fd
-device VGA -device nec-usb-xhci -device usb-mouse -device usb-kbd
-drive if=none,file=D:\virtual-machines\qemu\kylinV10\kylindisk.qcow2,id=hd0
-device virtio-blk-device,drive=hd0
-device virtio-scsi-device -net nic -net tap,ifname=tap0
注意:执行命令时请去掉换行符。-net tap,ifname=tap0中的tap0请修改为前面步骤中自己修改后的网卡名称。-bios参数请更换为自己的路径。-drive if-none,file=xxx请更换为自己创建的镜像路径。
为了以后启动方便,可以将此命令保存为bat文件,后续直接双击执行即可。
在宿主机中查看刚才新增加的tap0网卡的IP地址,右键单击该网卡,选择“状态”>“详细信息",如下图所示:

可以看到宿主机共享了网络后,tap0网卡的IP地址变为了192.168.137.1,这个地址即是虚拟机系统中网络的网关地址,掩码即是虚拟机系统中网络的子网掩码。进入kylinV10虚拟机后,可以通过命令行或者图形界面配置网络地址,本次实验中,我将kylinV10虚拟机中的IP地址设置为了192.168.137.101,掩码为255.255.255.0,网关为192.68.137.1,DNS为114.114.114.114。自己的环境可以根据自己的需要修改。
安装完kylinV10系统后,默认是开启了SSH连接,如果没有开启,先判断是否安装了ssh:
yum list installed | grep openssh
[root@localhost ~]# yum list installed | grep openssh
openssh.aarch64 8.2p1-9.p03.ky10 @anaconda
openssh-clients.aarch64 8.2p1-9.p03.ky10 @anaconda
openssh-server.aarch64 8.2p1-9.p03.ky10 @anaconda
如果有以上显示,表示已经安装了openssh,如果没有安装,则执行以下命令安装openssh:
yum install openssh
执行systemctl status sshd命令查看是否已经开启sshd服务:
[root@localhost ~]# systemctl status sshd
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-11-16 18:55:19 CST; 16h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1303 (sshd)
Tasks: 1
Memory: 24.2M
CGroup: /system.slice/sshd.service
└─1303 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
如果有以上显示,则表示已经开启了sshd服务。如果未开启,则使用以下命令开启ssh服务:
systemctl start sshd
使用systemctl is-enabled sshd查看是否设置了sshd开启启动
[root@localhost ~]# systemctl is-enabled sshd
enabled
如果显示的是disable,则通过以下命令设置ssh开机启动:
systemctl enable sshd
如果只是想在当前windows系统中通过ssh连接kylinV10,则只需要ssh user@ip 即可。ip地址是kylinv10中配置的ip地址。本次环境使用的是192.168.137.101,直接ssh root@192.168.137.101即可连接。
如果想在别的机器上通过ssh访问kylinV10,则需要在当前windows系统中设置做端口映射。具体的方法可以通过网络搜索。
如果安装的时候没有选择图形界面,可以忽略此步骤。
systemctl isolate graphical.target 切换为图形模式
systemctl isolate multi-user.target 切换为命令行模式
systemctl set-default graphical.target 设置图形界面为默认模式
systemctl set-default multi-user.target 设置命令行模式为默认模式
只需要执行systemctl set-default multi-user.target,然后重启系统即可。
此问题可能是windows网络共享的问题,在宿主机种右键物理网卡,点击“属性”按钮,在弹出的界面中选择“共享”选项,先取消共享,点击确定后,再次选择共享即可。
Windows Server2008下安装qemu模拟arm架构CPU安装银河麒麟v4
桌面银河麒麟V10字符界面模式与图形界面模式切换方式 - 信创技术联盟
银河麒麟服务器操作系统 V10 SP1 开启SSH服务 - 我命由我不由天—hao - 博客园
使用 qemu-system-ARCH 运行虚拟机 | 虚拟化指南 | SUSE Linux Enterprise Server 15 SP3
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h