Emulator Androida i virtualbox nie mogą działać w tym samym czasie

104

Zawsze, gdy mam uruchomione Virtualbox, nie mogę uruchomić obrazu emulatora Androida (i odwrotnie). Komunikat o błędzie w menedżerze AVD to

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

Jak mogę sprawić, by oba działały w tym samym czasie?

To jest 64-bitowy Ubuntu, całe oprogramowanie jest w najnowszej wydanej wersji.

Bananeweizen
źródło

Odpowiedzi:

40

Usunięcie modułów jądra kvm (za pomocą 'sudo rmmod kvm_intel kvm') umożliwia jednoczesne uruchomienie Virtualbox i emulatora Androida, ale wydajność emulatora Androida w takiej konfiguracji jest wyjątkowo niska. Jeśli to możliwe, lepiej zamknąć emulator Virtualbox i zwolnić jego sterownik (vboxdrv), uruchamiając polecenie „sudo /etc/init.d/vboxdrv stop”. Google sugeruje to „rozwiązanie” na swojej stronie emulatora Androida w sekcji dotyczącej Linuksa.

traber
źródło
9
Mój backend wymagał, aby aplikacja działała na danych w VirtualBox (Vagrant), więc to nie jest świetna opcja: P
Richard de Wit
4
To rozwiązanie # @%! Jest spowodowane faktem, że muszę uruchamiać oba w tym samym czasie ... moja usługa HTTPD jest w Virtual Box, podczas gdy moja aplikacja jest w systemie Android ... / me wzdycha. Chyba czas ponownie uruchomić Dev Server.
E Net Arch
1
Inną opcją może być użycie Dockera zamiast VirtualBox w połączeniu z emulatorem Androida.
Matt Welke,
1
Lub uruchom Vagrant z KVM.
Michael Hampton,
Dzięki @MichaelHampton. Zainstalowałem vagrant-libvert i zadziałało!
jchook
30

Mam ten sam konflikt VirtualBox. Rozwiązano to za pomocą ABI innego niż „x86” (w moim przypadku armeabi-v7a)

Stanislav Makarenko
źródło
O wiele bardziej eleganckie niż wyłączanie istniejącej maszyny wirtualnej. Dzięki.
MonoThreaded
2
Smutno to słyszeć.
MatBee
Prawdopodobnie emulator będzie działał w ten sposób wolno, ale jest taka opcja.
ToolmakerSteve
W moim przypadku potrzebuję również maszyny wirtualnej VirtualBox (dla RDP), więc to była naprawdę dobra rada.
Csaba Toth
2
@rudolfbyker, odpowiedź mówi, że emulatory działające z CPU / ABI x86 / x86_64 są dużo szybsze, ale używają tego samego KVM (maszyna wirtualna oparta na jądrze) co VitualBox. Tworzenie emulatora z innym CPU, jak arm64, nie będzie konfliktu z VirtualBox, ale emulator jest dużo wolniej.
jayeffkay
16

Zatrzymałem maszyny wirtualne, które pracowałem z VirtualBox. To sprawiło, że błąd zniknął.

Ole Tange
źródło
To zadziałało dla mnie w Fedorze 20. Przy większych wyświetlaczach, większej ilości pamięci RAM i obszarach roboczych Gnome 3 łatwo zapomnieć, że gdzieś w tle używasz innej maszyny. killall virtualboxpowinien to zrobić.
Ray Foss
Działa, ale nie jest najlepszym rozwiązaniem. Możesz mieć oba (patrz odpowiedź Stanislava)
MonoThreaded
Miałem ten problem z Ubuntu 16 podczas korzystania z maszyny dokującej i sterowników wirtualnych skrzynek. zatrzymanie maszyny wirtualnej za pomocą docker-machine stop machine-namerozwiązania problemu, zgodnie z sugestią zawartą w tej odpowiedzi
Benjamin Slabbert
Okazuje się, że samo zamknięcie GUI VirtualBox i maszyn wirtualnych nie załatwi sprawy. W moim przypadku nadal działało kilka procesów virtualbox: VBoxSVC, VBoxNetDHCP, VBoxXPCCOMIPCD. Zabicie ich w top / htop rozwiązało problem.
Babken Vardanyan
Pytanie brzmiało: „Jak sprawić, by oba programy działały w tym samym czasie?”.
Stephen M - po strajku -
5

Miałem ten sam problem na Ubuntu 13.10. Spróbuj usunąć moduły jądra kvm i kvm_intel.

Aby to zrobić:

  1. Zatrzymaj wszystkie emulatory.
  2. Uruchom polecenie: 'sudo rmmod kvm_intel kvm'

Bez tych modułów jądra emulatory Virtualbox i Android mogą działać w tym samym czasie.

Swoją drogą nie wiem dlaczego moduły są ładowane.

Alexander Zhukov
źródło
16
Słowo ostrzeżenia: chociaż to działa, usunięcie modułów jądra KVM spowoduje znaczny spadek wydajności w przypadku obrazu Intel Android, ponieważ utracisz obsługę akceleracji sprzętowej procesora bez modułów jądra.
JustJohn,
1
@Tajchert: to revert: 'sudo modprobe kvm_intel kvm'
Splitlocked
x86 ... emulatory odmówiły działania bez modułów KVM. Bah.
Martlark
oba sterowniki są potrzebne
user1121055
5

W końcu jest na to rozwiązanie.

Wykonaj następujące kroki dla macOS :

  1. W Android Studio przejdź do Narzędzia -> Android -> Menedżer SDK

  2. Upewnij się, że masz zainstalowaną najnowszą wersję programu Intel Emulator Accelerator HAXM (v6.1.1) Panel preferencji w Android Studio.

  3. Przejdź do extraskatalogu lokalizacji Android SDK wyświetlonej w preferencjach. Na MacOS możesz to zrobić:

    open ~/Library/Android/sdk/extras

  4. Zainstaluj opakowanie HAXM, otwierając IntelHAXM_6.1.1.dmg, a następnie otwierając IntelHAXM_6.1.1.mpkg w zamontowanym folderze i postępując zgodnie z instrukcjami instalatora.

Wykonaj następujące kroki dla systemu Windows :

  1. W Android Studio przejdź do Narzędzia -> Android -> Menedżer SDK

  2. Upewnij się, że masz zainstalowaną najnowszą wersję programu Intel Emulator Accelerator HAXM (v6.1.1) Panel preferencji w Android Studio.

  3. Przejdź do extraskatalogu lokalizacji Android SDK wyświetlonej w preferencjach. Coś jak:

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

  4. W tym katalogu jest jakiś rodzaj pliku intelhaxm-android.exe. Uruchom.

oracz
źródło
2
Czy jest też poprawka dla Ubuntu 16.04.3?
sanders
HAXM nie obsługuje zagnieżdżonych maszyn wirtualnych!
Jorgesys
A co z KVM? Jak mogę zrobić to samo?
Vadim Kotov
Nie chodzi o zagnieżdżone maszyny wirtualne. Problem w tym temacie dotyczy maszyn wirtualnych obok siebie. I nie ma absolutnie żadnego sensu, żeby to nie zadziałało,
Lothar,
Nie ma rozwiązania dla Linuksa. Znowu pech do używania Linuksa. Oznacza to, że muszę teraz wybrać system Windows jako serwer kompilacji.
Lothar
4

Możesz także zmienić ustawienie CPT / ABI z x86 na uzbrojenie w ustawieniach emulatora.

0x8BADF00D
źródło
2
Ale wtedy emulator będzie wolny jak diabli ... ale przynajmniej możesz uruchomić oba naraz;)
biophonc
4

W końcu ten problem stał się przestarzały, używając Genymotion zamiast standardowego emulatora Androida. Poza tym, że nie ma tego konfliktu, jest kilka razy szybszy niż zwykły emulator.

Bananeweizen
źródło
czy to jest wolne oprogramowanie?
vishnu viswanath
@vishnu viswanath Tylko do zastosowań niekomercyjnych. Przeczytaj więcej tutaj genymotion.com/legal/terms-and-conditions poniżej „Licencja udzielona: ograniczona”. Który mówi: Ta licencja jest udzielana użytkownikowi końcowemu tylko i wyłącznie w związku z osobistym użytkiem, użytkownikiem końcowym jest osoba fizyczna, a nie profesjonalista, który pobiera aplikację na potrzeby osobiste i prywatne, z wyłączeniem środowiska komercyjnego i zawodowego.
mykolaj
1
Prawdopodobnie zniknęło, ponieważ genymotion nie używał KVM. Ani stabilne (ponieważ w pewnym momencie zaczną go używać) , ani wydajne rozwiązanie.
Hi-Angel,
Dziękujemy za skomentowanie tej opcji. Zainstalowałbym Genymotion do użytku osobistego w Ubuntu 18.04 i mogę teraz korzystać z maszyn VirtualBox w tym samym czasie :)
Fer B.
3

Innym rozwiązaniem jest użycie vagranta wspieranego przez libvirt przy użyciu wtyczki vagrant-libvirt .

DHH
źródło
2

Chociaż jest to również obejście, ale zdecydowanie lepsze niż wyłączenie KVM, jak wszyscy sugerują.

Zamiast tego po prostu uruchom gościa virtualbox w KVM. Na przykład ( kvmtutaj jest tylko skrypt uruchamiający a qemu-system-x86_64 -enable-kvm) :

kvm Win7.vdi -boot c -m 2G -vga qxl
Cześć aniele
źródło
To rozwiązało problem, ale nie mogę wymyślić, jak połączyć mój wirtualny obraz z Internetem iz jakiegoś powodu mapowanie klawiatury jest pomieszane ...
MikeSchem
@MikeSchem tak, niestety konfiguracja sieci w KVM / QEMU to wielka sprawa. Kiedy pisałem odpowiedź, nie miałem czasu na uruchomienie sieci, ponieważ po kilku manipulacjach gość Windows zaczął spadać z BSOD podczas uruchamiania w KVM, podczas gdy nadal pracował w VB.
Hi-Angel
1

W niektórych przypadkach musimy utrzymywać maszyny virtualbox w stanie nieprzerwanym i działającym, dlatego pozwól, aby wszystkie maszyny virtualbox działały, przełącz się na fizyczne urządzenie mobilne, aby przetestować aplikację zamiast emulatora.

możesz użyć expo, jeśli robisz z natywnym reagowaniem lub prawdziwym urządzeniem z Androidem / iOS.

Ashwin J Chhetri
źródło
0

Może to być poza tematem, ponieważ OP zażądał VirtualBox + KVM w tym samym czasie, ale nadal może to być obejście: szukałem sposobu na uruchomienie systemu Windows 7 i AVD na Ubuntu 18.10 x64. Wyłączenie KVM nie wchodzi w grę, ponieważ wydajność AVD jest dla mnie krytyczna. Zainstalowałem Windows 7 przez Virtual Machine Manager (pakiet virt-manager) i teraz zarówno AVD, jak i Windows 7 są akcelerowane sprzętowo.

vocasle
źródło
0

Oto jak rozwiązano ten problem, używając vagrant i dwóch wtyczek „libvirt” i „mutate”:

  1. Otwórz terminal i ustaw zmienne środowiskowe:

     export VAGRANT_DEFAULT_PROVIDER=libvirt
     export VAGRANT_HOME=/home/directoryToStoreVagrant/
     VBoxManage list vms
    
  2. Teraz skopiuj a kod uzyskany z ostatniego polecenia, na przykład „c1530713-aec2-4415-a6b5-b057928c7e5f” i użyj w następujący sposób:

    pakiet vagrant --base c1530713-aec2-4415-a6b5-b057928c7e5f --output window7.box

     vagrant init window7
     vagrant up window7 --provider=libvirt 
     vagrant box list
    
  3. Musisz zainstalować wtyczki włóczęgów, takie jak libvirt i mutate . Mutate przekonwertuje .box do libvirt VM:

    vagrant plugin zainstaluj vagrant-libvirt vagrant plugin zainstaluj vagrant-mutate

  4. Konwersja Vagrant Box do libvirt:

    vagrant mutate window7_.box libvirt

  5. Teraz możesz zainicjować vagrant VM. Jeśli jakikolwiek błąd nadal występuje, przejdź do edycji pliku Vagrant. Tak jak dla mnie odkomentowuję linię zaczynającą się od config.vm.network, a następnie uruchamiam poniższe polecenie:

    vagrant up --provider=libvirt

W ten sposób mogłem całkowicie pozbyć się tego błędu

muhammad tayyab
źródło