移植oprofile到dm365
一、移植
1. 首先要下载OProfile的相关软件包,如下:
oprofile-0.9.6.tar.gz: http://oprofile.sourceforge.net/download/
popt-1.14.tar.gz: http://freshmeat.net/projects/popt/
binutils-2.20.tar.gz: http://ftp.gnu.org/gnu/binutils/
2. 使用交叉编译器编译OProfile
首先,确认你的目标板上运行的Linux是否支持下面的选项:
在安装oprofile之前,需要保证系统支持oprofile。即在系统编译内核的时候要将以下三项勾上
make menuconfig
General setup --->
[*] Profiling support
<*> OProfile system profiling
[*] Kernel performance events and counters
可以用自带的opcontrol来检测kernel是否支持oprofile.如果运行opcontrol --quick没有错误的话,就说明当前的内核支持oprofile。
为交叉编译器设置环境变量,如下:
export CC=arm-none-linux-gnueabi-gcc
export CXX=arm-none-linux-gnueabi-g++
export CFLAGS=-static
export CXXFLAGS=-static
export CPPFLAGS=-static
export ac_cv_va_copy=C99
2.1 交叉编译popt-1.14
进入"OProfile_Project/popt-1.14"目录,打开configure.ac文件,注释掉46行,如下:
AC_ISC_POSIX
AM_C_PROTOTYPES
#AC_CHECK_VA_COPY
AC_CHECK_HEADERS
然后在当前目录下创建一个"mypopt"的文件夹,并运行下面的命令进行配置,编译和安装:
#./configure --with-kernel-support --target=arm-linux --host=arm-linux --prefix=/workdir/popt-1.14/mypopt
#make && make install
然后拷贝所生成的头文件及库到你的交叉编译器的目录下面如下:
cp ./mypopt/include/* <your cross-compiler directory>/arm-none-linux-gnueabi/include
cp ./mypopt/lib/* <your cross-compiler directory>/arm-none-linux-gnueabi/lib
2.2 交叉编译binutils-2.20
首先进入"OProfile_Project/binutils-2.20/gas/config"目录,然后打开tc-arm.c,在2488行做如下的修改:
if (frag->tc_frag_data.last_map != NULL) {
know (S_GET_VALUE (frag->tc_frag_data.last_map) < S_GET_VALUE(symbolP))
}
也就是加上大括号,否则编译会出错。
在"OProfile_Project/binutils-2.20/"下创建"mybinutils"子目录,运行下面的命令进行编译:
./configure --with-kernel-support --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --prefix=/workdir/binutils-2.20/mybinutils --prefix
make
make install
2.3 交叉编译opofile-0.9.6
进入"OProfile_Project/oprofile"文件夹,运行下面的命令进行编译:
#./autogen.sh
.#/configure --with-kernel-support --target=arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --with-binutils=/workdir/binutils-2.20/mybinutils/ --prefix=/workdir/oprofile-0.9.7/myoprofile
#make && make install
3. 拷贝OProfile到目标板上面
接下来,要将交叉编译好的oprofile及相关文件拷贝的目标板上面。
二、移植中碰到的问题
问题1:
# opcontrol --init
cat: can't open '/dev/oprofile/cpu_type': No such file or directory
Unable to open cpu_type file for reading
Make sure you have done opcontrol --init
cpu_type 'unset' is not valid
you should upgrade oprofile or force the use of timer mode
# cat /etc/mtab
nodev /dev/oprofile oprofilefs rw 0 0
解决:
执行:mount -t oprofilefs nodev /dev/oprofile
问题2:
#./opcontrol --init
Kernel support not available, missing opcontrol --init as root ?
检查/etc/mtab文件内容,确保是nodev /dev/oprofile oprofilefs rw 0 0
问题3:
opreport: /opt/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found (required by opreport)
在网上下载个动态库libstdc++.so.6.0.10,将它放在/lib目录下,做了个软链接
ln -s libstdc\+\+.so.6.0.13 libstdc\+\+.so.6
问题4:
# opreport
objdump is not installed on this system, use opcontrol --kernel-range=start,end or opcontrol --xen-range= or install objdump
由于在分析内核时使用到objdump,复制binutilsimg/bin/objdump 至文件系统的/bin文件下。(objdump在符号分析时用到)
问题5:
如果得到的错误是
You cannot specify any performance counter events
because OProfile is in timer mode.
修改源码oprof.c (drivers\oprofile) 第36行如下(内核版本不一样,可能有所差别)
static int timer = 1;
不过,这个修改对DM368是无效。通过查看源码发现,上面的修改对于armv6,armv7架构都是可以的,但dm368是armv5,内核只能支持Time Interrupt模式。有点小遗憾!
三、使用
# opcontrol --init
# opcontrol --vmlinux=/opt/vmlinux ;使用前将vmlinux拷贝到开发板中
# opcontrol --start
opcontrolUsing 2.6+ OProfile kernel interface.
Reading module info.
Using log file /var/lib/oprofile/samples/oprofiled.log
Daemon started.
Profiler running.
# opcontrol --stop
Stopping profiling.
# opreport
CPU: CPU with timer interrupt, speed 0 MHz (estimated)
Profiling through timer interrupt
TIMER:0|
samples| %|
------------------
191 89.6714 vmlinux
8 3.7559 libc-2.5.90.so
7 3.2864 busybox
7 3.2864 ld-2.5.90.so
移植oprofile到dm365相关推荐
- rt3070网卡 linux驱动,移植rt3070芯片网卡驱动到dm365全过程---yingru
#History:2011-05-18 #Author:yingru 新增: 在内核添加对设置雷凌网卡参数的wireless tools的支持: Make menuconfig: Device Dri ...
- Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写
很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-boot ...
- TI Davinci DM6441嵌入式Linux移植攻略——UBL移植篇
目录(?)[+] 一DM6441的Boot过程简介 二DM6441的UBL移植 CCS文件夹 Common文件夹 GNU文件夹 移植DDR2 移植Nand Flash 其它 声明:本文参考网友zjb_ ...
- 使用oprofile分析性能瓶颈
使用oprofile分析性能瓶颈 1. 概述 oprofile 是 Linux 平台上,类似 INTEL VTune 的一个功能强大的性能分析工具. 其支持两种采样(sampling)方式:基于事件的 ...
- DAVINCI DM365-DM368开发攻略—U-boot-2010.12-rc2-psp03.01.01.39及UBL的移植 .
转载:http://blog.csdn.net/olei_oleitao/article/details/7919307 一.DM36X的BOOT过程介绍 DM36x的BOOT过程和DM6446.DM ...
- davinci平台Uboot移植
一.DM36X的BOOT过程介绍 DM36x的BOOT过程和DM6446.DM6467完全是一样的,因为都是ARM926EJS架构,里边都有一个RBL,这RBL在芯片出厂的时候都烧写在ROM里,芯片上 ...
- DAVINCI DM36x开发攻略——U-BOOT-2010.12及UBL移植
从盛夏走到深秋,我们继续DAVINCI DM365-DM368的开发.说来惭愧,人家51CTO热情支持本博客,而本人却一直没有像其他博客之星一样频繁更新博客,心里确实说不过去.管理公司确实很累,有更急 ...
- DAVINCI DM365-DM368开发攻略—U-boot-2010.12-rc2-psp03.01.01.39及UBL的移植
从盛夏走到深秋,我们继续DAVINCI DM365-DM368的开发.说来惭愧,人家51CTO热情支持本博客,而本人却一直没有像其他博客之星一样频繁更新博客,心里确实说不过去.管理公司确实很累,有更急 ...
- apr 移植android平台,omap3530移植android4.0
开发板(应该是基于beagleboard),omap3530,256M DDR SDRAM,256M nand flash.开发板自带了uboot,linux内核2.6.29和android 2.1系 ...
- 十二、Hi3556移植RTL8189 WIFI驱动
Hi3556V200从代理拿到的SDK包中,是不包含RTL8189模块的驱动的.我们从某WIFI模块厂家要到了RTL8189的芯片驱动,于是开始着手移植驱动到平台上面. 一.Linux驱动添加RTL8 ...
最新文章
- 互联网项目管理要点(转)
- win10 nms cpu编译-ok
- null NULL is_null 竟然不一样
- day7 python学习随笔
- C#根据execl批量修改图片名称
- matlab生成常用信号(方波、三角波、随机信号、单位冲激)
- 「名词」数据管理、数据治理、数据中心、数据中台、数据湖、数据资产等
- 关于网络编程的一些问题
- oracle什么时候用in,Oracle Study之---Oracle IN和NOT IN的使用
- PyTorch 1.0 中文官方教程:数据加载和处理教程
- 你应该知道的Linux历史
- 再聊如何通过基金定投达到十年十倍?
- Oracle 12.2 ORA-01017问题处理
- 项目管理文档目录结构
- 一阶电路实验报告心得_一阶rc电路实验总结
- Debian9初始配置
- 关闭“Chromium 未正确关闭”提示
- 海量资源!开发人员成功转行数据科学必备清单
- 超越MRT无数倍的MODIS在线拼接AppEERAS
- 企业发放的奖金根据利润提成计算