0

简单的问题..如何编译驱动程序以使用 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 选项添加到文件中,则会出现错误。

生成文件:

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
4

3 回答 3

0

即使您可以在内核模块上使用 gprof,它也从未被宣传为能够帮助您定位瓶颈。更多关于那个。

于 2010-09-13T13:39:44.170 回答
0

您不能使用 gprof 分析内核模块。您需要编译启用了分析支持的内核并使用该readprofile工具。有关更多详细信息,请参阅Linux 内核文档

于 2010-09-10T13:23:26.913 回答
-1

-pg是编译标志,而不是链接标志。将其从中删除LDFLAGS(并且显然将其保留在 中EXTRA_CFLAGS)。

于 2010-09-10T13:22:04.610 回答