7
votes

Comment garder la sortie ASM à partir de la construction du module de noyau Linux

Je travaille sur un module de noyau Linux pour un noyau 2.6.x et je dois afficher la sortie de montage, bien qu'elle soit actuellement en cours de fichier temporaire. J'aimerais avoir la sortie de montage mélangée à mon fichier source C afin que je puisse facilement suivre où mon problème réside. Ceci est pour un noyau armv6 et apparemment Objdump ne supporte pas cette architecture. J'ai inclus mon maquillage ci-dessous. XXX


0 commentaires

5 Réponses :


7
votes

objdump soutient cette architecture. Votre exécutable sera appelé arracher-nul-linux-gnueabi-objdump


1 commentaires

Donc, ça fait, j'utilisais le mauvais. Une fois que j'ai utilisé celui de ma boîte à outils, cela fonctionne parfaitement et produit les résultats que je voulais.



6
votes

Assumant GCC et l'assembleur GNU une sortie plus lisible que objdump code> peut être. Dites à l'assembleur de conserver son code intermédiaire à l'aide d'indicateurs sur GCC: xxx pré>

et pour obtenir basename code> Pour être le nom de fichier source réel que vous devez dire: p >

 -Wa,-alh=$<.s


1 commentaires

Cela fonctionne très presque. J'ai fini par un fichier xxfile1xx.mod.c.s qui ressemble à ce que je veux. J'ai besoin cependant le fichier xxfile1xx.c.s.



2
votes

Pour obtenir une liste de langues de montage de mes modules de noyau Linux, j'ai ajouté les commutateurs de l'assembleur sur les scripts de noyau / makefile.build.

#cmd_cc_o_c = $(CC) $(c_flags) -c -o $(@D)/.tmp_$(@F) $<
cmd_cc_o_c = $(CC) $(c_flags) -c -Wa,-alh=$<.lst -o $(@D)/.tmp_$(@F) $<


1 commentaires

J'ai essayé d'inclure les drapeaux avec extra_cflags, c'est trop trachant. Modification des scripts / makefile.build fonctionne bien.



0
votes

Vous pouvez essayer le drapeau "-Save-Temps" à GCC. Cela fonctionne pour moi dans mon projet intégré, je ne l'ai pas essayé sur les bâtiments du noyau.


0 commentaires

0
votes

La manière appropriée est susceptible d'ajouter des dépendances cibles dans votre module Makefile / Kbuild File:

MOD_NAME := some_module_name
myunits := file1 file2 file3 ... and many more... without .c extension

obj-m   := $(MOD_NAME).o
$(MOD_NAME)-y := $(addsuffix .o,$(myunits))

# Comment/uncomment to generate assembly / preprocessor output
always-m += $(addsuffix .s,$(myunits)) $(MOD_NAME).mod.s
always-m += $(addsuffix .i,$(myunits)) $(MOD_NAME).mod.i


0 commentaires