android java ioctl_【转】Android通过JNI调用驱动程序(完全解析实例)

原文网址:http://blog.csdn.net/ok138ok/article/details/6560875

要达到的目的:android系统中,用JAVA写界面程序,调用jni中间库提供的接口,去操作某个驱动节点,实现read,writer ioctl等操作!这对底层驱动开发人员是很重要的一个调试通道,也是android 系统下提供一些特殊功能接口的方法!

本文前提:我们假设已经写了一个驱动程序,它是控制LED的亮灭的,并且创建了一个节点:/dev/vib,也就是通过open这个vib节点,可以read/write/ioctl 操作驱动程序实现LED灯的亮灭控制,具体可以看我另一篇博文《

开发环境 1、ubuntu下的NDK编译环境,2、Esclips开发环境

一、编写JNI模块

当安装好NDK编译环境后,会在它的目录下找到sample目录,它里面有一些例子,可以参考这些例子来写我们自已的模块。

0_13032068743JJP.gif

1、 source文件夹下,新建“LEDSJNI”文件夹。

2、 Source/LEDSJNI/jni/目录下,新建“vib-jni.c”

vib-jni.c文件

#include

#include

#include /*包括文件操作,如open() read() close() write()等*/

//----for output the debug log message

#include

#define LOG_TAG "vib-jni"

#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)

#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#define DEVICE_NAME "/dev/vib" //device point

#define VIB_ON 0x11

#define VIB_OFF 0x22

int fd;

jstring

Java_com_auly_control_vibClass_stringFromJNI( JNIEnv* env,

jobject thiz )

{

return (*env)->NewStringUTF(env, "Hello from JNI--Peter for vib!");//打印字符串

}

jint

Java_com_auly_control_vibClass_Init( JNIEnv* env )

{

LOGE("vibClass_Init() /n");

fd = open(DEVICE_NAME,O_RDWR);//打开设备

LOGE("vibClass_Init()-> fd = %d /n",fd);

if(fd == -1)

{

LOGE("open device %s error /n ",DEVICE_NAME);//打印调试信息

return 0;

}

else

{

return 1;

}

}

jint

Java_com_auly_control_vibClass_IOCTLVIB( JNIEnv* env, jobject thiz, jint controlcode )

{

int CTLCODE = controlcode;

LOGE("IOCTLVIB() = %x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值