移植安装SystemTap到Android的板子上

首先,在移植systemtap前需要编译和定制自己的android系统,参照前一篇文章:移植并定制自己的Android:http://my.oschina.net/u/561492/blog/160274,在板子上定制自己的android系统!

读者可以以本篇博客作为参考,同时可以参考下面两篇内容,一篇Systemtap官网的教程,一篇是一个前辈写的博客

http://omappedia.org/wiki/Systemtap
http://blog.csdn.net/lzuzhp06/article/details/7778189

步骤:

1、下载SystemTap源码,并进行一些简单配置

2、安装编译环境,分别为host(pc主机)和 target(android板子)编译systemtap

3、将为android板子编译的systemtap移植到板子上,并运行简单的systemtap脚本程序

一、下载SystemTap源码,并进行一些简单配置

http://sourceware.org/systemtap/ftp/releases/

<!-- lang: shell -->
* systemtap 1.0 : 2.6.32
* systemtap 1.3 : 2.6.35
* systemtap 1.5 : 2.6.39/3.0
* systemtap 1.6/1.7/1.8 : 2.6.39 -> 3.3
* systemtap 2.0: -> 3.6

根据你自己的android的内核的情况选择systemtap的版本,我的是Linux-2.6.32所以选择最老的版本systemtap-1.0。
注:关于Linux内核中代码的修改和内核中关于支持systemtap的开关的打开都在前一篇文章中有说明。

由于我的是systemtap-1.0,所以还需要先打补丁,补丁下载:http://omappedia.org/wiki/Systemtap#Systemtap_1.0_code_update_for_OMAP_ARM_platforms

将下载的3个补丁解压,然后都拷到存放systemtap-1.0的同一个目录下:

<!-- lang: shell -->
 ubuntu@ubuntu:~$ ls
android-systemtap  get-dbgsym               rowboat-android-froyo-devkit8500          sym.c.patch    tmp
Desktop            linux-2.6.32-devkit8500  rowboat-android-froyo-devkit8500.tar.bz2  sym.h.patch    tools
devkit             minicom.log              Stap                                      systemtap-1.0  translate.cxx.patch
Downloads          patch                    statppro                                  test           wxg
ubuntu@ubuntu:~$ patch -p0 < sym.c.patch 
patching file ./systemtap-1.0/runtime/sym.c
ubuntu@ubuntu:~$ patch -p0 < sym.h.patch 
patching file ./systemtap-1.0/runtime/sym.h
ubuntu@ubuntu:~$ patch -p0 < translate.cxx.patch 
patching file ./systemtap-1.0/translate.cx

此外,systemtap-1.0编译还依赖另一个包:elfutils,我下载的是:elfutils-0.155

二、安装编译环境,分别为host(pc主机)和 target(android板子)编译systemtap

**1、安装编译环境:**下载arm-linux-gcc-4.4.3:http://ishare.iask.sina.com.cn/f/13836544.html 下载完成后,你可以解压,然后将其路径添加到环境变量中。我的做法:在HOME目录下新建tools目录,将下载的工具链放进去,并且解压,如下:

<!-- lang: shell -->
ubuntu@ubuntu:~/tools$ ls arm-linux-gcc-4.4.3.tar.gz opt
arm-linux-gcc-4.4.3.tar.gz

opt:
FriendlyARM

然后设置环境变量,

<!-- lang: shell -->
 ubuntu@ubuntu:~$ sudo gedit .bashrc
[sudo] password for ubuntu:

在打开的文件的最末尾添加:

<!-- lang: shell -->
export PATH=$PATH:/home/ubuntu/tools/opt/FriendlyARM/toolschain/4.4.3/bin/

2、为host(pc主机)编译systemtap 将下载的elfutils-0.155与systemtap-1.0放在同一目录下,然后进入目录:systemtap-1.0,执行一下命令:

<!-- lang: shell -->
ubuntu@ubuntu:~/Stap/systemtap-1.0$ make clean
ubuntu@ubuntu:~/Stap/systemtap-1.0$ ./configure --exec-prefix=/home/ubuntu/devkit/systemtap-1.0-ubuntu --prefix=/home/ubuntu/devkit/systemtap-1.0-ubuntu --with-elfutils=/home/ubuntu/Stap/elfutils-0.155

ubuntu@ubuntu:~/Stap/systemtap-1.0$ make

ubuntu@ubuntu:~/Stap/systemtap-1.0$ sudo make install

其中 --exec-prefix 表示你的systemtap安装以后的执行目录,--prefix 表示你systemtap的安装目录,--with-elfutils 表示你systemtap的安装依赖这个包

3、为target(android板子)编译systemtap

仍然在Systemtap-1.0的目录下,执行一下命令

<!-- lang: shell -->
 ubuntu@ubuntu:~/Stap/systemtap-1.0$ make clean

ubuntu@ubuntu:~/Stap/systemtap-1.0$  ac_cv_file__usr_include_nspr=no ac_cv_file__usr_include_nspr4=no ac_cv_file__usr_include_nss=no ac_cv_file__usr_include_nss3=no ac_cv_func_malloc_0_nonnull=yes ./configure --exec-prefix=/home/ubuntu/devkit/systemtap-1.0-omap --prefix=/home/ubuntu/devkit/systemtap-1.0-omap --with-elfutils=/home/ubuntu/Stap/elfutils-0.155 --host=arm-none-linux-gnueabi CXXFLAGS=-static CFLAGS=-static --disable-translator --disable-docs --disable-refdocs --disable-grapher --without-rpm

ubuntu@ubuntu:~/Stap/systemtap-1.0$ sudo make
ubuntu@ubuntu:~/Stap/systemtap-1.0$ sudo make install

三、将为android板子编译的systemtap移植到板子上,并运行简单的systemtap脚本程序

进入到/home/ubuntu/devkit下,我们可以看到有两个文件夹:systemtap-1.0-omap与systemtap-1.0-ubuntu。其中systemtap-1.0-omap是需要拷贝到android板子上的systemtap。

1、编写systemtap脚本:msyscall_all.stp,内容为:

<!-- lang: shell -->
probe kernel.function("sys_*"){

       printf("%s(%d) %s\n",execname(),pid(),probefunc());

}

2、然后交叉编译msyscall_all.stp,生存msyscall_all.ko

<!-- lang: shell -->
sudo /home/ubuntu/devkit/systemtap-1.0-ubuntu/bin/stap -gv -a arm -B     CROSS_COMPILE=/home/ubuntu/tools/opt/FriendlyARM/toolschain/4.4.3/bin/arm-none-linux-gnueabi- -r /home/ubuntu/linux-2.6.32-devkit8500/ -m msyscall_all.ko msyscall_all.stp

其中 “-r /home/ubuntu/linux-2.6.32-devkit8500/ ” 这个参数是指你编译后的linux内核,记住是编译后的,因为我们要在这个内核上运行脚本,-m 是指要生存的module

3、将systemtap-1.0-omap与msyscall_all.ko移植到板子上

<!-- lang: shell -->
adb push systemtap-1.0-omap/  /data/systemtap-1.0-omap/
adb push msyscall_all.ko /data/local

重新挂在pandaboard的根分区为可读写分区:

<!-- lang: shell -->
mount -o remount,rw rootfs /

然后创建文件及软链接:

<!-- lang: shell -->
mkdir –p /home/ubuntu/devkit/
ln –s /data/ systemtap-1.0-omap/  /home/ubuntu/devkit/systemtap-1.0-omap/

使用staprun命令运行syscall_all.ko模块:

<!-- lang: shell -->
/data/systemtap-1.0-omap/bin/staprun  /data/local/syscall_all.ko

最后使用超级终端minicom查看串口输出:

<!-- lang: shell -->
adbd(110) sys_write  
  
InputReader(156) sys_clock_gettime  
  
InputReader(156) sys_read  
  
adbd(110) sys_read  
  
InputReader(156) sys_writev  
  
InputReader(156) sys_write  
  
InputReader(156) sys_epoll_wait  
  
adbd(110) sys_read  
  
InputReader(156) sys_write  
  
InputReader(156) sys_nanosleep  
  
adbd(110) sys_select  
  
adbd(110) sys_read

转载于:https://my.oschina.net/mopidick/blog/160787

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值