KVM-QEMU vdagent实现机制分析(三)

承接KVM-QEMUvdagent实现机制分析2,在qemuvdagent通过虚拟串口打开字符设备的事件传给spice server之后,spice server的处理是怎么样的呢?还是用图来说明比较形象一点:

上图中的步骤解释:

1. 当在虚拟机里启动vdagent,qemuspice_chr_guest_open被触发调用spice server spice_server_add_interface方法添加vdagent这个字符设备

2. spice_server_add_interface 调用 attach_to_red_agent,在attach_to_red_agent

里首先一系列的char dev回调函数被设置,用来在接下来的消息交互中被调用;

3. 然后,attach_to_red_agent调用reds_update_mouse_mode,逻辑是如果原来鼠标模式是SPICE_MOUSE_MODE_CLIENT的话,如果因为vdagent关闭而且没有定义tablet就需要修改将鼠标模式改为SPICE_MOUSE_MODE_SERVER。这个以spiceserver发送RED_WORKER_MESSAGE_SET_MOUSE_MODE 这个消息给spice client的方式来实现;

4. 接下来,attach_to_red_agent又调用main_channel_push_agent_connected方法以发送SPICE_MSG_MAIN_AGENT_CONNECTED这个消息的形式通知spiceclient vdagent已经启动并连接的消息;

5. Spice client收到SPICE_MSG_MAIN_AGENT_CONNECTED消息以后,调用handle_agent_connected(red_client.cpp里面)这个方法进行处理:发送REDC_MAIN_AGENT_START消息给spiceserver作为获知vdagent已经启动的应答;调用send_agent_announce_capabilities

发送 VD_AGENT_ANNOUNCE_CAPABILITIES给spice server 自己的capabilities;调用send_agent_monitors_config

发送VD_AGENT_MONITORS_CONFIG给spice server通知自身的监视器分辨率信息等;

6. Spice server 再将上述消息转给qemu,然后qemu通过上一篇文章介绍的与虚拟机vdagent通信的数据输出队列发送给vdagent;

7. 最后 vdagent根据收到的分辨率信息等修改虚拟机的本地分辨率。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值