学到一个技巧:如何把 osdk 运行的 qemu 命令给 dump 下来,只要 cat /proc/PID/cmdline | strings -n 1 就好了。cmdline 是按 '\0' 分割各个参数的。

astrorinas 比 dragonos 完成度高了好多

打算先用 uninitramfs 把 asterinas 的 initramfs 打开看看里面是什么,然后再改成自己写的安上去。它好像现在还只支持用 initramfs 在内存里跑。

find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img

记一下创建 initramfs 的命令,十年八年才用一回的……

为什么直接用 busybox linuxrc 当 init 程序会让 asterinas 的内核爆掉呢,怪

哎,实在是没搞懂,算了先不搞懂了……

asterinas 好像不让用 shell 脚本当 init?那我怎么 switch root,迷惑

哦,原来是 initrd 的路径写错了(

哎,必须写成 /usr/bin/busybox -- sh -l /init 才是好的,不知道为什么呃啊,好诡异

它疑似不支持 udev,导致 /dev 下面没有 sda 或者 vda 之类的

但是话又说回来

它好像会自动把一个硬盘挂载到 /ext2 这个目录下面,不知道是怎么做到的

一个 qemu 穿进去的外部硬盘……

哦,原来是在内核里硬编码的,硬编码了设备名字

看看能不能 switch_root 进去……不行!busybox 的 switch root 会检测进去的 fs 和外面的 fs 是不是一个 fs,通过 st_dev 来做。然而 asterinas 内核在挂载的时候并没有区分不同的设备。

那能不能用 chroot 之类的手搓一个 switch_root 出来捏

    ~ # chroot ext2 /sh
    Segmentation fault
    ~ # chroot ext2 /busybox
    Segmentation fault
    ~ #

遗憾地,也不行。估计 chroot 的系统调用还没做。

哦!我可以手动把 /usr 那一堆东西链到 /ext2 里……?bind mount 会不会更好些?试试 bind mount 看看。我去,bind mount 是好的!

byd dragonos 和 asterinas 简直卧龙凤雏,一个没网络,一个没磁盘

asterinas 需要一整块磁盘都是 ext2 格式才能正常挂载,也就是说装不了 grub,只能嗯启动了……

在 cli 跑的好好的,放到 pve 上面去跑就无限重启了。估计是 pve 和 cli 的参数哪里没对的上……

哎我好聪明啊,我把 kvm 关掉这样它就跑的慢了,有时间看错误信息了。但是很遗憾还是没有任何错误信息

搞不定了。算了写 rust 去了

感觉 rust 操作系统和 rust minecraft server 一样,都是看着很好但是实际上完成度一坨的东西。。

---

2025-09-22

把 seabios 换成 ovmf 还是不行,算了不玩了