您的位置:首页 > 移动开发 > Android开发

Android 文件系统读写功能测试工具iozone移植。

2015-04-19 10:00 976 查看
iozone可以对文件系统读写功能进行自动测试,首先需要下载iozone。然后源码文件夹放在Android源码下mm编译出bin文件放入设备bin文件夹下面并赋予读和执行权限。

下面是具体步骤,如果会编译的,不需要的可直接跳过。

1,将iozone4Android-master源码文件夹复制到Android源码下,我一般喜欢放在android4.4/device/myproduct/common/lib 下。

2,进入源码根目录android4.4/,输入:”. build/envsetup.sh” 选择自己的编译“choosecombo X X X”

3,进入iozone4Android-master下:cd device/infotm/common/lib/memtester-4.3.0/, “mm”编译。

4,进入android4.4_sz/out/target/product/myproduct/system/bin ,找到生成的iozone文件。

5,串口连接设备后,输入”mount -o rw,remount /system” (一定要一模一样,空格和斜杠不能多也不能少)复制iozone文件到设备的/system/bin/目录下,使用“chmod 755 /system/bin/iozone”赋予文件权限。(7、5、5分别对应系统、组、用户三级,7为读、写、执行,5为堵、执行、4为只读)

在串口操作下,进入iozone目录: system/bin下,输入 “iozone -a”,就可以看到测试的输出了,具体测试指令可以查看iozone的说明。

现在需要在上层Android应用中打开iozone,需要使用以下方法:

Process mProcess = Runtime.getRuntime().exec("sh");
DataOutputStream mDataOutputStream = new DataOutputStream(mProcess.getOutputStream());
mDataOutputStream.write("需要执行的命令".getBytes());
mDataOutputStream.flush();
mDataOutputStream.close();


这里可以看到,要执行iozone只要在/system/bin下执行,但是默认文件路径是根目录,iozone不能测试,需要进入到可读写路径如 /sdcard下,上层是不能使用“cd /sdcard”切换路径的。这里需要更改iozone的源码,修改iozone的测试路径。

打开iozone源码文件下的iozone.c文件,修改测试的路径。这个修改比较多,



然后就可以用上面的代码:

Process mProcess = Runtime.getRuntime().exec("sh");
DataOutputStream mDataOutputStream = new DataOutputStream(mProcess.getOutputStream());
mDataOutputStream.write("iozone -a".getBytes());
mDataOutputStream.flush();
mDataOutputStream.close();


在apk里边启动iozone了。

使用如下代码抓取输出:

InputStreamReader inStream = new InputStreamReader(mProcess.getInputStream());
mBufferReader = new BufferedReader(inStream);
String line = "";
while ((line = mBufferReader.readLine()) != null) {
Log.d("myTest",line+"\n");
}


就可以看到输出了,可以把line赋值给TextView等使它显示在用户界面上。while是一个死循环,如果放在主线程里边会使apk崩溃,这个输出应该另外建立一个线程来执行,通过msg.obg把line赋值,然后用一个handle在主线程里边接收,这样就可以了。由于是读写测试,需要在AndroidManifest里边给apk读写权限,并且添加android:sharedUserId=”android.uid.system”给apk系统权限。然后将apk放在系统源码里边,在*.mk里边的PRODUCT_PACKAGES += \里边添加apk包名(和apk目录下的Android.mk的LOCAL_PACKAGE_NAME := XXX一致)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息