Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1554823
  • 博文数量: 290
  • 博客积分: 3468
  • 博客等级: 中校
  • 技术积分: 3461
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-28 22:21
文章分类

全部博文(290)

文章存档

2016年(13)

2015年(3)

2014年(42)

2013年(67)

2012年(90)

2011年(75)

分类: 嵌入式

2011-11-21 17:36:32

做下面工作的提前时内核也要支持 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   //生成分析文件
阅读(2112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~