Windows使用QEMU搭建arm64 Linux环境

1. 准备软件

  • QEMU安装包(这里使用的是qemu-w64-setup-20240328.exe 的版本):https://qemu.weilnetz.de/w64/
  • 树莓派系统镜像:http://downloads.raspberrypi.org/raspbian/images/raspbian-2020-02-14/ 树莓派是基于Debian的Linux系统
  • kernel-qemu: https://github.com/dhruvvyas90/qemu-rpi-kernel

2. 安装

双击安装:qemu-w64-setup-20240328.exe
添加qemu安装目录到系统环境变量

下载后文件如下:
在这里插入图片描述

3. 启动ARM的树莓派系统

新建runPi.bat 文件,写入:

qemu-system-arm  -M versatilepb  -cpu arm1176  -m 256  -drive "file=2020-02-13-raspbian-buster.img,if=none,index=0,media=disk,format=raw,id=disk0"  -device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off"  -net "user,hostfwd=tcp::5022-:22"  -dtb ./qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb  -kernel ./qemu-rpi-kernel/kernel-qemu-5.4.51-buster  -append "root=/dev/vda2 panic=1"  -no-reboot -net nic

注意修改里面几个文件(2020-02-13-raspbian-buster.img,versatile-pb-buster.dtb ,kernel-qemu-5.4.51-buster )的路径为自己机器实际路径,

相关指令选项介绍:

  • -M :指定机器
    -name:给虚拟系统起个名称
    -cpu:指定cpu型号
    -smp :指定cpu的个数 比如-smp 2
    -m: 指定内存大小单位MB
    -vga :指定显卡 比如 -vga vmware
    -hda: 指定硬盘镜像
    -initrd: 指定 RAM磁盘镜像
    -fda : 指定软盘镜像
    -L:bios位置
    -cdrom:光盘镜像
    -no-reboot: 不重启退出
    -kernel :指定内核文件
    -serial :设置串口 比如:-serial stdio 表示 重定向Guest 的串口到Host的标准输入输出
    -boot :启动模式 一共有三种 , 分别为floppy(a), hard disk©, CD-ROM(d)

保存后双击该脚本即可启动树莓派系统:
在这里插入图片描述

4. windows下qemu虚拟网卡的配置连接

宿主机网:
在这里插入图片描述

一、对宿主系统(Windows)安装TAP-Win32虚拟网卡,并加入-net参数运行qemu

  • 安装OpenVPN

下载OpenVPN的Windows安装程序。

http://openvpn.net/index.php/open-source/downloads.html

默认勾选TAP Virtual Ethernet Adapter。

安装结束后,Windows会出现一个新的虚拟网卡。

  • 设置qemu外windows的虚拟网卡的IP

右键“网络邻居”->属性,打开“网络连接”

把新的TAP-Win32 Adapter V9网卡的名称改为my-tap。
右键->属性->Internet协议(TCP/IP)
双击后选择“使用下面的IP地址”
把IP地址和子网掩码分别改为:
192.168.2.39
255.255.255.0

  • 用-net参数启动qemu虚拟机
 -net nic -net tap,ifname=my-tap
  • 配置qemu内ubuntu的网卡IP和默认网关
    为虚拟机内部设置一个不同的IP,虚拟机外部的host机IP(假设为192.168.2.39)设置为默认网关
sudo ifconfig eth0 192.168.2.40
sudo route add default gw 192.168.2.39 eth0
  • 恢复IP设置

正常情况下,只要重启qemu就可还原虚拟机内ubuntu的IP和网关设置。

如果想手动删除默认网关,可键入:(假设虚拟网卡以192.168.200.10为IP)

$ sudo route del default gw 192.168.200.10 eth0

如果想重新设置虚拟系统(例如qemu内的ubuntu)的对外IP,

直接执行ifconfig指定新的IP即可。

例如sudo ifconfig eth0 192.168.200.12。

4.测试

ping www.baidu.com 成功

接下来我们通过ssh连接树莓派终端,打开cmd命令窗口,输入:

ssh pi@127.0.0.1 -p 5022

5. 程序调试

紧接着使用gdb+gdbserver对C程序进行调试

首先利用ftp工具将已经编译好的可执行文件和GCC包下arm-none-linux-gnueabi\libc\usr\bin目录中的gdbserver传送到模拟器中

然后执行以下命令:

./gdbserver :22349 test

该模拟器的ip不在局域网段上,宿主机连接不上, 可以采用端口映射的办法来替代,只需要在模拟器启动时多追加加上一行参数hostfwd=tcp::22349-:22349,具体启动指令修改如下:

qemu-system-arm  -M versatilepb  -cpu arm1176  -m 256  -drive "file=2020-02-13-raspbian-buster.img,if=none,index=0,media=disk,format=raw,id=disk0"  -device "virtio-blk-pci,drive=disk0,disable-modern=on,disable-legacy=off"  -net "user,hostfwd=tcp::5022-:22,hostfwd=tcp::22349-:22349"  -dtb ./qemu-rpi-kernel/versatile-pb-buster-5.4.51.dtb  -kernel ./qemu-rpi-kernel/kernel-qemu-5.4.51-buster  -append "root=/dev/vda2 panic=1"  -no-reboot -net nic

如此一来就可以在宿主gdb调试窗口中直接使用以下指令进行连接:

(gdb) target remote 127.0.0.1:22349
连接成功了,通过以上这种方式,我们只需要将模拟器启动使其后台运行,我们通过ssh进行登录连接,这样速度快了很多,而且相比一些安卓模拟器,QEMU占用系统资源也不高

另外我们发现,还存在声卡缺失,同时运行有延迟卡顿现象,我们接下来对这两方面进行优化

小问题
如果是raw格式,可能会有些风险警告,可以通过-drive format=raw进行指定处理:

qemu-system-arm.exe  -machine raspi2b -drive file=2020-02-13-raspbian-buster.img,format=raw,index=0,media=disk

6. 镜像备份模式

随着我们对系统的频繁操作我们发现系统镜像文件在不断增大,此时想要回到原来的状态,只能重新下载镜像安装了,如果你不想遭受重新下载的痛苦,那么建议你使用备份镜像的模式进行系统的安装

这时qemu-img.exe派上了用场,它不仅可以帮助你创建空镜像文件,而且还可以对已有的镜像文件进行格式转换,QEMU支持的镜像有以下:

qemu-img 支持非常多种的文件格式,可以通过 qemu-img -h 查看. 其中 raw 和 qcow2 是比较常用的两种, raw 是 qemu-img 命令默认的,qcow2 是 qemu 目前推荐的镜像格式,是功能最多的格式

创建空镜像文件:

qemu-img create -f qcow2 test.qcow2 10G

-f 选项用于指定镜像的格式,
qcow2 格式是 QEMU最常用的镜像格式,采用来写时复制技术来优化性能。
test.qcow2 是镜像文件的名字,
10G是镜像文件最大值
镜像转换:

qemu-img.exe  convert -f raw system.img -O vmdk  system.vmdk

表示将原始格式的镜像文件转换成vmdk格式

使用备份镜像的方式启动镜像示例:

qemu-system-x86_64 -m 2048 -enable-kvm test.qcow2 -cdrom Centos-Desktop-x86_64-20-1.iso

7. 安装Ubuntu18的脚本(可选)

下载ubuntu-18.04.4 arm server版
https://old-releases.ubuntu.com/releases/18.04/ubuntu-18.04.4-server-arm64.iso

下载EFI
http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd

6、创建空白磁盘
来到目标保存目录,打开cmd,输入

qemu-img create ubuntuarm64.img 50G

7、安装系统
cmd输入以下命令。注意,安装光盘、空白磁盘、EFI、tap网卡路径及名称根据实际填写。

qemu-system-aarch64.exe -m 8192 -cpu cortex-a72 -smp 8,sockets=4,cores=2 -M virt -bios QEMU_EFI.fd -net nic -net tap,ifname=my_tap -device VGA -drive if=none,file=./ubuntu-18.04.4-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=./ubuntuarm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -device nec-usb-xhci -device usb-ehci -device usb-kbd -device usb-mouse  -accel tcg,thread=multi

此时可以看到ubuntu安装选项
在这里插入图片描述
后续启动
后续如果想要重新启动qemu,不需要再重新安装ubuntu,用以下命令启动即可。

qemu-system-aarch64.exe -m 4096 -cpu cortex-a57 -smp 2 -M virt -bios ./QEMU_EFI.fd -net nic -net tap,ifname=my_tap -device VGA -drive if=none,file=./ubuntuarm64.img,id=hd0 -device virtio-blk-device,drive=hd0 -device usb-ehci -device usb-kbd -device usb-mouse

7. 换源:

sudo vim /etc/apt/source.list
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security multiverse

8.设置静态IP

在Ubuntu 18.04中设置静态IP地址,你可以编辑/etc/netplan目录下的配置文件。通常文件名为01-netcfg.yaml,但可能会有所不同。

以下是设置静态IP的步骤和示例配置:

找到Netplan配置文件。通常这个文件位于/etc/netplan/目录下。

ls /etc/netplan/

编辑该配置文件。你需要使用一个文本编辑器,如nano或vim。

sudo nano /etc/netplan/01-netcfg.yaml

修改配置文件以设置静态IP。以下是一个配置示例:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: no
      addresses:
        - 192.168.1.10/24
      gateway4: 192.168.1.1
      nameservers:
          addresses: [8.8.8.8, 8.8.4.4]

确保将enp0s3替换为你的网络接口名称,192.168.1.10替换为你想要的静态IP地址,192.168.1.1替换为你的网关地址,以及8.8.8.8和8.8.4.4替换为你选择的DNS服务器地址。

保存文件并退出编辑器。

应用配置。

sudo netplan apply

确认静态IP设置成功。

ip addr show

9. 附加镜像

openwrt:https://archive.openwrt.org/chaos_calmer/
Debian系统镜像:https://people.debian.org/~aurel32/qemu/
谷歌安卓原生镜像:https://developers.google.cn/android/images
树莓派x86镜像: https://www.raspberrypi.org/downloads/raspberry-pi-desktop/
Ubuntu22镜像:http://old-releases.ubuntu.com/releases/22.10/ubuntu-22.10-live-server-arm64.iso

https://blog.csdn.net/sinat_24468029/article/details/52918535
https://www.freebuf.com/sectool/368589.html

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值