Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408712
  • 博文数量: 120
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-27 18:15
文章分类

全部博文(120)

文章存档

2016年(13)

2015年(41)

2014年(66)

我的朋友

分类: Android平台

2016-06-17 23:39:20

直接下载附件吧Android交叉编译htop和使用方法.docx
1
、什么是htop

 htop来源于toptopUnix/linux下功能强大的性能检测工具之一,用于实时检测并统计进程的属性和状态,基于ncurses库,可上显示文字界面。但是top已经非常陈旧,不支持鼠标点击操作,不支持查看进程的各个子线程的信息(对于我来说,这个非常重要,有助于分析代码的效率并优化),不支持color显示,易用性较差(曾有人提出改进top但未被接受)。htop官网对htoptop的比较:

2htop源码下载

网站首页:

源码下载:git clone

GitHub地址:

目前最新版本是2.0.1,次之2.0.0,再次之1.0.3

3、使用ndk进行交叉编译

3.1 下载ndk,不同的Android版本有不同的ndk4.4使用的是android-ndk-r9b-linux-x86_64.tar.bz2();android 5.0NDK下载地址()

3.2 解压android-ndk-r9b-linux-x86_64.tar.bz2,并安装交叉编译工具,安装之后,就按照正常的linux交叉编译流程操作就可以了

$./make-standalone-toolchain.sh --arch=arm --ndk-dir=/home/klaus/tools/android-ndk-r9b --system=linux-x86_64 --install-dir=/home/klaus/tools/android-ndk-r9b --platform=android-19

这样就将交叉编译工具安装到/home/klaus/tools/android-ndk-r9b

3.3 交叉编译ncurses

htop编译时,必须有ncurses库的支持,所以编译htop之前,必须先编译ncurses

下载ncurses:

官网:http://ftp.gnu.org/gnu/ncurses/

最细版本地址:http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz

$./configure CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system --host=arm-linux-androideabi --with-shared CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include

$ make && make install

note

a、出现下图错误

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(1).png

修改

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(2).png

b、出现下图错误

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(3).png

执行:

$make clean

$./configure CC=arm-linux-androideabi-gcc-4.6 --prefix=$PWD/system --host=arm-linux-androideabi --with-shared CPPFLAGS=-I/home/klaus/tools/android-ndk-r9b/sysroot/usr/include

如果还有这个错误,重启一下机器

3.4、交叉编译htop2.0.1版本

klaus@server:~/tools/htop-2.0.1$ ./autogen.sh

klaus@server:~/tools/htop-2.0.1$ ./configure --prefix=/home/klaus/tools/htop-2.0.1/system --host=arm --bindir=/home/klaus/tools/htop-2.0.1/system/xbin --with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include -I/home/klaus/tools/ncurses-6.0/system/include/ncurses -I/home/klaus/tools/android-ndk-r9b/sources/android/support/include" LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode

出现以下错误:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(4).png

是由于configure文件在检查libncurses库时出现了问题,分析configure.ac文件发现如下:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(5).png

disable-unicode时,检查libncurses6.so库。此时我们查看以下我们交叉编译之后的ncursesinstall目录是否有libncurses6.so文件

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(6).png

很显然是没有的,所以我们需要建立一个软连接;

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(7).png

然后进入htop2.0.1,再次执行configure配置命令,然后编译、安装

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(8).png

如果编译时出现以下错误:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(9).png

此时按照下图执行:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(10).png

注释掉HAVE_LINUX_AFFINITY即可编译通过

至此,htop编译成功,

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(11).png

3.4.1、将编译好的文件拷贝到Android设备上去运行

使用adb通过usb进入Android设备的shell

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(12).png

将编译好的ncurseshtop拷贝到system目录下,由于Androidsystem目录是只读的,需要remount

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(13).png

我是在windows下开发的,从linux主机上拷贝到Android设备,需要借助window,而window对目录是不区分大小写的,所以需要对linux上的内容进行压缩,然后在Android上解压。

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(14).png

拷贝文件到Android

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(15).png

由于data目录下有system目录,为了不影响system,另外建立了一个目录cmd_htop,用于解压

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(16).png

拷贝htop应用程序及相关文件到/system

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(17).png

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(18).png

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(19).png

此时可以执行htop命令,但是会有错误:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(20).png

需要执行环境变量如下:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(21).png

执行htop命令,如下

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(22).png

以上红色部分就是htop的执行效果,至此htop2.0.1移植到Android成功。

3.5、交叉编译htop1.0.3版本

编译和2.0.1的版本差不多,

klaus@server:~/tools/htop-1.0.3$ ./configure --prefix=/home/klaus/tools/htop-1.0.3/system --host=arm --bindir=/home/klaus/tools/htop-1.0.3/system/xbin --with-sysroot=/home/klaus/tools/android-ndk-r9b/sysroot CC=arm-linux-androideabi-gcc-4.6 CFLAGS="-I/home/klaus/tools/ncurses-6.0/system/include -I/home/klaus/tools/ncurses-6.0/system/include/ncurses" LDFLAGS=-L/home/klaus/tools/ncurses-6.0/system/lib --disable-unicode

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(23).png

如果编译出现以下错误:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(24).png

按照下面的执行:

增加#include

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(25).png

make编译出现以下错误时:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(26).png

执行以下操作:

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(27).png

注释掉HAVE_NATIVE_AFFINITY,增加

#define SYS_ioprio_get __NR_ioprio_get

#define SYS_ioprio_set __NR_ioprio_set

然后再编译

然后将压缩安装目录systemsystem1.0.3.tar.gz

system1.0.3.tar.gz 拷贝到Android

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(28).png

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(29).png

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(30).png

说明: C:.Users.wanghua.AppData.Local.Temp.enhtmlclip.Image(31).png

4、使用方法

详细应用请man htop查阅。 

选择某一进程,按s:strace追踪进程的系统调用

PTMtop下是一样的,按CPU,Time+Memory使用排序。

下面有F1~F10的功能和对应的字母快捷键。

Shortcut Key

Function Key

Description

h

F1

Invoke htop Help

S

F2

Htop Setup Menu

/

F3

Search for a Process

I

F4

Invert Sort Order

t

F5

Tree View

>

F6

Sort by a column

[

F7

Nice - (change priority)

]

F8

Nice + (change priority)

k

F9

Kill a Process

q

F10

Quit htop

 


阅读(2506) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~