xiaoyuhzou1228的個(gè)人空間 http://selenalain.com/space-uid-139997.html [收藏] [復制] [RSS]

博客

LKT5103A Hid接口LINUX系統下JNI開(kāi)發(fā)流程

熱度 9已有 1757 次閱讀2019-10-16 09:30

一、什么是JNI

Java以其跨平臺的特性深受人們喜愛(ài),而又正由于它的跨平臺的目的,使得它和本地機器的各種內部聯(lián)系變得很少,約束了它的功能。解決Java對本地操作的一種方法就是JNI。JNI是Java native interface的簡(jiǎn)寫(xiě),意為Java本地調用,它允許Java代碼和其他語(yǔ)言寫(xiě)的代碼進(jìn)行交互,從Java1.1開(kāi)始,JNI標準成為Java平臺的一部分。

     使用Java與本地已編譯的代碼交互,通常會(huì )喪失平臺可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的。例如,與硬件、操作系統進(jìn)行交互,或者為了提高程序的性能。

二、平臺以及環(huán)境

(1)開(kāi)發(fā)平臺

Linux系統或者虛擬機。

注意:因為涉及到LINUX下的HID接口,所以保證開(kāi)發(fā)的系統內核在2.6版本以上。

(2)開(kāi)發(fā)包

1):安裝gcc和g++,保證兩個(gè)版本一致。

安裝指令:

yum install gcc

yum install gcc-c++

查版本指令:

g++ --version

gcc --version

2):安裝jdk環(huán)境。具體可以上網(wǎng)上找資料。

debian系統為例,在終端運行的安裝指令如下:

sudo apt-get update

sudo apt-get install default-jre

sudo apt-get install default-jdk

三、開(kāi)發(fā)步驟

1)創(chuàng )建一個(gè)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的函數原型。在實(shí)現c函數的時(shí)候需要。

4)創(chuàng )建LKT5103AJni.c,實(shí)現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)創(chuàng )建testJni.Java,實(shí)現測試jni接口。

7)編譯testJni.java(指令:javac testJni.java)。

8)運行測試代碼。

(指令:export LD_LIBRARY_PATH=./   

java testJni   

或者:

java -Djava.library.path=. testJni)

發(fā)表評論 評論 (19 個(gè)評論)

回復 miniminimini 2019-10-17 13:38
:JNI主要還是舉例子,舉例子直觀(guān),
回復 zntsbkhhh 2019-10-17 14:33
LKT5103A,好像在網(wǎng)上看見(jiàn)過(guò),具體誰(shuí)家的產(chǎn)品記不太清了…
回復 ?-о 2019-10-17 15:27
凌科芯安的,我們公司就在用呢,技術(shù)服務(wù)很到位
回復 tyl20100 2019-10-17 17:01
這套開(kāi)發(fā)流程挺好的 ,說(shuō)的很詳細,已經(jīng)推薦給我們技術(shù)部門(mén)了
回復 簡(jiǎn)單但獅子 2019-10-18 15:39
​插入圖片更形象生動(dòng),每一步都配上初始圖片和結果圖,會(huì )更受益。
回復 QL87 2019-10-18 22:59
很不錯學(xué)習了,但是為什么要求內核是2.6版本以上。低版本也支持HID協(xié)議?
回復 xiaoyuhzou1228 2019-10-19 09:02
Linux 2.6內核中包含了HID驅動(dòng),能夠自動(dòng)把USB Key等HID外設識別成“/dev/hiddev0”之類(lèi)的設備。但是該驅動(dòng)沒(méi)有實(shí)現write接口,因此無(wú)法象Windows平臺那樣使用 ReadFile和WriteFile來(lái)讀寫(xiě)HID設備,而只能使用ioctl接口。
回復 Test_wf 2019-10-19 11:04
文中的LKT5103A 是樓主新推出的一款產(chǎn)品吧,能簡(jiǎn)單介紹一下功能嗎?
回復 wang0327 2019-10-19 18:31
LKT5103A是以32位安全芯片平臺為基礎的具有目前行業(yè)內最高性能最高安全性的軟件加密產(chǎn)品。
回復 miniminimini 2019-10-19 23:27
5103A除了HID接口,還有別的接口嗎
回復 zntsbkhhh 2019-10-19 23:40
應該還支持其他的USB接口吧
回復 tyl20100 2019-10-20 03:18
LKT5103A是什么產(chǎn)品,有什么功能?是不是我自己的庫也可以這樣調用呢?如果可以那就非常有用了
回復 簡(jiǎn)單但獅子 2019-10-20 12:04
為什么要用JNI呢
回復 ?-о 2019-10-20 22:44
因為有些功能JAVA無(wú)法提供,比如對掃描儀驅動(dòng),只能想辦法通過(guò)C/C++來(lái)操作,然后用JAVA去調用C.這就需要JNI了. 
回復 QL87 2019-10-21 21:26
這個(gè)是外接到USB接口的設備嗎?有沒(méi)有芯片貼片形式?可以集成到主板上的那種
回復 xiaoyuhzou1228 2019-10-22 09:11
QL87: 這個(gè)是外接到USB接口的設備嗎?有沒(méi)有芯片貼片形式?可以集成到主板上的那種
加密狗里面也都是芯片,只不過(guò)加了個(gè)外殼而已
回復 Test_wf 2019-10-22 11:54
使用JNI是因為L(cháng)KT5103A是其他語(yǔ)言的嗎,那它支持什么語(yǔ)言?
回復 kessy1 2019-10-22 13:36
文章很實(shí)用,有沒(méi)有詳細的JNI接口說(shuō)明呀?這些編譯指令都是一樣的嗎? 
回復 wang0327 2019-10-22 18:00
文章很不錯,學(xué)習了,謝謝樓主的分享!

facelist

您需要登錄后才可以評論 登錄 | 立即注冊

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
返回頂部
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页