xiaoyuzhou1228

LKT5103A Hid接口LINUX系统下JNI开发流程

0
阅读(824) 评论(21)

一、什么是JNI

Java以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决Java对本地操作的一种方法就是JNI。JNI是Java native interface的简写,意为Java本地调用,它允许Java代码和其他语言写的代码进行交互,从Java1。1开始,JNI标准成为Java平台的一部分。

     使用Java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,与硬件、操作系统进行交互,或者为了提高程序的性能。

二、平台以及环境

(1)开发平台

Linux系统或者虚拟机。

注意:因为涉及到LINUX下的HID接口,所以保证开发的系统内核在2.6版本以上。

(2)开发包

1):安装gcc和g++,保证两个版本一致。

安装指令:

yum install gcc

yum install gcc-c++

查版本指令:

g++ --version

gcc --version

2):安装jdk环境。具体可以上网上找资料。

以debian系统为例,在终端运行的安装指令如下:

sudo apt-get update

sudo apt-get install default-jre

sudo apt-get install default-jdk

三、开发步骤

1)创建一个Java程序(如LKT5103AJni.java)定义原生的c/c++函数。

2)用javac编译(指令:javac LKT5103AJni.java) LKT5103AJni.java生成 LKT5103AJni.class。

3)用javah带-jni参数编译(指令:javah -jni LKT5103AJni) LKT5103AJni.class生成 LKT5103AJni.h文件,该文件中 定义了c的函数原型。在实现c函数的时候需要。

4)创建LKT5103AJni.c,实现LKT5103AJni.h定义的函数。

5)编译LKT5103AJni。c生成libLKT5103AJni。so。

指令:gcc -I/usr/lib/jvm/java-8-openjdk-amd64/include/ -I/usr/lib/jvm/java-8-openjdk-amd64/include/linux -fPIC -shared -o libLKT5103AJni。so LKT5103AJni。c

6)创建testJni。Java,实现测试jni接口。

7)编译testJni。java(指令:javac testJni。java)。

8)运行测试代码。

(指令:export LD_LIBRARY_PATH=。/   

java testJni   

或者:

java -Djava。library。path=。 testJni)


  1. 文章很不错,学习了,谢谢楼主的分享!

  2.   文章很实用,有没有详细的JNI接口说明呀?这些编译指令都是一样的吗? 

  3. 使用JNI是因为LKT5103A是其他语言的吗,那它支持什么语言?


  4. @Latour   

    这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种

    加密狗里面也都是芯片,只不过加了个外壳而已


  5. 这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种

  6. 因为有些功能JAVA无法提供,比如对扫描仪驱动,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了. 

  7. 为什么要用JNI呢

  8. LKT5103A是什么产品,有什么功能?是不是我自己的库也可以这样调用呢?如果可以那就非常有用了


  9. 应该还支持其他的USB接口吧 

  10. LKT5103A,除了HID接口,还有别的接口吗

  11. LKT5103A是以32位安全芯片平台为基础的具有目前行业内最高性能最高安全性的软件加密产品。

  12. 文中的LKT5103A 是楼主新推出的一款产品吧,能简单介绍一下功能吗?

  13. 文中的LKT5103A 是楼主新推出的一款产品吧,能简单介绍一下功能吗? 


  14. Linux 2.6内核中包含了HID驱动,能够自动把USB Key等HID外设识别成“/dev/hiddev0”之类的设备。但是该驱动没有实现write接口,因此无法象Windows平台那样使用 ReadFile和WriteFile来读写HID设备,而只能使用ioctl接口。

  15. 很不错学习了,但是为什么要求内核是2.6版本以上。低版本也支持HID协议啊?


幸运赛车 智慧彩票投注 内蒙古快3 上海11选5开奖 德国时时彩 吉林快3走势 吉林快3代理 彩票高賠率好平台 上海时时乐开奖 河北快3基本走势