ioctl 없이 KVM을 사용할 수 있습니까?

ioctl 없이 KVM을 사용할 수 있습니까?

최근에 나는 또는 /dev/kvm구현된 기능이 없는 것 같고 이를 호출하려고 하면 항상 오류 22(잘못된 인수)가 발생한다는 것을 발견했습니다 .read()write()

나는 ioctl 호출을 사용하지 않으려고 노력 중이며 커널에서 ioctl 지원을 완전히 제거하려면 kvm을 사용할 수 있는지 궁금합니다.

ioctl 없이 kvm에 대한 액세스를 호출하는 방법은 무엇입니까?

답변1

이러한 작업을 지원하지 않기 때문에 read(2)/write(2) /dev/kvm을 사용할 수 없습니다. 커널의 kvm 드라이버 소스 코드를 보면 또는여기예를 들어 IOCTL만 지원한다는 것을 알 수 있습니다.

readfops에서 합계 연산이 NULL로 설정되어 있으므로 writeread(2)/write(2)는 실패합니다 -EINVAL(잘못된 인수)(참조: LDD3, 3장, 파일 작업).

아래 소스 virt/kvm/kvm_main.c의 관련 부분을 나열했습니다.

file_options 및 기타 장치는 다음과 같습니다.

static struct file_operations kvm_chardev_ops = {
    .unlocked_ioctl = kvm_dev_ioctl,
    .llseek     = noop_llseek,
    KVM_COMPAT(kvm_dev_ioctl),
};

static struct miscdevice kvm_dev = {
    KVM_MINOR,
    "kvm",
    &kvm_chardev_ops,
};

드라이버 초기화는 기타 장치를 등록하여 /dev/kvm을 사용자 공간에 노출합니다.

int kvm_init(unsigned vcpu_size, unsigned vcpu_align, struct module *module)
{
    :
    /*
     * Registration _must_ be the very last thing done, as this exposes
     * /dev/kvm to userspace, i.e. all infrastructure must be setup!
     */
    r = misc_register(&kvm_dev);
    if (r) {
        pr_err("kvm: misc device register failed\n");
        goto err_register;
    }

    return 0;
    :
}

관련 정보