2012-01-19 2 views
3

J'ai compilé un noyau Linux (pour ARM sur i686 - en utilisant Cross-LFS). Maintenant j'essaye de démarrer ce noyau en utilisant QEMU.Comment déboguer mon noyau Linux compilé par Cross?

$ qemu-system-arm -m 128 -kernel /mnt/clfs-dec4/boot/clfskernel-2.6.38.2 --nographic -M versatilepb 

Ensuite, il montre cette ligne et attend un temps infini !! Donc, je veux déboguer le noyau, de sorte que je puisse étudier ce qui se passe exactement. Je ne connais pas ces versions du noyau. Quelqu'un peut-il m'aider à déboguer mon noyau personnalisé car il ne montre rien après cette déclaration. Y a-t-il une possibilité que le noyau soit cassé? (Je ne pense pas, mais il n'a pas donné d'erreur lors de la compilation)

Et mon but est de générer un système d'exploitation Linux très minimal. Toutes les suggestions concernant les outils chaînes etc qui seraient faciles & flexibles en fonction de mes besoins comme les conducteurs etc.,

ThankYou

+0

Quelqu'un peut-il m'aider s'il vous plaît! – inblueswithu

+0

quelqu'un sait quelque chose comme ça ?? aide de plz – inblueswithu

Répondre

4

Vous pouvez utiliser GDB pour déboguer votre noyau avec QEMU vous pouvez utiliser les options -s -S. Si vous voulez un toolchain simple et fiable, vous pouvez utiliser ELDK de DENX (http://www.denx.de/wiki/DULG/ELDK).

Vous pouvez l'installer comme ça (Ce n'est pas la dernière version, mais vous eu l'idée):

wget http://ftp.denx.de/pub/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso 

sudo mkdir -p /mnt/cdrom (si nécessaire)

sudo mount -o loop arm-2008-11-24.iso /mnt/cdrom 

/mnt/cdrom/install -d $HOME/EMBEDDED_TOOLS/ELDK/ 

La commande doit installer au-dessus du toolchain sous $HOLE/EMBEDDED_TOOLS/ELDK (modifier si vous avez besoin)

echo "export PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin" >> $HOME/.bashrc 

Vous pouvez alors voir la version de votre ARM toolchain comme ceci:

arm-linux-gcc -v 

Vous pouvez tester un hello_world.programme c comme celui-ci:

arm-linux-gcc hello_world.c -o hello_world 

Et vous tapez: file hello_wrold pour voir l'architecture cible du binaire, il devrait être quelque chose comme ceci:

hello_wrold: ELF 32-bit LSB executable, ARM, version 1 (SYSV) 

Maintenant, si vous voulez compiler un noyau de production , vous devez optimiser (i suggère d'utiliser busybox) et si vous voulez juste un pour le test maintenant, essayez ces étapes:

  1. Créer un script pour définir votre outil de chaîne set_toolchai n.sh:

    #! /usr/bin/sh

    PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin

    ARCH=arm

    CROSS_COMPILE=arm-linux-gnueabi-

    export PATH ARCH CROSS_COMPILE

Et lancez votre script (source ./set_toolchain.sh)

  1. Télécharger un noyau linux et décompressez (Supposons 2.6.x, il est un ancien noyau, mais il y a beaucoup de chances que ça marche sans erreurs de compilation).

l'intérieur de votre noyau décompressé:

cd ~/linux-2.6.29/arch/arm/configs 
make versatile_defconfig 

Ici, nous utilisons la puce polyvalente, vous devrez peut-être utiliser make menuconfig pour modifier l'option OABI et le mettre à ARM EABI, cette option est sous Kernel features menu

Après toutes ces étapes, vous pouvez compiler votre noyau:

make 

si vous voulez la compilation prolixe make v=1

Après ceci vous avez obtenu votre noyau sous arch/arm/boot/zImage.

Espérons cette aide.

Cordialement.

0

Je suggère de construire votre noyau en activant l'option dans la section Kernel hacking de votre configuration fichier. Ensuite, vous pouvez utiliser kdb ou kgdb qui est plus facile à utiliser mais nécessite une autre machine exécutant gdb.

`

0

Vous pouvez également connecter Qemu et GDB. Qemu a les options -s et -S qui exécutent un serveur GDB et vous permettent de vous connecter via TCP à localhost: 1234. Ensuite, vous pouvez charger votre image de noyau (la décompressée) dans GDB et voir jusqu'où votre noyau démarre.

Questions connexes