【linux】获取内核kernel镜像文件(Image)

从官方发行版镜像提取内核

如果你想运行完整的 Linux 发行版(如 Ubuntu、Debian),可以从官方的 ARM64 镜像 提取内核 (vmlinuzImage)。


步骤 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:安装挂载工具

我们需要 guestfishqemu-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 是专门用于查看和提取虚拟机磁盘内容的工具。

  1. 列出分区

    guestfish --ro -a ubuntu-22.04-server-cloudimg-arm64.img -i list-filesystems
    

    输出示例:

    /dev/sda1: ext4
    
  2. 挂载并查看 /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
    
  3. 提取内核文件

    copy-out /boot/vmlinuz-5.15.0-105-generic .
    mv vmlinuz-5.15.0-105-generic Image
    
  4. 解压内核

    zcat Image > Image.uncompressed
    mv Image.uncompressed Image
    

    这样,你就得到了一个 QEMU 可用的 Image 内核文件。


方法 2:使用 qemu-nbd 挂载提取

如果你不想用 guestfish,可以用 qemu-nbd 直接挂载磁盘。

  1. 加载 nbd 模块

    sudo modprobe nbd max_part=8
    
  2. 挂载镜像

    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
    
  3. 查找 /boot 目录

    ls /mnt/boot
    

    找到类似 vmlinuz-5.15.0-105-generic 的文件。

  4. 复制内核

    cp /mnt/boot/vmlinuz-5.15.0-105-generic .
    mv vmlinuz-5.15.0-105-generic Image
    
  5. 卸载镜像

    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 虚拟机!🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值