Android驱动使用JNI调用(2)

二、 重新使用刚刚编译好的zImage烧写Android系统,系统起来以后通过adb查看Android系统加载的驱动程序
 #ls /dev 
可以看到系统加载的驱动,(leds)
 修改init.rc加载的驱动的读写权限
 chmod 0666 /dev/leds
 这样JNI层才可以打开这个设备
 三、编写JNI文件
 在android工程目录下新建文件jni,然后添加文件ledjni.c,内容如下:
 #include <string.h>
 #include <jni.h>
 #include <fcntl.h>
 #define DEV_NAME "/dev/leds"
 jstring
 Java_com_hellojnipwzh_HardwareControlClass_stringFromJNI( JNIEnv* env,
                                                  jobject thiz )
 {
    return (*env)->NewStringUTF(env, "Hello from JNI !");
 }
 jint
 Java_com_hellojnipwzh_HardwareControlClass_Init(JNIEnv *env,
          jobject thiz)
 {
  int fd=open(DEV_NAME,O_RDWR);
  return fd;
 }
 jint
 Java_com_hellojnipwzh_HardwareControlClass_IOCTLLED(JNIEnv *env,
          jobject thiz,
          jint ledid,
          jint controlcode,
          jint fd)
 {
  int CTLCODE = controlcode;
  ioctl(fd,controlcode,ledid);
  return 0;
 }
 说明:“Java_com_hellojnipwzh_HardwareControlClass_IOCTLLED”,在工程中添加JNI类时,使用com.hellojnipwzh作为packets name,HardwareControlClass这个作为class name  ,IOCTLLED(int id,int code,int fd)作为调用的接口函数,类成员。
 
添加脚本Android.mk,内容如下:
 LOCAL_PATH := $(call my-dir)
 
include $(CLEAR_VARS)
 
LOCAL_MODULE    := ledjni
 LOCAL_SRC_FILES := ledjni.c
 
include $(BUILD_SHARED_LIBRARY)
 
使用Cygwin工具,配置好NDK环境,添加NDK环境到系统变量中,然后进到jni目录,进行
 #ndk-build
 这样就会在android工程的libs目录下的armeabi目录下生成ledjni.so
 这样JNI库已经完成了,接下来就是添加类来调用JNI库

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1831a820672fc4e66ed56136ead48874.html