
从2025年12月07日开始的自研内核模块项目启动,到昨日(2026年01月30日),差不多8周的时间,终于可以交付测试和验证了。
使用自研模块后,有多个好处。
首先,镜像读写不再需要通过用户空间的qemu-nbd程序来中转,读写全部都在Linux内核内实现,省却了多次用户空间和内核空间的复制同步环节,效率能够得到提升;
其次,用户空间的qemu-nbd程序受到systemd管理,在启动和关机环节需要特殊处理避开systemd的kill大刀,在redhat系的dracut脚本下,始终无法绕过,使用内核模块后,systemd就管不着了,大路朝天各走一边。
有好必有坏,使用内核模块后,自制镜像的难度上升两个台阶。当然,教程会抹平台阶,让大家操作简单一些。
想象一下,实际活就干了8周的工作量,开发过程经历了多少困难,回想也是侥幸,尽然干成了。。。
目前测试镜像为Manjaro KDE 26.0.1版本,在云固件微信群301提供,2xx系列交流群暂时不提供了,制作难度高,来一堆问题,做技术支持回答没那么多时间和精力,不回答也不好,所以能通过考核飞升到3xx群的爱好者,机会才敞开。如何飞升,参考《云固件微信群“修炼”指南》。
参考教程如下。
initcpio脚本是Arch Linux系列的专属initrd脚本,和sysvinit一样,简单高效。
本教程使用Manjaro作为例子来演示操作过程。
下载Manjaro的安装ISO,添加到Hyper-V虚拟机里面,使用二代虚拟机、关闭安全启动、关闭检查点执行正常安装。
安装过程中,分区结构选择只分ESP和根分区两个分区,不需要swap分区,根分区文件系统使用ext4,切勿使用lvm等等高级磁盘模式。
使用VHDx镜像后,本身就可以通过操作镜像直接调整分区,没必要使用lvm。
云固件相关程序和代码,可以通过在hyperv附加磁盘获取。演示镜像已经提前拷贝到/root用户下。
云固件自举程序包括编译内核模块、编译用户空间程序、添加支持initcpio的shell脚本三个部分,需要准备编译环境。
使用root登录,打开终端,进入/root目录
pacman -S base-devel vim输入上述命令安装编译环境和VIM编辑器
pacman -S linux618-headers输入上述代码安装Linux内核头文件,本例的系统使用6.18内核,所以头文件的包为linux618-headers。如果是6.12内核,那么头文件就会是linux612-headers。
编辑器也可以根据自己的熟悉程度选择其他,当然默认的vi也够用了。
进入/root/下MWVD-6.18文件夹,里面保存了对应6.18内核的分发版本。
make & make install输入make & make install 命令执行编译和安装。 没有错误的话,mwvd.ko(mwvd.ko.zst)将会被安装到/lib/modules/uname -r/updates/下。
make & make install进入/root/MwSetup文件夹,执行make和make install命令,编译操作内核模块的用户空间程序,成功后会被安装到/usr/sbin/下。
进入/root/MwBoot/distros/mkinitcpio文件夹,这里保存了编辑好的initcpio脚本。
复制 hooks/mwvd 到 /etc/initcpio/hooks/下; 复制 install/mwvd 到 /etc/initcpio/install/ 下;
修改/etc/mkinitcpio.conf,找到启用的{HOOKS} 行,添加 mwvd和shutdown两个模块。
修改/lib/udev/rules.d/60-block.rules, 修改第12行,添加“mwvd*|”到loop*|之后。 修改/lib/udev/rules.d/60-persistent-storage.rules, 修改第10行,添加“mwvd*|”到loop*|之后。
上述2行修改,更新initcpio脚本后会被取消。
上述准备步骤完成后,就可以重新生成initramfs启动镜像了。
mkinitcpio -P执行上述命令,就会重新生成启动镜像。至此,添加云固件镜像自举启动就全部完成了。
关闭虚拟机,复制到需要测试的物理机上就可以测试是否可以通过物理机直接启动。 推荐hyperv结合硬盘透传功能,直接原地测试云固件镜像,不需要复杂的再复制步骤。
注意:测试云固件的计算机要求2015年之后生产的x86_64位架构计算机,要求硬盘使用GPT分区表,其他注意事项,可以参照《快速安装指南》中的要求。