Introduction
Alors depuis qu'on me demande j'ai décidé de consacrer un petit morceau de wiki pour la compilation d'un kernel pour Android. Ce wiki n'est pas là pour expliquer comment on compile un noyau de manière générale, loin de là, si vous n'avez jamais compilé un noyau de votre vie, je pense que vous aurez du mal, mais il faut bien un début à tout dans la vie.
Si vous n'êtes pas familier avec la compilation en général, ou avec la compilation du noyau en général sur un système GNU/Linux de base, si vous ne savez pas ce qu'est la compilation ou un noyau ou un kernel, je vous recommande chaudement de vous entrainer avant, ou ce tuto n'est pas fait pour vous.
Prérequis
Pour compiler il va te falloir un environnement de travail propre. Il faut un système d'exploitation 32 bits, qui tourne sur un kernel linux, je pense que le plus générique possible fera l'affaire, un i386 sera bien donc j'ai choisis pour se faire :
Debian lenny 32 bits i386 installer sur un kvm (kernel virtual machine) Gentoo 64 bits pure (sans une octet 32).
Une fois la machine installée, réelle ou virtuelle, cela n'a pas d'importance, la connexion avec Android n'est pas forcément faite avec cette machine ni même la construction de rom en ce qui me concerne. J'ai dédié une machine virtuelle à la compilation d'Android.
Il faut matériellement parlant 1.5 de ram sur cette machine virtuelle, mais je pense que 2Go ne seront pas de trop, cela ne sert que pour la compilation du full android, à noter que pour compiler uniquement le kernel je ne met que 380 de ram.
Modification des sources.list pour avoir les binaires proprios :
- # vim /etc/apt/sources.list
deb http://ftp2.fr.debian.org/debian/ lenny main contrib non-free
deb-src http://ftp2.fr.debian.org/debian/ lenny main contrib non-free
deb http://security.debian.org/ lenny/updates main contrib non-free
deb-src http://security.debian.org/ lenny/updates main contrib non-free
deb http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main contrib non-free
Mise à jour de la liste des paquets et upgrade s'il y a besoin :
- # aptitude update && aptitude safe-upgrade (pour mettre à jour la machine à jour)
Installation des dépendances :
- # aptitude install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential
zip curl libncurses5-dev zlib1g-dev libreadline5 libreadline5-dev readline-common
Pour finir d'installer les dépendances il faut compiler python 2.4 depuis les sources, car il faut le support readline d'actif :
- # wget "http://www.python.org/ftp/python/2.4.6/Python-2.4.6.tar.bz2"
- # tar xvjf Python-2.4.6.tar.bz2 && cd Python-2.4.6/
- # ./configure --disable-ipv6 --with-readline && make && make install
Si on téléchargeait les sources ?
Premièrement nous allons créer un environnement de travail agréable, avec tout ce qu'il faut, un bon shell etc..
Personnellement j'utilise zsh, je donnerais donc la configuration du shell que j'utilise un ~/.zshrc.
- # mkdir -p /root/Build/bin/ /root/Build/luoAndroid
- # export PATH="$PATH:/root/Build/bin"
- # cd ~/Build && wget "http://android.git.kernel.org/repo" -O bin/repo
ou - # curl http://android.git.kernel.org/repo >~/Build/bin/repo
On continue. - # chmod a+x ~/Build/bin/repo
- # cd ~/Build/luoAndroid/
- # repo init -u git://android.git.us.kernel.org/platform/manifest.git -b cupcake
- # vim .repo/manifest.xml
Remplacer la 4ème ligne par celle là :
fetch="git://android.git.us.kernel.org/"
(je choisis .us, car j'ai rencontré des soucis en laissant par défaut parfois.) Ps: le mail valide n'est pas nécessaire.
Vous venez d'initialiser le repo git Android pour télécharger les sources, maintenant je vais vous montrer comment choisir un kernel dans le lot :) avant de télécharger tant qu'à faire.
On prend un éditeur de texte favoris, pour moi ce sera vim :
- # cd /root/Build/luoAndroid && vim .repo/local_manifest.xml
Si vous voulez le kernel 2.6.27 par exemple vous copiez ça dedans :<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="kernel/common"/>
<project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.27"/>
<project path="vendor/htc/dream" name="platform/vendor/htc/dream" revision="refs/heads/master"/>
<project path="hardware/msm7k" name="platform/hardware/msm7k" revision="refs/heads/master"/>
</manifest>
Vous sauvegardez, vous quittez.
Si vous voulez le kernel 2.6.29 par exemple vous copiez ça dedans :
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remove-project name="kernel/common"/>
<project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.29"/>
<project path="vendor/htc/dream" name="platform/vendor/htc/dream" revision="refs/heads/master"/>
<project path="hardware/msm7k" name="platform/hardware/msm7k" revision="refs/heads/master"/>
</manifest>
Edit by Dagda-Esus (le code pour le 2.6.29 ne marche pas donc je corrige en copiant se que luo m'a passé par mp :p) :
Si vous voulez le kernel 2.6.29 par exemple vous copiez ça dedans :
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project path="kernel" name="kernel/msm" revision="refs/heads/android-msm-2.6.29"/>
</manifest>
Vous sauvegardez, vous quittez.
Téléchargement des sources :
- # cd /root/Build/luoAndroid && repo sync
Passons aux choses sérieuses
Une fois le téléchargement des sources, on a finit tout le blabla du début on va pouvoir faire le plus important, la configuration :
- # cd /root/Build/luoAndroid/kernel/
- # export PATH="$PATH:/root/Build/bin:/root/Build/luoAndroid/prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin"
- # export ARCH=arm
- # export SUBARCH=arm
- # export CROSS_COMPILE=arm-eabi-
Ceci est un export d'environnement, c'est temporaire, dès que vous sortez du shell, les exports sont effacés, je vous recommande pour cela de mettre les export directement dans le fichier ~/.zshrc si vous utilisez zsh ou dans ~/.bashrc.
(Je mettrais mon .zshrc en exemple à la fin)
On continue :
SI VOUS NE FAITES PAS ÇA CE N'EST PAS LA PEINE DE CONTINUER
- # make msm_defconfig (ce script permet d'écrire un fichier de pré configuration valide pour Android) ,
Configurer le noyau :
soit :
soit :
Je n'explique absolument rien à la configuration (pour le moment), celle de départ est valide, si vous ne savez pas ce que vous faites ne touchez à rien et compilez comme ça. Vous pouvez par exemple rechercher CRAMFS pour rajouter le support, rajouter le support de netfilter aussi. Et bien entendu enlever plein de truc inutile qui font gagner en consommation de ressource.
- # make
- # make INSTALL_MOD_PATH=modules modules_install
- # cp arch/arm/boot/zImage /root/my_first_kernel
(Cette image liée à un ramdisk est boot.img biensur)
Compiler le module wifi lié au noyau wlan.ko :
noyau 2.6.27 :
- # cd /root/Build/luoAndroid/system/wlan/ti/sta_dk_4_0_4_32/
- # make KERNEL_DIR=/root/Build/luoAndroid/kernel
Vous verrez une fois fini le chemin pour récupérer le wlan.ko.
noyau 2.6.29 :
- # cd /root/Build/luoAndroid/
- # repo download platform/system/wlan/ti 10344/1
- # cd system/wlan/ti/sta_dk_4_0_4_32/
- # make KERNEL_DIR=/root/Build/luoAndroid/kernel
Vous verrez une fois fini le chemin pour récupérer le wlan.ko.
A noter que chaque version de kernel est lié à un module wlan.ko, donc à chaque recompilation de kernel, pensez à recompiler un wlan.ko histoire d'être sûr de ne pas avoir d'ennuis wifi.
Conclusion
C'est une approche assez basique de la compilation du noyau sur Android, j'espère que cela vous sera utile. C'est loin d'être exhaustif et destiné à des personnes ayant un certain niveau de connaissance dans le domaine.
N'hésitez pas à le corriger, à le remplir, me poser des questions, me demander des informations complémentaires, ou me dire sur quel point je n'aurais pas été clair. Ne venez pas me demander de vous expliquez de A à Z une compilation du kernel, je n'aurais pas le temps. Merci de votre compréhension.
Je vous laisse en exemple un fichier ~/.zsrhrc à placer dans les racines utilisateurs avec un shell zsh par défaut biensur !
http://users.rhaamo.li/~luo/zshrc(Je met ça sous forme de lien car trop gros, contacter moi sur le forum si le lien vient à mourir, merci.)
Besoin d'aide supplémentaire ?
Si vous avez besoin d'un aide supplémentaire n'hésitez surtout pas à aller dans le
forum du site où la communauté Smartphone France se fera un plaisir de vous aider afin que votre expérience Android se passe dans les meilleures conditions possible. N'oubliez jamais que Smartphone France est votre site et qu'il ne vit que pour vous ... et surtout grâce à vous.
Si vous venez d'un autre site n'oubliez pas que ça ne sert à rien de poser vos éventuelles question sur cet autre site. L'endroit où vous avez le plus de chance de trouver réponse à vos questions est sans aucun aucune hésitation sur le site où vous avez pu lire cette information et tout ça ça se passe dans le
forum du site.
Pour rappel Smartphone France est bien plus qu'un simple WIKI. Si vous désirez vous tenir régulièrement au courant de l'actualité Android n'hésitez surtout pas à visiter régulièrement
le site principal.
Votre avis ?
Le principal intérêt d'un Wiki est que tout le monde peut y participer en modifiant tout simplement les pages qu'il désire. Si vous désirez apporter votre pierre à l'édifice, n'hésitez surtout pas à modifier cette page pour y apporter votre témoignage afin de le partager avec "les communautés Windows Mobile et Android Francophones"