天天看點

qemu-kvm裝置hot-plug原理分析前序代碼分析

前序

qemu向外暴露的vm裝置熱拔插cmd是device_add,上層應用程式【libvirt】通過HMP(Human Monitor Protocol)和QMP(Qemu Monitor Protocol)協定與qemu進行互動。HMP是在QMP之上做了一層封裝,供上層應用程式更友好直接通過cmd與qemu互動,而QMP是上層應用程式與qemu之間通過API互動的協定。

代碼分析

以kvm3.0代碼為例

device_add代碼入口,hmp.c

void hmp_device_add(Monitor *mon, const QDict *qdict)
{
    Error *err = NULL;
    qmp_device_add((QDict *)qdict, NULL, &err);
    hmp_handle_error(mon, &err);
}
           

hot-plug device的資訊都儲存在QDict結構體裡,進入到qdev-monitor.c

void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp)
{
    Error *local_err = NULL;
    QemuOpts *opts;
    DeviceState *dev;

    opts = qemu_opts_from_qdict(qemu_find_opts("device"), qdict, &local_err);
    if (local_err) {
        error_propagate(errp, local_err);
        return;
    }
    ...
    dev = qdev_device_add(opts, &local_err);
    
           

繼續閱讀