Как скомпилировать драйвер для профилирования с помощью Gprof - PullRequest
0 голосов
/ 10 сентября 2010

Простой вопрос .. как скомпилировать драйвер для профилирования с помощью Gprof?

Мой текущий Makefile:

obj-m += hello-2.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Работает просто отлично (я могу загрузить драйвер и т. Д.), Ноесли я пытаюсь добавить опции -pg к файлу, я получаю сообщение об ошибке.

Makefile:

obj-m += hello-2.o

EXTRA_CFLAGS += -pg
LDFLAGS += -pg

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Я получаю сообщение об ошибке:

make -C /lib/modules/2.6.31/build M=/home/I/drivertest modules
make[1]: Entering directory `/home/I/linux-2.6.31'
  CC [M]  /home/I/drivertest/hello-2.o
  Building modules, stage 2.
  MODPOST 1 modules
WARNING: "mcount" [/home/I/drivertest/hello-2.ko] undefined!
  CC      /home/I/drivertest/hello-2.mod.o
  LD [M]  /home/I/drivertest/hello-2.ko
ld: unrecognized option '-pg'
ld: use the --help option for usage information
make[2]: *** [/home/I/drivertest/hello-2.ko] Error 1
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/home/I/linux-2.6.31'
make: *** [all] Error 2

Ответы [ 3 ]

0 голосов
/ 10 сентября 2010

Вы не можете профилировать модуль ядра с помощью gprof. Вам нужно скомпилировать ядро ​​с включенной поддержкой профилирования и использовать инструмент readprofile. Подробнее см. в документации ядра Linux .

0 голосов
/ 13 сентября 2010

Даже если вы можете использовать gprof в модуле ядра, он никогда не рекламировался как способ помочь вам найти узкие места. Подробнее об этом.

0 голосов
/ 10 сентября 2010

-pg - это флаг компиляции, а не флаг связи. Удалите его из LDFLAGS (и, очевидно, оставьте его в EXTRA_CFLAGS).

...