In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-31 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Servers >
Share
Shulou(Shulou.com)05/31 Report--
This article will explain in detail the sample code about KVM based VM example cpde. The editor thinks it is very practical, so I share it with you for reference. I hope you can get something after reading this article.
/ * Sample code for / dev/kvm API * * Copyright (c) 2015 Intel Corporation * Author: Josh Triplett * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so Subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. * / # include # include int main (void) {int kvm, vmfd, vcpufd, ret Const uint8_t code [] = {0xba, 0xf8, 0x03, / * mov $0x3f8,% dx * / 0x00, 0xd8, / * add% bl,% al * / 0x04,% al * / 0xee, / * out% al, (% dx) * / 0xb0,'\ n' / * mov $'\ nfarmer,% al * / 0xee, / * out% al, (% dx) * / 0xf4, / * hlt * /} Uint8_t * mem; struct kvm_sregs sregs; size_t mmap_size; struct kvm_run * run; kvm = open ("/ dev/kvm", O_RDWR | O_CLOEXEC); if (kvm = =-1) err (1, "/ dev/kvm"); / * Make sure we have the stable version of the API * / ret = ioctl (kvm, KVM_GET_API_VERSION, NULL) If (ret = =-1) err (1, "KVM_GET_API_VERSION"); if (ret! = 12) errx (1, "KVM_GET_API_VERSION% d, expected 12", ret); vmfd = ioctl (kvm, KVM_CREATE_VM, (unsigned long) 0); if (vmfd = =-1) err (1, "KVM_CREATE_VM"); / * Allocate one aligned page of guest memory to hold the code. * / mem = mmap (NULL, 0x1000, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS,-1,0); if (! mem) err (1, "allocating guest memory"); memcpy (mem, code, sizeof (code)); / * Map it to the second page frame (to avoid the real-mode IDT at 0). * / struct kvm_userspace_memory_region region = {.slot = 0, .guest _ phys_addr = 0x1000, .memory _ size = 0x1000, .userspace _ addr = (uint64_t) mem,}; ret = ioctl (vmfd, KVM_SET_USER_MEMORY_REGION, & region); if (ret = =-1) err (1, "KVM_SET_USER_MEMORY_REGION") Vcpufd = ioctl (vmfd, KVM_CREATE_VCPU, (unsigned long) 0); if (vcpufd = =-1) err (1, "KVM_CREATE_VCPU"); / * Map the shared kvm_run structure and following data. * / ret = ioctl (kvm, KVM_GET_VCPU_MMAP_SIZE, NULL); if (ret = =-1) err (1, "KVM_GET_VCPU_MMAP_SIZE"); mmap_size = ret; if (mmap_size)
< sizeof(*run)) errx(1, "KVM_GET_VCPU_MMAP_SIZE unexpectedly small"); run = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, vcpufd, 0); if (!run) err(1, "mmap vcpu"); /* Initialize CS to point at 0, via a read-modify-write of sregs. */ ret = ioctl(vcpufd, KVM_GET_SREGS, &sregs); if (ret == -1) err(1, "KVM_GET_SREGS"); sregs.cs.base = 0; sregs.cs.selector = 0; ret = ioctl(vcpufd, KVM_SET_SREGS, &sregs); if (ret == -1) err(1, "KVM_SET_SREGS"); /* Initialize registers: instruction pointer for our code, addends, and * initial flags required by x86 architecture. */ struct kvm_regs regs = { .rip = 0x1000, .rax = 2, .rbx = 2, .rflags = 0x2, }; ret = ioctl(vcpufd, KVM_SET_REGS, ®s); if (ret == -1) err(1, "KVM_SET_REGS"); /* Repeatedly run code and handle VM exits. */ while (1) { ret = ioctl(vcpufd, KVM_RUN, NULL); if (ret == -1) err(1, "KVM_RUN"); switch (run->Exit_reason) {case KVM_EXIT_HLT: puts ("KVM_EXIT_HLT"); return 0 Case KVM_EXIT_IO: if (run- > io.direction = = KVM_EXIT_IO_OUT & & run- > io.size = = 1 & & run- > io.port = = 0x3f8 & & run- > io.count = = 1) putchar (* ((char *) run) + run- > io.data_offset); else errx (1, "unhandled KVM_EXIT_IO"); break Case KVM_EXIT_FAIL_ENTRY: errx (1, "KVM_EXIT_FAIL_ENTRY: hardware_entry_failure_reason = 0x%llx", (unsigned long long) run- > fail_entry.hardware_entry_failure_reason); case KVM_EXIT_INTERNAL_ERROR: errx (1, "KVM_EXIT_INTERNAL_ERROR: suberror = 0x%x", run- > internal.suberror) Default: errx (1, "exit_reason = 0x%x", run- > exit_reason);} this is the end of the article on "sample code of KVM based VM example cpde". I hope the above content can be helpful to you, so that you can learn more knowledge. if you think the article is good, please share it for more people to see.
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
Https://www.cnblogs.com/LinHuChongChongChong/
© 2024 shulou.com SLNews company. All rights reserved.