xiaoyuhzou1228的个人空间 https://www.eechina.com/space-uid-139997.html [收藏] [复制] [RSS]

博客

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

热度 9已有 1293 次阅读2019-10-16 09:30

一、什么是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)


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (19 个评论)

回复 miniminimini 2019-10-17 13:38
:JNI主要还是举例子,举例子直观,
回复 zntsbkhhh 2019-10-17 14:33
LKT5103A,好像在网上看见过,具体谁家的产品记不太清了…
回复 ?-о 2019-10-17 15:27
凌科芯安的,我们公司就在用呢,技术服务很到位
回复 tyl20100 2019-10-17 17:01
这套开发流程挺好的 ,说的很详细,已经推荐给我们技术部门了
回复 简单但狮子 2019-10-18 15:39
​插入图片更形象生动,每一步都配上初始图片和结果图,会更受益。
回复 QL87 2019-10-18 22:59
很不错学习了,但是为什么要求内核是2.6版本以上。低版本也支持HID协议啊?
回复 xiaoyuhzou1228 2019-10-19 09:02
Linux 2.6内核中包含了HID驱动,能够自动把USB Key等HID外设识别成“/dev/hiddev0”之类的设备。但是该驱动没有实现write接口,因此无法象Windows平台那样使用 ReadFile和WriteFile来读写HID设备,而只能使用ioctl接口。
回复 Test_wf 2019-10-19 11:04
文中的LKT5103A 是楼主新推出的一款产品吧,能简单介绍一下功能吗?
回复 wang0327 2019-10-19 18:31
LKT5103A是以32位安全芯片平台为基础的具有目前行业内最高性能最高安全性的软件加密产品。
回复 miniminimini 2019-10-19 23:27
5103A除了HID接口,还有别的接口吗
回复 zntsbkhhh 2019-10-19 23:40
应该还支持其他的USB接口吧
回复 tyl20100 2019-10-20 03:18
LKT5103A是什么产品,有什么功能?是不是我自己的库也可以这样调用呢?如果可以那就非常有用了
回复 简单但狮子 2019-10-20 12:04
为什么要用JNI呢
回复 ?-о 2019-10-20 22:44
因为有些功能JAVA无法提供,比如对扫描仪驱动,只能想办法通过C/C++来操作,然后用JAVA去调用C.这就需要JNI了. 
回复 QL87 2019-10-21 21:26
这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种
回复 xiaoyuhzou1228 2019-10-22 09:11
QL87: 这个是外接到USB接口的设备吗?有没有芯片贴片形式?可以集成到主板上的那种
加密狗里面也都是芯片,只不过加了个外壳而已
回复 Test_wf 2019-10-22 11:54
使用JNI是因为LKT5103A是其他语言的吗,那它支持什么语言?
回复 kessy1 2019-10-22 13:36
文章很实用,有没有详细的JNI接口说明呀?这些编译指令都是一样的吗? 
回复 wang0327 2019-10-22 18:00
文章很不错,学习了,谢谢楼主的分享!

facelist

您需要登录后才可以评论 登录 | 立即注册

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
返回顶部