โปรแกรมจำลอง Android และ virtualbox ไม่สามารถทำงานพร้อมกันได้


104

เมื่อใดก็ตามที่ฉันใช้ Virtualbox ฉันไม่สามารถเริ่มอิมเมจโปรแกรมจำลอง Android (และในทางกลับกัน) ข้อความแสดงข้อผิดพลาดในตัวจัดการ AVD คือ

ioctl(KVM_CREATE_VM) failed: Device or resource busy
ko:failed to initialize KVM

ฉันจะทำให้ทั้งสองทำงานพร้อมกันได้อย่างไร

นั่นคือ Ubuntu 64 บิตซอฟต์แวร์ที่เกี่ยวข้องทั้งหมดเป็นเวอร์ชันที่เปิดตัวล่าสุด

คำตอบ:


40

การลบโมดูลเคอร์เนล kvm (โดยใช้ 'sudo rmmod kvm_intel kvm') ทำให้สามารถเรียกใช้ Virtualbox และโปรแกรมจำลอง Android พร้อมกันได้ แต่ประสิทธิภาพของโปรแกรมจำลอง Android ในการตั้งค่าดังกล่าวแย่มาก หากเป็นไปได้ควรปิดโปรแกรมจำลอง Virtualbox และยกเลิกการโหลดไดรเวอร์ (vboxdrv) โดยเรียกใช้ 'sudo /etc/init.d/vboxdrv stop' Google แนะนำ "วิธีแก้ปัญหา" นี้ในหน้า Android Emulatorในหัวข้อเกี่ยวกับ Linux


9
แบ็กเอนด์ของฉันต้องการให้แอปมีข้อมูลทำงานบน VirtualBox (Vagrant) ดังนั้นจึงไม่ใช่ตัวเลือกที่ดี: P
Richard de Wit

4
วิธีแก้ปัญหานี้ # @%! เนื่องจากฉันต้องเรียกใช้ทั้งสองอย่างพร้อมกัน .. บริการ HTTPD ของฉันอยู่ใน Virtual Box ในขณะที่แอปของฉันอยู่ใน Android .. / ฉันถอนหายใจ เดาว่าถึงเวลาที่จะเปิดเซิร์ฟเวอร์ Dev อีกครั้ง
E Net Arch

1
อีกทางเลือกหนึ่งคือการใช้ Docker แทน VirtualBox ร่วมกับโปรแกรมจำลอง Android
Matt Welke

1
หรือเรียกใช้ Vagrant ด้วย KVM
Michael Hampton

ขอบคุณ @MichaelHampton ฉันติดตั้งvagrant-libvertและใช้งานได้!
jchook

30

ฉันมีข้อขัดแย้ง VirtualBox เดียวกัน แก้ไขได้โดยใช้ ABI แตกต่างจาก "x86" (armeabi-v7a ในกรณีของฉัน)


สง่างามกว่าการลด VM ที่มีอยู่ลง ขอบคุณ.
MonoThreaded

2
เสียใจที่ได้ยินเรื่องนี้
MatBee

สันนิษฐานว่าโปรแกรมจำลองจะทำงานช้าด้วยวิธีนี้ แต่เป็นตัวเลือก
ToolmakerSteve

ในกรณีของฉันฉันต้องใช้ VirtualBox VM (สำหรับ RDP) ดังนั้นนี่เป็นคำแนะนำที่ดีจริงๆ
Csaba Toth

2
@rudolfbyker สิ่งที่คำตอบกล่าวคืออีมูเลเตอร์ที่ทำงานด้วย CPU / ABI x86 / x86_64 นั้นเร็วกว่ามาก แต่ใช้ KVM (เครื่องเสมือนที่ใช้เคอร์เนล) เดียวกันกับ VitualBox สร้างจำลองกับ CPU อื่นเช่น arm64 จะไม่ขัดแย้งกับ VirtualBox แต่จำลองเป็นมากช้าลง
jayeffkay

16

ฉันหยุดเครื่องเสมือนที่ฉันใช้กับ VirtualBox สิ่งนี้ทำให้ข้อผิดพลาดหายไป


สิ่งนี้ใช้ได้ผลสำหรับฉันใน Fedora 20 ด้วยจอแสดงผลที่ใหญ่ขึ้น RAM และพื้นที่ทำงาน Gnome 3 ที่มากขึ้นทำให้ลืมได้ง่ายๆว่าคุณกำลังใช้งานเครื่องอื่นอยู่เบื้องหลัง killall virtualboxควรทำ
Ray Foss

ใช้ได้ผล แต่ไม่ใช่ทางออกที่ดีที่สุด คุณสามารถมีทั้งสองอย่างได้ (ดูคำตอบของ Stanislav)
MonoThreaded

ฉันมีปัญหานี้กับ Ubuntu 16 ในขณะที่ใช้เครื่องเทียบท่าและไดรเวอร์กล่องเสมือน การหยุด vms ด้วยการdocker-machine stop machine-nameแก้ไขปัญหาตามที่แนะนำในคำแนะนำนี้
Benjamin Slabbert

ปรากฎว่าการปิด VirtualBox GUI และ VM จะไม่ทำเคล็ดลับ ในกรณีของฉันฉันมีกระบวนการ virtualbox หลายอย่างที่ยังทำงานอยู่: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD การฆ่าพวกเขาในด้านบน / htop ช่วยแก้ปัญหาได้
Babken Vardanyan

คำถามคือ 'ฉันจะรันทั้งสองอย่างพร้อมกันได้อย่างไร?'
สตีเฟนเอ็ม - นัดหยุดงาน -

5

ฉันมีปัญหาเดียวกันกับ Ubuntu 13.10 ลองลบโมดูลเคอร์เนล kvm และ kvm_intel

เพื่อทำสิ่งนี้:

  1. หยุดอีมูเลเตอร์ทั้งหมด
  2. เรียกใช้คำสั่ง: 'sudo rmmod kvm_intel kvm'

หากไม่มีโมดูลเคอร์เนลเหล่านี้ Virtualbox และ Android emulators สามารถทำงานได้ในเวลาเดียวกัน

BTW ฉันไม่ทราบสาเหตุที่โหลดโมดูล


16
คำเตือน: แม้ว่าจะได้ผลการลบโมดูลเคอร์เนล KVM จะทำให้ประสิทธิภาพการทำงานของอิมเมจ Intel Android ลดลงอย่างมากเนื่องจากคุณสูญเสียการสนับสนุนการเร่งฮาร์ดแวร์ของ CPU โดยไม่มีโมดูลเคอร์เนล
JustJohn

1
@Tajchert: to revert: 'sudo modprobe kvm_intel kvm'
Splitlocked

x86 ... อีมูเลเตอร์ปฏิเสธที่จะทำงานโดยไม่มีโมดูล KVM บาห์.
Martlark

จำเป็นต้องใช้ไดรเวอร์ทั้งคู่
user1121055

5

ในที่สุดก็มีการแก้ไขสำหรับสิ่งนี้

ทำตามขั้นตอนเหล่านี้สำหรับ macOS :

  1. ใน Android Studio ไปที่ Tools -> Android -> SDK Manager

  2. ยืนยันว่าคุณได้ติดตั้ง Intel Emulator Accelerator HAXM เวอร์ชันล่าสุดแล้ว (v6.1.1) แผงค่ากำหนดใน Android Studio(v6.1.1)

  3. ไปที่extrasไดเร็กทอรีของตำแหน่ง Android SDK ที่แสดงในค่ากำหนด บน MacOS คุณสามารถทำได้:

    open ~/Library/Android/sdk/extras

  4. ติดตั้งบรรจุภัณฑ์ HAXM โดยเปิด IntelHAXM_6.1.1.dmg จากนั้นเปิด IntelHAXM_6.1.1.mpkg ในโฟลเดอร์ที่ต่อเชื่อมและทำตามคำแนะนำของโปรแกรมติดตั้ง

ทำตามขั้นตอนเหล่านี้สำหรับ Windows :

  1. ใน Android Studio ไปที่ Tools -> Android -> SDK Manager

  2. ยืนยันว่าคุณได้ติดตั้ง Intel Emulator Accelerator HAXM เวอร์ชันล่าสุดแล้ว (v6.1.1) แผงค่ากำหนดใน Android Studio(v6.1.1)

  3. ไปที่extrasไดเร็กทอรีของตำแหน่ง Android SDK ที่แสดงในค่ากำหนด สิ่งที่ต้องการ:

    C:\Users\<username>\AppData\Local\Android\sdk\extras

  4. ในไดเร็กทอรีนั้นมีไฟล์บางประเภทเช่นintelhaxm-android.exe. เรียกใช้


2
นอกจากนี้ยังมีการแก้ไขสำหรับ Ubuntu 16.04.3 หรือไม่
แซนเดอร์

HAXM ไม่รองรับเครื่องเสมือนที่ซ้อนกัน!
Jorgesys

KVM ล่ะ? ฉันจะทำเช่นเดียวกันได้อย่างไร?
Vadim Kotov

นี่ไม่เกี่ยวกับเครื่องเสมือนที่ซ้อนกัน ปัญหาในหัวข้อนี้สำหรับเครื่องเสมือนเคียงข้างกัน และมันไม่สมเหตุสมผลเลยที่สิ่งนี้ไม่ควรได้ผล
Lothar

และไม่มีโซลูชันสำหรับ Linux โชคร้ายอีกแล้วสำหรับการใช้งานลินุกซ์ ซึ่งหมายความว่าตอนนี้ฉันต้องเลือก windows เป็นบิลด์เซิร์ฟเวอร์ของฉัน
Lothar

4

คุณยังสามารถเปลี่ยนการตั้งค่า CPT / ABI จาก x86 เป็นแขนในการตั้งค่าโปรแกรมจำลอง


2
แต่แล้วโปรแกรมจำลองจะช้าเหมือนนรก ... แต่อย่างน้อยคุณก็สามารถเรียกใช้ทั้งสองอย่างพร้อมกันได้;)
biophonc

4

ในที่สุดฉันก็ทำให้ปัญหานี้ล้าสมัยโดยใช้ Genymotion แทนโปรแกรมจำลอง Android มาตรฐาน นอกจากจะไม่มีข้อขัดแย้งนี้แล้วยังเร็วกว่าโปรแกรมจำลองปกติหลายเท่า


นี่คือซอฟต์แวร์ฟรีหรือไม่
vishnu viswanath

@vishnu viswanath สำหรับกรณีการใช้งานที่ไม่ใช่เชิงพาณิชย์เท่านั้น อ่านเพิ่มเติมได้ที่นี่genymotion.com/legal/terms-and-conditionsด้านล่าง "อนุญาตให้ใช้สิทธิ์: จำกัด " ซึ่งระบุว่า: ใบอนุญาตนี้มอบให้กับผู้ใช้ปลายทางเท่านั้นและเฉพาะในส่วนที่เกี่ยวข้องกับการใช้งานส่วนบุคคลผู้ใช้ปลายทางเป็นบุคคลธรรมดาไม่ใช่มืออาชีพที่ดาวน์โหลดแอปพลิเคชันสำหรับความต้องการส่วนตัวและส่วนตัวยกเว้นสภาพแวดล้อมทางการค้าและวิชาชีพ
mykolaj

1
สิ่งนี้อาจหายไปเนื่องจาก genymotion ไม่ได้ใช้ KVM ไม่มีความเสถียร(เพราะเมื่อถึงจุดหนึ่งพวกเขาจะเริ่มใช้งาน)หรือโซลูชันที่มีประสิทธิภาพ
Hi-Angel

ขอขอบคุณที่แสดงความคิดเห็นเกี่ยวกับตัวเลือกนี้ ฉันจะติดตั้ง Genymotion สำหรับการใช้งานส่วนตัวใน Ubuntu 18.04 และตอนนี้ฉันสามารถใช้เครื่อง VirtualBox ของฉันได้ในเวลาเดียวกัน :)
เฟอร์บี


2

แม้ว่าจะเป็นวิธีแก้ปัญหา แต่ก็ดีกว่าการปิดใช้งาน KVM ตามที่ทุกคนแนะนำ

เพียงแค่เรียกใช้ virtualbox guest ใน KVM แทน ตัวอย่างเช่น( kvmนี่เป็นเพียงสคริปต์ที่รัน a qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl

สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้ แต่ฉันคิดไม่ออกว่าจะนำภาพเสมือนของฉันไปเชื่อมต่อกับอินเทอร์เน็ตได้อย่างไรและด้วยเหตุผลบางประการการทำแผนที่
คีย์บอร์

@MikeSchem ใช่น่าเสียดายที่การกำหนดค่าเครือข่ายใน KVM / QEMU เป็นเรื่องใหญ่ ย้อนกลับไปเมื่อฉันเขียนคำตอบว่าฉันไม่มีเวลาที่จะทำให้เครือข่ายทำงานได้ดีขึ้นเพราะหลังจากที่ผู้เยี่ยมชม Windows เริ่มล้มเหลวกับ BSOD เมื่อเริ่มต้นใน KVM ในขณะที่ยังคงทำงานใน VB
Hi-Angel


1

ในบางกรณีเราจำเป็นต้องให้เครื่อง virtualbox ทำงานอยู่เสมอดังนั้นจึงปล่อยให้เครื่อง virtualbox ทั้งหมดทำงานต่อไปเปลี่ยนไปใช้อุปกรณ์มือถือจริงเพื่อทดสอบแอปพลิเคชันของคุณแทนโปรแกรมจำลอง

คุณสามารถใช้งานแสดงสินค้าได้หากคุณกำลังทำกับ react-native หรืออุปกรณ์ android / ios จริงของคุณ


0

สิ่งนี้อาจไม่อยู่ในหัวข้อเนื่องจาก OP ขอ VirtualBox + KVM ในเวลาเดียวกัน แต่ถึงกระนั้นก็อาจเป็นวิธีแก้ปัญหา: ฉันกำลังมองหาวิธีเปิด Windows 7 และ AVD บน Ubuntu 18.10 x64 การปิด KVM ไม่ใช่ทางเลือกเนื่องจากประสิทธิภาพของ AVD มีความสำคัญต่อฉัน ฉันติดตั้ง Windows 7 ผ่าน Virtual Machine Manager (แพ็คเกจ Virt-manager) และตอนนี้ทั้ง AVD และ Windows 7 เร่งด้วยฮาร์ดแวร์


0

นี่คือวิธีแก้ไขปัญหานี้โดยใช้คนจรจัดและเป็นปลั๊กอินสองตัว 'libvirt' และ 'mutate':

  1. เปิดเทอร์มินัลและตั้งค่าตัวแปรสภาพแวดล้อม:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. ตอนนี้คัดลอกรหัสที่ได้รับจากคำสั่งสุดท้ายเช่น "c1530713-aec2-4415-a6b5-b057928c7e5f" และใช้ในสิ่งต่อไปนี้:

    แพ็คเกจ vagrant --base c1530713-aec2-4415-a6b5-b057928c7e5f --output window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. คุณจำเป็นต้องติดตั้งปลั๊กอินจรจัดบางอย่างเช่นlibvirtและ กลายพันธุ์ Mutate จะแปลง. box เป็น libvirt VM:

    ปลั๊กอิน vagrant ติดตั้ง vagrant-libvirt vagrant plugin install vagrant-mutate

  4. การแปลงกล่องคนเร่ร่อนเป็น libvirt:

    vagrant mutate window7_.box libvirt

  5. ตอนนี้คุณสามารถเริ่มต้น VM คนจรจัด หากยังมีข้อผิดพลาดให้ย้ายไปแก้ไขไฟล์ Vagrant ของคุณ เช่นเดียวกับฉันฉันยกเลิกการใส่ข้อคิดเห็นบรรทัดเริ่มต้นด้วย config.vm.networkแล้วเรียกใช้คำสั่งด้านล่าง:

    vagrant up --provider=libvirt

นี่คือวิธีที่ฉันสามารถกำจัดข้อผิดพลาดนี้ได้อย่างสมบูรณ์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.