http://www.linuxjournal.com/magazine/linux-kvm-learning-tool?page=0,1
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <libkvm.h> /* callback definitions as shown in Listing 2 go here */ void load_file(void *mem, const char *filename) { int fd; int nr; fd = open(filename, O_RDONLY); if (fd == -1) { fprintf(stderr, "Cannot open %s", filename); perror("open"); exit(1); } while ((nr = read(fd, mem, 4096)) != -1 && nr != 0) mem += nr; if (nr == -1) { perror("read"); exit(1); } close(fd); } #define MEMORY_SIZE (0x1000000) /* 16 Mb */ #define FIRST_VCPU (0) int main(int argc, char *argv[]) { kvm_context_t kvm; void *memory_area; /* Second argument is an opaque, we don't use it yet */ kvm = kvm_init(&my_callbacks, NULL); if (!kvm) { fprintf(stderr, "KVM init failed"); exit(1); } if (kvm_create(kvm, MEMORY_SIZE, &memory_area) != 0) { fprintf(stderr, "VM creation failed"); exit(1); } #ifndef KVM_VERSION_LESS_THAN_65 if (kvm_create_vcpu(kvm, FIRST_VCPU)) { fprintf(stderr, "VCPU creation failed"); exit(1); } #endif memory_area = kvm_create_phys_mem(kvm, 0, MEMORY_SIZE, 0, 1); load_file(memory_area + 0xf0000, argv[1]); kvm_run(kvm, FIRST_VCPU); return 0; }