从官方发行版镜像提取内核
如果你想运行完整的 Linux 发行版(如 Ubuntu、Debian),可以从官方的 ARM64 镜像 提取内核 (vmlinuz
或 Image
)。
步骤 1:下载官方 ARM64 镜像
首先,下载官方提供的 Ubuntu ARM64 镜像,这里以 Ubuntu 22.04 Server 为例:
wget https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-arm64.img
也可以去 Ubuntu 官方云镜像 选择最新版本。
如果你需要 Debian:
wget https://cdimage.debian.org/cdimage/cloud/latest/debian-12-generic-arm64.qcow2
步骤 2:安装挂载工具
我们需要 guestfish
或 qemu-nbd
来挂载 .img
或 .qcow2
镜像文件,以提取 /boot
目录中的内核和设备树。
安装 guestfish
sudo apt update
sudo apt install -y libguestfs-tools
安装 qemu-nbd
如果你选择用 qemu-nbd
,需要安装:
sudo apt install -y qemu-utils
方法 1:使用 guestfish 提取内核
guestfish
是专门用于查看和提取虚拟机磁盘内容的工具。
-
列出分区
guestfish --ro -a ubuntu-22.04-server-cloudimg-arm64.img -i list-filesystems
输出示例:
/dev/sda1: ext4
-
挂载并查看
/boot
目录guestfish --ro -a ubuntu-22.04-server-cloudimg-arm64.img -i
进入交互模式后,运行:
ls /boot
你应该能看到类似的文件:
vmlinuz-5.15.0-105-generic initrd.img-5.15.0-105-generic
-
提取内核文件
copy-out /boot/vmlinuz-5.15.0-105-generic . mv vmlinuz-5.15.0-105-generic Image
-
解压内核
zcat Image > Image.uncompressed mv Image.uncompressed Image
这样,你就得到了一个 QEMU 可用的
Image
内核文件。
方法 2:使用 qemu-nbd 挂载提取
如果你不想用 guestfish
,可以用 qemu-nbd
直接挂载磁盘。
-
加载
nbd
模块sudo modprobe nbd max_part=8
-
挂载镜像
sudo qemu-nbd --connect=/dev/nbd0 ubuntu-22.04-server-cloudimg-arm64.img sudo fdisk -l /dev/nbd0 # 查看分区信息
假设
/dev/nbd0p1
是根文件系统(通常是 ext4),然后挂载:sudo mount /dev/nbd0p1 /mnt
-
查找
/boot
目录ls /mnt/boot
找到类似
vmlinuz-5.15.0-105-generic
的文件。 -
复制内核
cp /mnt/boot/vmlinuz-5.15.0-105-generic . mv vmlinuz-5.15.0-105-generic Image
-
卸载镜像
sudo umount /mnt sudo qemu-nbd --disconnect /dev/nbd0
步骤 3:提取 initrd(可选)
如果你的系统需要 initramfs,可以同时提取 initrd.img
:
cp /mnt/boot/initrd.img-5.15.0-105-generic initrd.img
并在 QEMU 启动时加入:
-initrd initrd.img
步骤 4:获取设备树(可选)
如果你的模拟目标需要 设备树(DTB),可以从 /boot/dtb/
或 /boot/dtbs/
目录获取:
cp -r /mnt/boot/dtb-* dtb/
或者从 /usr/lib/linux-image-*/
目录获取。
总结
方法 | 适用情况 | 主要命令 |
---|---|---|
guestfish | 更安全、自动识别文件系统 | guestfish --ro -a img -i copy-out |
qemu-nbd | 适用于手动挂载 | qemu-nbd --connect=/dev/nbd0 + mount /mnt |
完整 QEMU 启动示例
假设你已经提取了:
- 内核镜像:
Image
- 根文件系统:
ubuntu-22.04-server-cloudimg-arm64.img
- initrd(可选):
initrd.img
启动命令
qemu-system-aarch64 \-machine virt,virtualization=true,gic-version=3 \-cpu cortex-a55 -smp 4 -m 2048M \-nographic \-net nic -net tap,ifname=tap0,script=no \-kernel Image \-initrd initrd.img \-hda ubuntu-22.04-server-cloudimg-arm64.img \-append "root=/dev/vda rw console=ttyAMA0"
这样,你就能使用 官方发行版的 ARM64 镜像 运行 QEMU 虚拟机!🚀