我使用的是 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 启动内核所需的东西?