如何修复 initramfs 以在 qemu 上启动 Linux 内核映像?

如何修复 initramfs 以在 qemu 上启动 Linux 内核映像?

我使用的是 M2 mac。我在 aarch64v8/ubuntu docker 容器中构建了 linux 内核。这是 docker-compose.yml

version: "3"
services:
  dev:
    image: arm64v8/ubuntu
    platform: linux/arm64
    volumes:
      - .:/root/myfolder
    working_dir: /root
    #cpus: 
    network_mode: host
    security_opt:
      - seccomp:unconfined
    cap_add:
      - SYS_PTRACE

我下载了 linux-5.10.209 并构建了内核。有效。我下载了 busybox-1.36.1,并构建了它。它也起作用了。

这是我的根文件系统:

(base) varunnawathey@Varuns-MacBook-Pro rootfs % ls -l
total 0
drwxr-xr-x@ 95 varunnawathey  staff  3040 Feb  3 02:58 bin
drwxr-xr-x   6 varunnawathey  staff   192 Feb  3 03:09 dev
drwxr-xr-x   2 varunnawathey  staff    64 Feb  3 03:03 etc
lrwxr-xr-x   1 varunnawathey  staff    11 Feb  3 03:04 init -> bin/busybox
lrwxr-xr-x@  1 varunnawathey  staff    11 Feb  3 02:58 linuxrc -> bin/busybox
drwxr-xr-x   2 varunnawathey  staff    64 Feb  3 03:03 proc
drwxr-xr-x@ 74 varunnawathey  staff  2368 Feb  3 02:58 sbin
drwxr-xr-x   2 varunnawathey  staff    64 Feb  3 03:03 sys
drwxr-xr-x@  4 varunnawathey  staff   128 Feb  3 02:55 usr
(base) varunnawathey@Varuns-MacBook-Pro rootfs % ls -l dev
total 0
crw-rw----  1 root  staff  0x1000001 Feb  3 03:06 mem
crw-rw----  1 root  staff  0x1000001 Feb  3 03:07 ttyS2
crw-rw----  1 root  staff  0x1000001 Feb  3 03:07 ttyS3
crw-rw----  1 root  staff  0x1000001 Feb  3 03:07 ttyS4

我跑了这个:

sudo find .  -print0 | cpio --null -ov --format=newc | gzip -9 > ../rootfs.cpio.gz

我有一堵文字墙,但我认为这里出了问题:

./sbin/tunctl
./sbin/mkdosfs
./sbin/blkid
./etc
./sys
./linuxrc
./dev
cpio: Couldn't list extended attributes
./dev/ttyS4
cpio: Couldn't list extended attributes
./dev/ttyS3
cpio: Couldn't list extended attributes
./dev/ttyS2
cpio: Couldn't list extended attributes
./dev/mem
4302 blocks

我尝试制作 rootfs,但没有成功。这就是我被困住的地方。有一些步骤需要 mknod,但在 docker 容器中是不允许的。

我不知道在这里做什么。如果我必须通过主机而不是在 docker 容器中运行 mknod,我不知道应该如何制作 initramfs。

这只是挂起:

qemu-system-aarch64 -M virt -m 256M -kernel linux-5.10.209/arch/arm64/boot/Image -initrd rootfs.cpio.gz -append "root=/dev/mem" -nographic

我应该让 docker 容器享有特权吗?我该怎么做呢?

或者我是否缺少使用 qemu 启动内核所需的东西?

相关内容