做下面工作的提前时内核也要支持 Oprofile (在内核配置里选上即可)
1.下载Oprofile源码
# git clone
git://git.printk.org/caiwanwei/oprofile-0.9.7
(里面有对loongson 系统 cpu 的支持)
2.编译Oprofile(可以在x86的机器上编译,这里为是省去编译依赖库的问题选择在2F上编译)
# ./configure --prefix=/usr/oprofile
checking for kernel OProfile support... no
configure: error: no suitably configured kernel include tree
found
# ./configure --with-kernel-support --prefix=/usr/oprofile
# make && make install
3.移植Oprofile 到 1B 的开发板上
a.把Oprofile 编译生成的二进制文件(opcontrol opreport ...)复制到1B 文件系统的 /bin
目录下
b.把列出来的依赖库复制到 1B 文件系统的 /lib 目录下
# ldd /usr/oprofile/bin/opreport (在2F 上,查询opreport的依赖库)
c.把相关的配置文件(/usr/oprofile/share/oprofile/mips/loongson1)复制到1B 文件系统的
/usr/oprofile/share下
d.在1B 文件系统中建 root 目录,因为Oprofile
执行时设置的事件等相关信息会记录在/root/.oprofile/daemonrc,(怎么知道是放在 /root/.Oprofile
目录下呢,具体可通过执行 strace oprofile --init
>& 1.log ,cat 1.log 来知晓)
4.调试Oprofile
# ./opcontrol --init
grep: /etc/mtab: No such file or directory
grep: /etc/mtab: No such file or directory
Kernel support not available, missing opcontrol --init as
root
# touch /etc/mtab
# ./opcontrol --init
Kernel support not available, missing opcontrol --init as root
?
通过对 opcontrol 的分析发现它是通过对执行" grep oprofile /proc/modules
>/dev/null " 的返回值为判断条件还进行操作的,开始由于 mtab 文件里没有
oprofile 的相关信息,所以要执行 "mount -t oprofilefs nodev /dev/oprofile
>/dev/null" 而linux 标准文件系统在执行了此命令之后将会与之相关的 mount 信息写入
/etc/mtab 中,而执行了umount
之后相关信息将从/etc/mtab文件中删除,而通过相关的操作之后发busybox系统中的 mtab
文件并无任何改变,通过google 之后知道原来新的busybox 使用 /proc/mounts 代替了
/etc/mtab,故在/etc 下建一个指 /proc/mounts 名为 mtab
的链接就绕过这个问题
# ln -sf /proc/mounts /etc/mtab
# ./opcontrol --init
cpu_type 'unset' is not valid
you should upgrade oprofile or force the use of timer mod
通提示可以知道是 cpu_type,Oprofile 不认识,解决办法是修改内核或Oprofile 源码
# cat /dev/oprofile/cpu_type
//查看 cpu_type
mips/ls232
由于Oprofile 里面已经添加了loongson1 的支持,这里修改内核源码
# vi arch/mips/oprofile/op_model_mipsxx.c
318
case CPU_LS232:
319
//op_model_mipsxx_ops.cpu_type = "mips/ls232";
320
op_model_mipsxx_ops.cpu_type =
"mips/loongson1";
5.使用Oprofile (要测试的可执行程序必须是
not stripped (可通过 file 命令查看知道),否则得不到想要的结果)
# opcontrol --init
# opcontrol --reset
# opcontrol --no-vmlinux
# opcontrol --setup --separate=kernel
--event=CPU_CLK_UNHALTED:50000:0:1:1
# opcontrol --start
Using 2.6+ OProfile kernel interface.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
# opcontrol --dump
# ./example
# opcontrol --shutdown
Stopping profiling.
Killing daemon.
# opreport -l ./example
//生成分析文件
阅读(2116) | 评论(0) | 转发(0) |