Noyau Android exécutant un noyau personnalisé

Il existe deux façons d'obtenir le noyau Android, l'une consiste à extraire le noyau de l'appareil, vous pouvez voir mon autre article " Extraction du noyau du noyau Android ", y compris l'introduction du format de fichier image dans cet article; Il s'agit de télécharger le code source du noyau sur le site officiel, de le compiler puis de le flasher sur le téléphone mobile. Ici, nous parlons de la deuxième façon.

Mon environnement de compilation est Mac10.10, l'appareil Android est Nexus4, la version AOSP est Android4.4.

1. Obtenez le code source du noyau

Il existe de nombreuses façons d'obtenir le code source du noyau, selon la personne responsable du noyau du périphérique. Google fournit un référentiel git du noyau pour les appareils pris en charge par AOSP, et les OEM peuvent utiliser différentes méthodes pour publier le code source du noyau. Mais quoi qu'il arrive, le noyau sera définitivement publié, car le noyau Linux suit l'accord GPL. Ici, nous parlons principalement du code source du noyau AOSP.
Vous allez d'abord sur http://source.android.com/source/building-kernels.html pour trouver le chemin git du code source du noyau correspondant au nom de votre appareil. Comment connaissez-vous le nom de votre appareil? Entrez la commande suivante sur la ligne de commande de l'appareil:
getprop ro.hardware
Comment vérifier le modèle de puce de l'appareil? Entrez la commande suivante sur la ligne de commande du périphérique:
shell@mako:/data $ ls /dev/block/platform/                                     
msm_sdcc.1
Mon appareil est Nexus4, le logo de l'appareil est mako et la puce est msm, qui est la puce de Qualcomm.
De cette façon, l'adresse du code source du noyau est trouvée. Entrez simplement la commande suivante sous votre répertoire racine AOSP:
BriansdeMacBook-Pro:Android4.4 brian$ mkdir kernel && cd $_
BriansdeMacBook-Pro:kernel brian$ git clone https://android.googlesource.com/kernel/msm
Cela se fera en quelques minutes, mais vous constaterez qu'il n'y a pas de fichiers, car l'arborescence du noyau AOSP sous la branche master est toujours vide. Dans le référentiel Git, le répertoire .git contient toutes les informations nécessaires pour restaurer toute copie de travail dans l'historique de développement. Et le noyau de votre appareil est basé sur une certaine version de validation, vous devez trouver cette version et la vérifier. La façon de trouver cette version de validation consiste à entrer la commande suivante dans la ligne de commande du périphérique:
shell@mako:/data $ cat /proc/version                                           
Linux version 3.4.0-perf-ga6edd5e ([email protected]) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Wed Apr 16 09:33:17 PDT 2014
Dans la sortie ci-dessus, les 7 chiffres hexadécimaux a6edd5e sont la version de validation, puis vous pouvez obtenir le code source du noyau avec la commande git checkout a6edd5e.

2. Compilez le code source du noyau

Pour compiler le code source du noyau, vous devez d'abord créer un environnement de compilation. Ici, on suppose que vous pouvez déjà compiler correctement le code source AOSP, puis les éléments de base tels que jdk et certains outils de compilation croisée ont été installés correctement. Ensuite, allons dans le répertoire racine d'AOSP et entrez la commande suivante:
BriansdeMacBook-Pro:Android4.4 brian$ source build/envsetup.sh 
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/grouper/vendorsetup.sh
including device/asus/tilapia/vendorsetup.sh
including device/generic/armv7-a-neon/vendorsetup.sh
including device/generic/mips/vendorsetup.sh
including device/generic/x86/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/lge/mako/vendorsetup.sh
including device/samsung/manta/vendorsetup.sh
including sdk/bash_completion/adb.bash
BriansdeMacBook-Pro:Android4.4 brian$ lunch

You're building on Darwin

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_x86-eng
     3. aosp_mips-eng
     4. vbox_x86-eng
     5. aosp_deb-userdebug
     6. aosp_flo-userdebug
     7. aosp_grouper-userdebug
     8. aosp_tilapia-userdebug
     9. mini_armv7a_neon-userdebug
     10. mini_mips-userdebug
     11. mini_x86-userdebug
     12. aosp_hammerhead-userdebug
     13. aosp_mako-userdebug
     14. aosp_manta-userdebug

Which would you like? [aosp_arm-eng] aosp_mako-userdebug

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.4.4
TARGET_PRODUCT=aosp_mako
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=krait
HOST_ARCH=x86
HOST_OS=darwin
HOST_OS_EXTRA=Darwin-14.5.0-x86_64-i386-64bit
HOST_BUILD_TYPE=release
BUILD_ID=KTU84P
OUT_DIR=out
============================================

La première consiste à exécuter build / envsetup.sh pour initialiser l'environnement de compilation, définir certaines variables d'environnement, puis sélectionner la cible de compilation. De plus, trois variables d'environnement doivent être définies, sinon une erreur se produira:
BriansdeMacBook-Pro:Android4.4 brian$ export CROSS_COMPILE=arm-eabi-
BriansdeMacBook-Pro:Android4.4 brian$ export SUBARCH=arm
BriansdeMacBook-Pro:Android4.4 brian$ export ARCH=arm
Le compilateur arm-eabi est utilisé à la place du compilateur arm-linux-androideabi. Une utilisation incorrecte entraînera l'échec de la compilation.

Le noyau doit être configuré avant la compilation. En effet, le noyau Linux prend en charge de nombreuses architectures et composants matériels. Pour pouvoir compiler l'image du noyau pour n'importe quelle combinaison de configurations, le noyau Linux utilise un sous-système de configuration extensible. Le noyau Linux fournit également une variété d'interfaces de configuration pour le sous-système de configuration, y compris l'interface utilisateur graphique d'Opportunity QT, des menus textuels et des interfaces de questions et réponses. La documentation sur le site des développeurs Android (http://source.android.com/devices/tech/config/kernel.html) décrit les options de configuration nécessaires et recommandées dans le noyau Android.
Cependant, il est trop difficile de spécifier un par un, donc le noyau Linux fournit également un modèle de configuration defconfig, qui encapsule le modèle de configuration correspondant pour différents périphériques. Il vous suffit de spécifier le modèle de configuration. Trouvez le code source du noyau en face Il y a un tableau au début de la page de chemin où vous pouvez trouver le modèle de configuration correspondant à votre appareil. Après avoir trouvé votre modèle de configuration, entrez le répertoire racine du code source du noyau, puis entrez la commande suivante pour terminer la configuration: Mon modèle de configuration est mako_defconfig.
BriansdeMacBook-Pro:msm brian$ make mako_defconfig
Après avoir entré la commande ci-dessus, le système de compilation du noyau compilera d'abord certaines dépendances utilisées pour traiter le fichier de modèle de configuration, puis lira le modèle de configuration et écrit dans le fichier .config.
Entrez ensuite la commande make pour terminer la compilation du noyau, récupérez le fichier image du noyau arch / arm / boot / zImage.

3. Créez le fichier image boot.img et installez

Plus tôt, nous avons obtenu le fichier image du noyau, alors comment le flasher sur le téléphone? Si vous avez lu l' article " Extraction du noyau du noyau Android ", vous saurez que le fichier image de la partition de démarrage du téléphone contient le fichier image du noyau et le fichier image de la partition racine, nous devons donc créer un nouveau fichier boot.img pour l'image du noyau que nous avons compilée Le fichier est ensuite glissé dans le téléphone.
Exportez d'abord boot.img de votre téléphone mobile vers l'ordinateur, puis utilisez l'outil abootimg (l'adresse de téléchargement dans l'article susmentionné) pour mettre à jour notre fichier image du noyau compilé vers boot.img:
BriansdeMacBook-Pro:boot brian$ abootimg -u boot.img -k zImage-new 
reading kernel from zImage-new
Writing Boot Image boot.img
Si l'image du noyau devient plus grande, abootimg provoquera une erreur similaire "new-boot.img: la mise à jour est trop grande pour l'image de démarrage (4534272 vs 4505600 octets)", pour le moment nous devons décompresser l'intégralité du fichier boot.img :
BriansdeMacBook-Pro:boot brian$ abootimg -x boot.img 
writing boot image config in bootimg.cfg
extracting kernel in zImage
extracting ramdisk in initrd.img
Entrez ensuite la commande suivante:
BriansdeMacBook-Pro:boot brian$ abootimg --create new-boot.img -f bootimg.cfg -k zImage-new -r initrd.img -c "bootsize=4534272"
Appuyez simplement sur Entrée. Notez que cette taille est la taille de l'ensemble boot.img. L'utilisation d'abootimg n'est pas couverte ici, vous pouvez voir l'introduction sur github.
À ce stade, le fichier image de démarrage est créé. Pour installer, vous devez d'abord mettre le téléphone en mode fastboot et entrer la commande suivante:
BriansdeMacBook-Pro:boot brian$ adb reboot bootloader
L'appareil redémarre et passe en mode fastboot. Il existe deux façons pour le téléphone d'exécuter le noyau que nous avons compilé, l'une consiste à démarrer directement avec le nouveau boot.img, et l'autre à écrire le nouveau boot.img dans la partition de démarrage de l'appareil. L'avantage de la première méthode est que si elle échoue, elle ne peut être récupérée qu'en redémarrant, mais elle n'est pas persistante et la deuxième méthode est persistante.
Regardez d'abord la première méthode, entrez la commande dans la ligne de commande de l'ordinateur:
BriansdeMacBook-Pro:boot brian$ fastboot boot new-boot.img 

La deuxième méthode, entrez dans la ligne de commande de l'ordinateur:
BriansdeMacBook-Pro:boot brian$ fastboot flash boot new-boot.img
BriansdeMacBook-Pro:boot brian$ fastboot reboot

Ensuite, il redémarrera, puis nous devons vérifier s'il est réellement glissé, entrer dans la ligne de commande du téléphone et exécuter la commande suivante:
shell@mako:/ $ cat /proc/version
Linux version 3.4.0-perf-gc7ee689-dirty ([email protected]) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Fri Nov 11 12:06:19 CST 2016
Vous pouvez voir que c'est différent de la sortie précédente.


À ce stade, nous pouvons compiler avec succès le noyau et le flasher dans le téléphone.Vous pouvez ajouter votre propre code au noyau, ou déboguer le code du noyau, ou même faire ce que vous voulez. Bien sûr, vous pouvez également écrire le module du noyau vous-même, puis utiliser insmod pour le charger directement dans le noyau. Pour un contenu plus approfondi, je le présenterai plus tard, cet article est ici ~.








Publié 60 articles originaux · Comme 44 · Visites 340 000+

Je suppose que tu aimes

Origine blog.csdn.net/beyond702/article/details/53175154
conseillé
Classement