很简单的bash脚本,用来在linux上分析源码使用。

如今我在移植内核的tools/perf到android,linux kernel 3.8.0rc才开始正式涉足android移植这个问题,之前都是google公司自己修改后放到external/linux-tools-perf目录下去编译的。根据toos/perf/Documentaion/android.txt的指导去做,结果3.8.0rc的perf都没法编译通过,更不要提我自己去打补丁的3.0.31版本了。3.8.0rc还没正式发布,正在开发中,也能理解。我自己先想办法排除这些编译错误。主要是交叉编译的时候,头文件引用很混乱,比较纠结。刚好借这个机会介绍其中一个小工具searchheader。

  • onsource command:对于本目录树上所有的C/C++/ASM/JAVA源文件,执行命令command。
find . -regex ".*\.c\|.*\.cpp\|.*\.java|.*\.S|.*\.s" -exec $@ \{\} \;

例子:

onsource grep -H -n helloworld在目录树上所有源文件中寻找helloworld并列出文件名和行号
  • onheader command :对于本目录树上所有头文件,执行命令command
find . -regex ".*\.h" -exec $@ \{\} \;


  • searchheader type value : type 目前可以是file和word。
#!/bin/bashfor i in util/include \                arch/arm/include \                /home/hzh/linux-kernel/linux/arch/arm/include/uapi \                /home/hzh/linux-kernel/linux/arch/arm/include \                /home/hzh/linux-kernel/linux/include/uapi       \                /home/hzh/linux-kernel/linux/include    \                /home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include    \               ; do    case $1 in        file) [ -a ${i}/$2 ] && echo $2 in $i;;        word) [ -d $i ] && grep -R -H -n $2 $i;;    esacdone

用例:
编译perf android版本,第一个出错信息是__kernel_nlink_t未定义

hzh@fangtian:~/linux-kernel/linux/tools/perf$ make ARCH=arm CROSS_COMPILE=${NDK_TOOLCHAIN} CFLAGS="--sysroot=${NDK_SYSROOT}" -d。。。CC perf.oIn file included from /home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include/unistd.h:33:0,                 from util/util.h:46,                 from builtin.h:4,                 from perf.c:9:/home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include/sys/types.h:65:1: error: unknown type name '__kernel_nlink_t'

先寻找__kernel_nlink_t在INCLUDE_PATH上的什么头文件中出现过

hzh@fangtian:~/linux-kernel/linux/tools/perf$ searchheader word __kernel_nlink_t/home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include/sys/types.h:65:typedef __kernel_nlink_t     nlink_t;/home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include/asm/posix_types.h:24:typedef unsigned short __kernel_nlink_t;

看来它在asm/posix_types.h中定义。
然后寻找asm/posix_types.h有几个同名文件:

hzh@fangtian:~/linux-kernel/linux/tools/perf$ searchheader file asm/posix_types.hasm/posix_types.h in /home/hzh/linux-kernel/linux/arch/arm/include/uapiasm/posix_types.h in /home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include

/home/hzh/android/ndk/build/platforms/android-3/arch-arm/usr/include/sys/types.h中只引用了linux/posix_types.h,所以出错。
加上#include <asm/posix_types.h>,因为先搜到/home/hzh/linux-kernel/linux/arch/arm/include/uapi/asm/posix_types.h,依旧出错。
解决方法很纠结,一般采取"全路径"或者在用"asm/posix_types.h",然后在CFLAGS中使用-iquote选项规定引号括起的头文件,先去搜索指定目录。这些都只能是临时解决方法。

如果有谁编译过3.8.0rc下的perf android版,能否留言给个指教?

更多相关文章

  1. 使用nginx在android手机上搭建rtmp服务器并测试
  2. Ubuntu10.04下Android源码编译
  3. android 4.0.3编译 总结
  4. Android(安卓)引入第三方so后启动报错 /lib/arm64-v8a, /vendor/
  5. Android(安卓)NDK r6 windows ,Cygwin 1.7, eclipse 集成失败
  6. android学习——NDK入门 windows下安装cygwin 与 Eclipse使用CDT
  7. Mac下用cmake编译 Android用libjpeg-turbo
  8. Android(安卓)类代码防止反编译的办法
  9. android方法数超过64k和Gradle编译OOM解决方法

随机推荐

  1. android studio最新sdk更新方法
  2. Android判断当前的android设备是否处于联
  3. 【Android开发环境安装】
  4. Android(安卓)Application - No window t
  5. 【066】Android(安卓)& Java 难点解析
  6. Android(安卓)Camera调用流程
  7. Android: Android(安卓)Wifi System
  8. android之实现各个组件点击事件处理
  9. Android(安卓)Studio下载地址[国内可下载
  10. Android(安卓)MediaController