在DragonOS的note段,有一段PVH header,允许qemu使用-kernel
参数启动DragonOS内核。
DragonOS在RISC-V 64上,启动流程为:
opensbi --> uboot --> DragonStub --> kernel
这个启动流程,使得DragonOS内核与具体的硬件板卡解耦,能够以同一个二进制文件,在不同的硬件板卡上启动运行。
DragonOS对内核引导加载程序进行了抽象,体现为BootCallbacks
这个trait。
不同的引导加载程序,实现对应的callback,初始化内核bootParams或者是其他的一些数据结构。
内核启动时,自动根据引导加载程序的类型,注册回调。并且在适当的时候,会调用这些回调函数。