Émulateur Android x86 avec accélération matérielle sur processeur AMD

Depuis que Leeloo et mes parents m’ont offert un Samsung Galaxy S3, j’ai repris goût au développement sous Android. J’avais bien fait quelques tentatives avec mon vieux HTC Dream, mais 128 Mo de mémoire m’avaient vite dissuadé. Avant toute chose, j’ai cherché à créer un environnement de test confortable. Mon ancien boss m’avait convaincu depuis de longues années que le TDD (Test Driven Development, le développement logiciel piloté par les tests) était la voie à suivre.

Je n’aime pas me séparer d’une machine qui marche encore, et ma fidèle qy.net ne montre aucun signe de fatigue malgré presque 4 ans de services continus (c’est ma machine de travail qui fait aussi routeur de la maison). Si le processeur AMD Turion TL56 (processeur double cœur à 1.8 GHz) me suffit pour mes développements quotidiens, il montre ses limites lors de l’utilisation de l’émulateur ARM du kit de développement Android, c’est très lent !

Ce processeur supporte la virtualisation matérielle, j’ai donc pensé utiliser l’image Atom x86 d’Android proposée par Intel, jugeant similaire, tout du moins à mon niveau, le développement d’applications en java pour appareils Android à base de jeu d’instruction ARM ou x86.

Mais, même en suivant scrupuleusement le manuel officiel, l’écran de l’émulateur reste désespérément noir quand j’active l’accélération matérielle avec KVM.

L’interface de la commande android avd ne donne pas beaucoup de retour sur les raisons de l’échec.

En lançant l’émulateur directement depuis la ligne de commande :

emulator -avd W1 -show-kernel -verbose 

Le problème est rapidement trouvé :

[    0.582943]  mmcblk0:
[    0.589697] registered taskstats version 1
[    0.589697] Freeing unused kernel memory: 288k freed
[    0.599681] Kernel panic - not syncing: Attempted to kill init!

Le noyau linux ne parvient pas à démarrer. Pourtant la machine charge une bonne partie du démarrage et ne plante que lors de l’accès au système de fichier principal. Il ne fait aucun doute toutefois que le problème est lié à l’accélération matérielle KVM, car en la désactivant avec la commande :

emulator -avd W1 -show-kernel -verbose -qemu -disable-kvm

Le système démarre alors normalement. Leeloo a un portable utilisant des processeurs de la marque Intel, j’y ai vérifié rapidement que l’accélération marche correctement sur son système. Après quelques recherches supplémentaires et des essais sur processeurs AMD opteron 170, opteron 2356 et divers Xeon, le doute ne persiste plus : impossible d’avoir l’accélération sur un processeur de marque AMD, alors que tout marche parfaitement sur processeur Intel.

Abandon par KO

J’ai passé de nombreuses soirées à tenter de faire fonctionner l’accélération matérielle sur mon processeur AMD, en recompilant à peu près tout le kit de développement d’Android, et je n’ai pas réussi à le faire fonctionner avec le système de virtualisation kvm. J’ai pu aller un peu plus loin dans le démarrage, mais il semble qu’un problème de gestion mémoire entraîne toujours à un moment ou à un autre un plantage de la machine virtuelle.

Je n’ai finalement eu qu’un succès partiel en utilisant virtualbox comme machine virtuelle. Dans cette configuration, il faut recompiler le kit Android pour virtualbox,  tout est assez bien expliqué sur les différents forums liés au sujet pour y parvenir. Le résultant n’est cependant pas extraordinaire car si le système de base marche à peu près, de très nombreuses applications plantent aléatoirement, laissant suggérer que tout n’est pas complètement au point…

Laisser un commentaire

%d blogueurs aiment cette page :