Android: débogage du noyau avec KGDB
j'essaie de faire le débogage du noyau pour mon Nexus One, et j'ai suivi les instructions de http://bootloader.wikidot.com/android:kgdb . Je me demandais si quelqu'un a effectivement eu que cela fonctionne? Et est-ce que quelqu'un a fait une solution plus à jour pour utiliser KGDB pour déboguer le noyau?
2 réponses
je sais que vous avez déjà posé une question sur la liste de développement du noyau Android et que vous n'avez aucune réponse, mais avez-vous cherché dans les archives des messages sur kgdb et le débogage?: http://groups.google.com/group/android-kernel/search?group=android-kernel&q=kgdb&qt_g=Search+ce+groupe
en particulier, vous pourriez vouloir regarder ce post: http://groups.google.com/group/android-kernel/browse_thread/thread/5233e03391867c98/320beef11e737a62
voici quelques autres liens aléatoires qui pourraient être utiles:
- http://www.cs.gmu.edu / ~astavrou/courses/ISA_673/Android_Debugging / Android_GDB.pdf
- http://www.cs.columbia.edu/~nieh/teaching/w4118/ubb/Forum6/HTML/000122.html
- http://wiki.ncl.cs.columbia.edu/wiki/AndroidVirt:Guides:Kernel_Debugging
- http://source.android.com/porting/debugging_gdb.html
quoi qu'il en soit, c'est une question intéressante, et j'ai vraiment du mal à y trouver quoi que ce soit. Vous voudrez peut-être essayer de sauter sur IRC de temps en temps (#android-dev ou #android-root sur freenode) et demander à certaines personnes là-bas pour des pointeurs (s'il vous plaît poster ce que vous trouvez ici), ou peut-être Demander sur les forums Android XDA-développeurs .
j'ai trouvé ce post quand je cherchais des informations de KGDB sur Android donc, malgré qu'il ait été quelques années, j'ai pensé qu'il valait la peine de poster un lien vers un certain travail que j'ai fait pour obtenir CE et courant sur le Nexus 6.
http://www.contextis.com/resources/blog/kgdb-android-debugging-kernel-boss /
j'espère que cela aidera n'importe qui d'autre cherchant des réponses semblables.
édité à la suite de commentaires (merci tous):
pour obtenir ce travail j'ai dû faire un câble de débogage UART basé sur ce blog accueillant . Il s'agit d'un circuit assez simple qui se compose D'une sortie de base FTDI 3.3 v (Disponible chez SparkFun au moment de la rédaction), ainsi que de 4 résistances (2 x 1k Ohm, 1 x 1.2 K Ohm et 1 x 100Ohm), et d'un connecteur de casque (TRRS) à 4 éléments. Les résistances sont essentiellement fournir un diviseur de tension pour réduire le 3.3 v à quelque chose d'un peu plus sûr pour votre téléphone. En insérant la prise audio avec l'autre extrémité connectée à votre circuit imprimé, le sous-système audio reconnaît qu'une tension (~2,8 V) sur l'une des broches et il sait fournir une interface UART via ce câble. Le FTDI breakout se connecte à votre PC via USB et d'ici vous pouvez accéder aux messages de la console via un émulateur de terminal comme minicom. Cependant, vous avez maintenant une interface série via le même mécanisme et c'est ce que nous pouvons utiliser pour une connexion KGDB.
donc, à ce stade, quelques changements relativement mineurs sont nécessaires au conducteur en série du Nexus 6 (msm_serial_hs_lite.c) pour soutenir KGDB (spécifiquement, la capacité d'effectuer des opérations de caractère atomique I/O). Je viens de porter ces changements du code de la ligne principale du noyau Linux comme un chap appelé Stephen Boyd avait fait le travail dur à la pleine MSM (Qualcomm) pilote en série msm_serial.C. Ses modifications peuvent être trouvées ici ou simplement rechercher " msm_serial: ajouter le support pour poll_" sur Google. Le port n'était pas difficile et mon code peut être trouvé sur github .
mis à part que vous devez être en mesure de construire un noyau personnalisé pour votre N6 que google fournit beaucoup d'informations sur . Vous devez ensuite créer une image de démarrage qui contient les modifications KGDB dans la mise à jour GitHub. J'ai pris le noyau d'origine de https://developers.google.com/android/nexus/images , extrait (en utilisant abootimg-x) et ensuite utilisé la commande suivante pour le remballer avec mon noyau personnalisé (zImage-dtb) et les paramètres supplémentaires de ligne de commande pour s'assurer que KGDB serait chargé et pointer vers mon port série comme ceci:
abootimg -u boot.img -k zImage-dtb -c 'cmdline=console=ttyHSL0,115200,n8 kgdboc=ttyHSL0,115200 kgdbretry=4'
avec ma botte.img a créé je pourrais démarrer dedans en utilisant la commande fastboot boot boot.img, ouvrez un shell adb puis déclenchez un point de rupture dans le noyau Android en utilisant la commande:
echo -n g > /proc/sysrq-trigger
il est intéressant de mentionner pour complétude que vous avez besoin des privilèges de super-utilisateur pour accéder à /proc/sysrq-trigger afin d'avoir root.
avec le téléphone arrêté, et votre câble de débogage connecté, lancez une version de GDB pour ARM sur votre PC hôte avec votre noyau non compressé comme argument (par exemple arm-eabi-gdb ./ vmlinux). Note: J'exécute Ubuntu 14.04 et j'utilise arm-eabi-gdb depuis le répertoire 'prebuilts' dans mon dépôt source AOSP. Enfin, entrez les commandes suivantes:
set remoteflow off
set remotebaud 115200
target remote /dev/ttyUSB0
étant donné que tout va bien, cela devrait se casser immédiatement dans le point de rupture kgdb (que votre write to /proc/sysrq-trigger produit) et vous pouvez commencer à déboguer.