qemu 设备模拟(3)

2019-06-11 09:33

sizeof(PITCommonClass), .class_init = pit_common_class_init, .abstract = true, };

staticconstTypeInfopit_common_type={

.name =\ .parent =\ .instance_size=sizeof(PITCommonState), .class_size =sizeof(PITCommonClass), .class_init =pit_common_class_init, .abstract =true, };

hw\\i8254.c

static const TypeInfo pit_info = { .name = \\

sizeof(PITCommonState), .class_init = pit_class_initfn, };

staticconstTypeInfopit_info={

.name =\ .parent =\ .instance_size=sizeof(PITCommonState), .class_init =pit_class_initfn, };

由于TypeInfo只是注册时临时使用,而TypeImpl是TypeInfo的超集,所以,这层关系也反应了TypeImpl的继承关系。

struct TypeImpl { const char *name; size_t class_size; size_t instance_size; void (*class_init)(ObjectClass *klass, void *data); void (*class_base_init)(ObjectClass *klass, void *data); void (*class_finalize)(ObjectClass *klass, void *data); void *class_data; void (*instance_init)(Object *obj); void (*instance_finalize)(Object *obj); bool abstract; const char

*parent; TypeImpl *parent_type; ObjectClass *class; int num_interfaces; InterfaceImpl interfaces[MAX_INTERFACES]; };

1 structTypeImpl 2 {

3 constchar*name; 4 size_tclass_size; 5 size_tinstance_size;

6 void(*class_init)(ObjectClass*klass,void*data);

7 void(*class_base_init)(ObjectClass*klass,void*data); 8 void(*class_finalize)(ObjectClass*klass,void*data); 9 void*class_data; 10 void(*instance_init)(Object*obj); 11 void(*instance_finalize)(Object*obj); 12 boolabstract; 13 constchar*parent; 14 TypeImpl*parent_type; 15 ObjectClass*class; 16 intnum_interfaces; 17 InterfaceImplinterfaces[MAX_INTERFACES]; 18 };

Figure 1 TypeImpl图解 打印查看TypeImpl属性:

(gdb) p *obj->class->type //struct TypeImpl * type

$13 = {name = 0x5555566e5e30 \instance_size = 664, class_init = 0x55555579b790 , class_base_init = 0,

class_finalize = 0, class_data = 0x0, instance_init = 0, instance_finalize = 0, abstract = false, parent = 0x5555566e5e50 \

parent_type = 0x5555566d8bd0, class = 0x555556a50e50, num_interfaces = 0, interfaces = {{typename = 0x0} }} 其主要包含如下部分:

? ?

name/parent/parent_type 表示自己的,父亲的KEY和TypeImpl指针。 class/class_size/class_init/class_base_init/class_finalize/class_data 和ObjectClass联系,组成继承关系。

?

instance_init/instance_finalize和ObjectClass有裙带关系的Object,共同完成继承体系。

?

num_interfaces/interfaces 用于管理接口。 Object和ObjectClass的关系 还是通过这条继承链来看:

\-> \-> \-> \-> \其中ObjectClass链的定义为:

struct ObjectClass { /*< private >*/ Type type; GSList *interfaces; ObjectUnparent *unparent; }; typedef struct DeviceClass { /*<

private >*/ ObjectClass parent_class; /*< public >*/ const char *fw_name; const char *desc; Property *props; int no_user; /* callbacks */ void (*reset)(DeviceState *dev); DeviceRealize realize; DeviceUnrealize unrealize; /* device state */ const struct VMStateDescription *vmsd; /* Private to qdev / bus. */ qdev_initfn init; /* TODO remove, once users are converted to realize */ qdev_event unplug; qdev_event exit; const char *bus_type; } DeviceClass; typedef struct ISADeviceClass { DeviceClass parent_class; int (*init)(ISADevice *dev); } ISADeviceClass; typedef struct PITCommonClass { ISADeviceClass parent_class; int (*init)(PITCommonState *s); void

(*set_channel_gate)(PITCommonState *s, PITChannelState *sc, int val); void (*get_channel_info)(PITCommonState *s, PITChannelState *sc, PITChannelInfo *info); void (*pre_save)(PITCommonState *s); void

(*post_load)(PITCommonState *s); } PITCommonClass;

1 structObjectClass 2 {

3 /*< private >*/ 4 Typetype;

5 GSList*interfaces;

6 ObjectUnparent*unparent; 7 };

8 typedefstructDeviceClass{ 9 /*< private >*/

1 ObjectClassparent_class; 0 /*< public >*/ 1 constchar*fw_name;

1 constchar*desc; 1 Property*props; 2 intno_user; 1 /* callbacks */

3 void(*reset)(DeviceState*dev); 1 DeviceRealizerealize; 4 DeviceUnrealizeunrealize; 1 /* device state */

5 conststructVMStateDescription*vmsd; 1 /* Private to qdev / bus. */

6 qdev_initfninit;/* TODO remove, once users are converted to 1realize */

7 qdev_eventunplug; 1 qdev_eventexit; 8 constchar*bus_type; 1}DeviceClass;

9 typedefstructISADeviceClass{ 2 DeviceClassparent_class; 0 int(*init)(ISADevice*dev); 2}ISADeviceClass;

1 typedefstructPITCommonClass{

2 ISADeviceClassparent_class; 2 int(*init)(PITCommonState*s);

2 void(*set_channel_gate)(PITCommonState*s,PITChannelState*sc3 ,intval);

2 void(*get_channel_info)(PITCommonState*s,PITChannelState*sc4 ,

2 PITChannelInfo*info);

5 void(*pre_save)(PITCommonState*s); 2 void(*post_load)(PITCommonState*s); 6 }PITCommonClass; 27 28 29 30 31 32 3


qemu 设备模拟(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:管理学原理与方法课后习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: