56 votes

Comment compiler le noyau Android AOSP et le tester avec l'émulateur Android ?

Quelqu'un a-t-il réussi à compiler le noyau Android et à le tester dans l'émulateur Android, et si oui, y a-t-il quelque chose de spécial à faire ?

La documentation du SDK est excellente, mais il m'a été difficile de trouver de la documentation pour compiler le noyau et configurer une machine personnalisée dans l'émulateur.

58voto

BMB Points 2024

Depuis août 2009, le noyau ne fait plus partie du manifeste du dépôt standard que vous obtenez lorsque vous suivez les instructions pour télécharger le code source du projet open source Android. Les étapes nécessaires pour télécharger, construire et exécuter avec succès un noyau spécifique sur l'émulateur sont les suivantes :

  • Obtenez le noyau Android soit en l'ajoutant à votre manifeste de dépôt, soit manuellement en exécutant :
    git clone https://android.googlesource.com/kernel/goldfish.git
  • Vérifiez la branche correcte pour travailler avec l'émulateur, c'est-à-dire goldfish :
    git checkout -t origin/android-goldfish-2.6.29 -b goldfish
  • Générer la configuration de l'émulateur (l'émulateur qemu exécute du code arm, c'est à dire une configuration arm) :
    make ARCH=arm goldfish_defconfig
    • si cela ne fonctionne pas, essayez make ARCH=arm goldfish_armv7_defconfig
  • Construisez maintenant le noyau en utilisant les outils de compilation croisée distribués avec le projet open source :
    make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-
  • Le noyau construit de cette façon devrait se retrouver dans le dossier arch/arm/boot de votre arbre de noyau (où vous avez mis le code du clone git).
  • Pour faire fonctionner l'émulateur avec votre noyau, il y a deux alternatives, soit le copier dans le dossier prebuilt kernel du projet open source pour remplacer le noyau standard. L'autre option est de démarrer l'émulateur avec l'option noyau définie :
    emulator -kernel mydroid/kernel/common/arch/arm/boot/zImage

Notez que j'ai utilisé les chemins par défaut dans la description ci-dessus, vous devez les modifier en fonction de votre configuration. Cela fait un certain temps que je n'ai pas testé ceci mais je pense que cela devrait fonctionner.

Quelques informations supplémentaires : Dans la distribution open source standard d'Android, le noyau est distribué sous la forme d'un binaire pré-construit dans le dossier de l'utilisateur. mydroid/prebuilt/android-arm/kernel et le code source n'est pas inclus. Le code source du noyau a été supprimé du manifeste par défaut pour deux raisons, selon moi. La première est que cela prend beaucoup de bande passante et d'espace disque pour un composant de plateforme avec lequel la plupart des gens ne travaillent pas beaucoup. L'autre raison est que, puisque le noyau est construit avec le système de construction du noyau et non comme une partie du système de construction de l'aosp, il est logique de le garder séparé. La branche commune pour le noyau est celle utilisée par l'émulateur. Il existe également des branches pour experimental, msm (plateformes Qualcomm) et Omap (plateforme TI) et peut-être d'autres. Si vous voulez utiliser le noyau Android avec du matériel, celles-ci peuvent être plus intéressantes pour vous.

2 votes

Merci pour les informations supplémentaires ! Étant donné que la plupart de la documentation Android se présente sous la forme de discussions dans des groupes Google, des articles comme celui-ci sont très utiles.

0 votes

Quand j'essaie de télécharger les sources du noyau, il me donne l'erreur suivante : "Android.git.kernel.org[0 : 149.20.4.77] : errno=Connection refused fatal : unable to connect a socket (Connection refused" can u suggest me alternative path to download source.

0 votes

L'emplacement du noyau de l'émulateur a changé avec le déplacement vers Android.googlesource.com après l'arrêt de kernel.org. J'ai mis à jour le post pour être correct.

20voto

Arnaud LM Points 179

Juste pour corriger quelques éléments du post de BMB (qui m'a été très utile, il a sauvé mon projet) :

  • git clone git://Android.git.kernel.org/kernel/common.git (l' Noyau manqué) ;
  • git checkout -t origin/Android-goldfish-2.6.29 -b goldfish (le même) ;
  • make ARCH=arm goldfish_defconfig (idem) ;
  • make ARCH=arm CROSS_COMPILE=mydroid/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi- (idem)
  • emulator -avd my_avd -kernel mydroid/kernel/common/arch/arm/boot/zImage (ici j'ai ajouté un avd dans la commande, cela n'a pas fonctionné sans pour moi).

2 votes

Merci pour ces informations supplémentaires. J'ai modifié mon message pour inclure le chemin correct du noyau, désolé.

0 votes

Comment ajouter plusieurs AVD en utilisant les prebuilts/devtools/tools/Android script ? Cela donne l'erreur "ava.lang.ClassNotFoundException : com.Android.sdklib.repository.SdkRepoConstants".

8voto

hopia Points 1917

Il s'agit d'une mise à jour des réponses de BMB et d'Arnaud LM.
Il semble que les noms de la branche goldfish ont été modifiés à partir du 2011/03/03. Lorsque vous vérifiez la branche goldfish, utilisez ceci :

git checkout -t origin/archive/android-gldfish-2.6.29 -b goldfish 

Notez le 'o' manquant dans Android-gldfish-2.6.29 !

J'espère que cela fera gagner du temps à quelqu'un.

8voto

JohnnyLambada Points 4554

Depuis 2012, le téléchargement du noyau est bien documenté sur source.google.com, mais j'ai trouvé que sa compilation nécessitait quelques essais. Voici les commandes que j'ai utilisées pour construire un noyau pour l'émulateur ARM :

cd /kernel/source/root
make mrproper
adb pull /proc/config.gz # from the emulator
gunzip config
mv config .config  # now you have a (perhaps slightly outdated kernel .config)
make ARCH=arm silentoldconfig # update the .config - take the defaults if prompted
make ARCH=arm menuconfig # make any further changes
time make -j4 ARCH=arm CROSS_COMPILE=/path/to/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi- 2>&1 | tee ../../logs/$(date +%Y%m%d-%H%M)-make-kernel.log
emulator -kernel /kernel/source/root/kernel/goldfish/arch/arm/boot/zImage -avd myAVD &

Merci à tous ceux qui ont répondu à cette question - j'ai pu le faire avec des morceaux de cette réponse. Le "vous avez besoin de l'AVD" d'Amaund est le dernier élément qui m'a posé problème.

0 votes

Cela m'a beaucoup aidé, merci. Il y a cependant une petite erreur de frappe dans votre code. Au lieu de make ARCM=arm menuconfig c'est make ARCH=arm menuconfig . J'ai trouvé cela en copiant et collant aveuglément et en me retrouvant avec un noyau x86 ;-)

6voto

Mostafa Points 7468

C'est facile. Suivez les instructions sur http://source.Android.com/download pour obtenir et compiler le code source de l'ensemble d'Android. Cela prend un certain temps, mais ce n'est pas si compliqué.

En construisant ça, tu auras ta sortie dans le <android>/out répertoire. Cela inclut, en plus des images ROM, un tas d'outils aussi, y compris l'émulateur. Mon émulateur est à <android>/out/host/linux-x86/bin/emulator . Il suffit de définir une variable d'environnement nommée ANDROID_PRODUCT_OUT à <android>/out/target/product/generic et en exécutant l'émulateur sans aucune option, votre ROM compilée sera exécutée.

0 votes

Nous ne cherchons pas à compiler l'émulateur, nous cherchons spécifiquement à compiler le noyau Android et à prendre cette image compilée pour l'exécuter dans l'émulateur.

0 votes

C'est la façon d'exécuter l'image compilée du code source d'Android. Je fais ça tous les jours. Vous compilez juste le code source d'Android et vous aurez un émulateur pour l'exécuter.

2 votes

Comme nous l'avons dit plus haut, nous ne cherchons pas à compiler le code source de l'émulateur. Nous cherchons à compiler le KERNEL Android ( Android.git.kernel.org )

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X