MemoryBackend初始化流程
在上一小节的类层次结构中我们可以看到,MemoryBackend类没有继承自TYPE_DEVICE,而是有一个接口类UserCreatableClass。所以这个对象的初始化流程和其他的类型又略有不同。
这里列举在命令行中添加MemoryBackend的情况,这一切都从main函数开始。
qemu_opts_foreach(qemu_find_opts("object"),
user_creatable_add_opts_foreach,
object_create_delayed, &error_fatal);
user_creatable_add_opts
user_creatable_add_type(type, id, pdict, v, errp);
object_new("memory-backend-file")
host_memory_backend_init
object_property_set(obj, v, e->key, &local_err);
user_creatable_complete(USER_CREATABLE(obj), &local_err);
ucc->complete() host_memory_backend_memory_complete
bc->alloc() [ram|file|memfd]_backend_memory_alloc
可以看出,在main函数中对每一个object命令行参数都会执行上述操作。查询到指定的类型后就会执行user_creatable_add_type。
并且其中特殊的是因为这是一个UserCreatableClass类型,还会调用user_creatable_complete做进一步的操作。
而其中的ucc->complete和bc->alloc就是MemoryBackend类型需要做的特殊操作了。
好了,我觉得已经讲得够多了。具体的细节大家可以在代码中找到。我只再多说一点,对于每个MemoryBackend都会有一个RAMBlock产生~
Last updated
Was this helpful?