一、前言
这篇文章提供了两种使用qemu创建arm64架构的linux虚拟机的方法。方法一比较简单,直接下载了一个ubuntu操作系统镜像而方法二是自己制作根文件系统。在使用方面,因为方法一是安装了ubuntu的操作系统,使用会更便捷一些而方法二无法使用apt也无法识别sudo。
二、方法一:使用iso镜像
1、安装qemu
sudo apt install qemu-system-arm
2、下载UEFI固件
bios镜像,用来引导启动系统
wget http://releases.linaro.org/components/kernel/uefi-linaro/16.02/release/qemu64/QEMU_EFI.fd
3、操作系统
源自清华的镜像站:Index of /ubuntu-cdimage/releases/22.04.4/release/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
可以在这个链接下载自己需要的ubuntu版本。
4、创建虚拟硬盘
使用qemu-img创建一个大小为10G的虚拟硬盘(这个大小可以根据实际情况自行调整)
qemu-img create ubuntuimg.img 10G
5、安装虚拟机
qemu-system-aarch64 -m 4096 -cpu cortex-a57 -smp 4 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu-18.04.4-live-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=ubuntuimg.img,id=hd0 -device virtio-blk-device,drive=hd0
这里的参数也可以根据自己的需要进行调整
然后就会开始安装了,具体过程就是一些语言、用户名密码等设置,可以自行调整。
6、启动虚拟机
安装好虚拟机后,我们可以写一个脚本来运行虚拟机
nano run.sh
qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -device virtio-scsi-device -drive if=none,file=ubuntuimg.img,format=raw,index=0,id=hd0 -device virtio-blk-device,drive=hd0
运行:
./run.sh
三、方法二:使用busybox辅助搭建
1、工具安装
//下载qemu
sudo apt-get install qemu-system-arm
//安装交叉编译工具链
sudo apt-get install gcc-aarch64-Linux-gnu
1、下载编译内核
linux内核下载地址
找到自己需要的版本进行下载好后解压。
先进入内核文件配置以下环境(我下载的是linux6.2)
cd linux6.2
make ARCH=arm64 CROSS_COMPILE = aarch64-linux-gnu- defconfig
这里的CROSS_COMPILE需要注意,后面跟的是你的arm64 gcc的前缀。
编译内核:
make ARCH=arm64 CROSS_COMPILE = aarch64-linux-gnu- Image -j8
运行这个指令后会生成一个Image,这个就是内核镜像。
2、busybox下载配置
先下载busybox ,然后解压
https://busybox.net/downloads/
同样的,进入busybox中,配置一下环境。(我下载的是busybox-1.36.1)
export ARCH=arm64
export CROSS_COMPILE = aarch64-linux-gnu-
make menuconfig
然后会出现一个菜单,更改设置:静态编译
Settings --->
[*] Build static binary(shared libs)
[*] Build with debug information
然后进行编译
make
make install
生成的_install文件夹就是根文件系统。
3、rootfs image制作
首先,构建ext4 image
qemu-img create rootfs.img 10G
mkfs.ext4 rootfs.img
然后将busybox合并到img中
mkdir rootfs //创建rootfs目录
sudo mount rootfs.img rootfs//挂载rootfs.img到rootfs目录
sudo cp -rf _install/* rootfs //拷贝_install到rootfs中
cd rootfs//进入rootfs
sudo mkdir proc sys dev etc etc/init.d //创建关键目录
sudo vim etc/init.d/rcS
rcS内容如下,主要是挂载常使用的虚拟文件系统
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t debugfs none /sys/kernel/debug
然后给rcS增加执行权限
sudo chmod +x etc/init.d/rcS
最后要取消挂载
sudo umount rootfs
以后如果想要从ubuntu系统中传文件到这个虚拟机中也可以用这种方法,挂载rootfs.img到rootfs目录然后把要传的文件复制到rootfs中,再取消挂载,再次启动虚拟机就可以看到这些文件了。
4、qemu启动
同样的,创建一个脚本,内容如下:
qemu-system-aarch64 -machine virt -nographic -m size=1024M -cpu cortex-a72 -smp 2 -kernel /home/z/linux-system/linux-6.2/arch/arm64/boot/Image -drive format=raw,file=/home/z/busybox-1.36.1/rootfs.img -append "root=/dev/vda rw"
-kernel后面加的是Image的路径,file后面是rootfs.img的路径
增加可执行权限然后运行
成功启动。
版权归原作者 拿起键盘写八哥 所有, 如有侵权,请联系我们删除。