使用AndroidNDK测试Linux驱动

使用AndroidNDK测试Linux驱动


在Android系统中Linux驱动主要的使用者是APK程序。因此,Linux驱动做完后必须要用APK程序进行测试才能说明Linux驱动可以正常使用。由于上一节在Android虚拟机上使用C语言编写的可执行程序测试了Linux驱动,因此很容易想到可以利用Android NDK来测试Linux驱动,毕业论文 

由于Android NDK也使用C/C++来编写程序,因此可以利用上一节的C语言代码,当然,还得加上一些AndroidNDK特有的代码。在使用AndroidNDK测试Linux驱动之前需要做如下两件事。

1. 由于Linux驱动模块不会随Android系统启动而装载,因此必须执行build.sh脚本文件安装word_count驱动。

2. 不能使用默认方式启动Android模拟器,而要使用我们自己编译的Linux内核启动Android模拟器,启动模拟器的命令如下:

#  emulator-avd myavd -kernel /root/kernel/goldfish/arch/arm/boot/zImage

为了方便,读者也可以在随书光盘带的Ubuntu Linux虚拟环境中直接执行如下的命令来异步启动Android模拟器。其中emulator.sh文件在/root/drivers目录中。

# sh emulator.sh &

本节的例子已经包含在随书光盘和虚拟环境中,路径如下:

随书光盘:<光盘根目录>/sources/ch06/word_count/word_count_ndk

虚拟环境:/root/drivers/ch06/word_count/word_count_ndk

word_count_ndk工程的代码部分由WordCountNDKTestMain.java和ndk_test_word_count.c文件组成。工

       ndk_test_word_count.c文件用于访问word_count驱动。该文件包含两个供Java访问的函数,分别用来读取/dev/wordcount设备文件中的单词数和向/dev/wordcount设备文件写入字符串。下面先看看ndk_test_word_count.c文件的完整代码。
01.#include <string.h>  
02.#include <jni.h>  
03.#include <fcntl.h>  
04.#include <stdio.h>  
05.#include <sys/types.h>  
06.#include <sys/stat.h>  
07.#include <unistd.h>  
08.#include <stdlib.h>  
09.//  JNI函数:readWordCountFromDev  
10.//  用于从/dev/wordcount设备文件读取单词数  
11.jint Java_mobile_android_word_count_ndk_WordCountNDKTestMain_readWordCountFromDev( 
12.        JNIEnv* env, jobject thiz) 
13.{ 
14. 
15.    int dev;                //  open函数打开/dev/wordcount设备文件后返回的句柄,打开失败返回-1  
16.    jint wordcount = 0;     //  单词数  
17.    unsigned char buf[4];   //  以4个字节形式存储的单词数  
18. 
19.        //  以只读方式打开/dev/wordcount设备文件  
20.    dev = open("/dev/wordcount", O_RDONLY); 
21. 
22.    //  从dev/wordcount设备文件中读取单词数  
23.    read(dev, buf, 4); 
24. 
25.    int n = 0;              //  存储单词数的int类型变量  
26.  毕业论文 
27.    //  将由4个字节表示的单词数转换成int类型的值  
28.    n = ((int) buf[0]) << 24 | ((int) buf[1]) << 16 | ((int) buf[2]) << 8 | ((int) buf[3]); 
29.&

[1] [2] [3] [4] [5] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有