999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于JNI技術(shù)的3G模塊控制研究和實(shí)現(xiàn)

2015-05-15 06:57:20王百青付永慶
應(yīng)用科技 2015年3期
關(guān)鍵詞:設(shè)備系統(tǒng)

王百青,付永慶

哈爾濱工程大學(xué)信息與通信工程學(xué)院,黑龍江哈爾濱 150001

基于JNI技術(shù)的3G模塊控制研究和實(shí)現(xiàn)

王百青,付永慶

哈爾濱工程大學(xué)信息與通信工程學(xué)院,黑龍江哈爾濱 150001

為了研究Android系統(tǒng)的應(yīng)用程序如何通過(guò)JNI技術(shù)實(shí)現(xiàn)對(duì)底層設(shè)備的操作,文中以3G模塊實(shí)驗(yàn)為例,介紹了Android系統(tǒng)的Linux內(nèi)核對(duì)3G模塊常用控制引腳的驅(qū)動(dòng)實(shí)現(xiàn)。結(jié)合JNI和Android NDK技術(shù)調(diào)用本地方法,并在E-clipse下編程實(shí)現(xiàn)Android應(yīng)用程序?qū)?G模塊的常用操作(如復(fù)位、飛行模式等)。實(shí)踐證明通過(guò)JNI技術(shù)可實(shí)現(xiàn)An-droid應(yīng)用程序操作底層設(shè)備。

Android系統(tǒng);Linux內(nèi)核;3G模塊;JNI技術(shù);Android NDK

作為基于Linux內(nèi)核的操作系統(tǒng),Android系統(tǒng)自推出以來(lái),就以“開(kāi)源”特性逐漸占據(jù)了嵌入式設(shè)備操作系統(tǒng)的主要市場(chǎng)份額,成為現(xiàn)有主要的嵌入式系統(tǒng)如iOS、Windows Phone、Android等市場(chǎng)占有率最高的操作系統(tǒng)。Android SDK(software develop-ment kit)中指定使用Java作為第三方應(yīng)用開(kāi)發(fā)語(yǔ)言[1],且Java應(yīng)用程序運(yùn)行在Dalvik虛擬機(jī)中。運(yùn)行在虛擬機(jī)中的Java代碼可以充分利用Java語(yǔ)言的平臺(tái)無(wú)關(guān)性,但是一定程度上造成了Android應(yīng)用程序很難操作底層硬件的缺點(diǎn)。為此Android系統(tǒng)中引入了JNI機(jī)制——利用Java的JNI機(jī)制,使用Android NDK(native development kit)編譯環(huán)境,應(yīng)用程序可以透過(guò)Android系統(tǒng)的應(yīng)用框架層,直接在Linux的文件系統(tǒng)對(duì)設(shè)備進(jìn)行操作[2]。文中討論了在Android系統(tǒng)中通過(guò)應(yīng)用程序控制3G模塊的常用接口——復(fù)位、飛行模式等,討論了JNI技術(shù)在Android系統(tǒng)中的應(yīng)用價(jià)值和意義。

1 Android JNI和NDK介紹

Android系統(tǒng)架構(gòu)采用了分層結(jié)構(gòu),保證了層與層之間相互分離,當(dāng)某一層發(fā)生變化時(shí),其他層受影響很少[3]。如圖1所示,從底層到頂層分別是Linux內(nèi)核層、系統(tǒng)庫(kù)和Android運(yùn)行時(shí)庫(kù)、應(yīng)用框架層和應(yīng)用程序?qū)樱?]。

JNI是JDK(Java native kit)的一部分,可以允許Java代碼和其他語(yǔ)言寫(xiě)的代碼進(jìn)行交互,以實(shí)現(xiàn)代碼在不同的平臺(tái)上移植。通過(guò)JNI,可以使得運(yùn)行于JVM(Java virtualmachine)的代碼調(diào)用C、C++等[5]語(yǔ)言編寫(xiě)的應(yīng)用程序或庫(kù)[6],同時(shí)也可以通過(guò)調(diào)用相應(yīng)的接口函數(shù)將Java虛擬機(jī)內(nèi)嵌到本地應(yīng)用程序中[7]。JNI機(jī)制調(diào)用本地的C/C++代碼庫(kù),可以充分利用C/C++代碼的高效性,來(lái)提高應(yīng)用程序的運(yùn)行效率。

Android NDK本質(zhì)上是一系列的工具集,用來(lái)完善Android應(yīng)用更加便捷的使用本地代碼,如C或C++代碼[8]。因此,用戶(hù)可以使用NDK將要求高性能的應(yīng)用邏輯使用C開(kāi)發(fā),從而提高應(yīng)用程序的執(zhí)行效率,而且可避免Java包都是可以反編譯的不安全性[9]。Android系統(tǒng)的層次結(jié)構(gòu)如圖1所示。

2 MU739模塊控制引腳及驅(qū)動(dòng)實(shí)現(xiàn)

MU739為華為公司推出的支持WCDMA、HSPA+的LGA 3G模塊,采用USB接口。在HSPA+模式下,上行速率可以達(dá)到5.76 Mbit/s,下行速率可以達(dá)到21.6 Mbit/s。在Linux內(nèi)核中,對(duì)USB 3G模塊的驅(qū)動(dòng)位于USB設(shè)備驅(qū)動(dòng)層[10-11],如圖2所示。

圖2 USB 3G模塊的驅(qū)動(dòng)在Linux內(nèi)核中的位置

在3G模塊的驅(qū)動(dòng)移植完成后,為實(shí)現(xiàn)對(duì)3G模塊的控制,文中選取了MU739模塊的上電控制引腳(ON1、ON2_N)、復(fù)位控制引腳(PWRDWN_N)、飛行模式控制引腳(W_DISABLE_N)和休眠控制引腳(WAKEUP_IN)來(lái)實(shí)現(xiàn)控制3G模塊的工作狀態(tài)。下面依次介紹這幾個(gè)引腳的主要功能。

1)ON1和ON2_N引腳用于打開(kāi)3G模塊,其中ON1引腳設(shè)置為默認(rèn)高電平,ON2_N通過(guò)控制引腳提供開(kāi)機(jī)時(shí)序,使3G模塊在上電之后處于工作狀態(tài);

2)PWRDWN_N引腳用于復(fù)位整個(gè)模塊系統(tǒng),使基帶、電源管理單元、RF單元進(jìn)入初始狀態(tài);

3)W_DISABLE_N引腳用于使模塊進(jìn)入飛行模式,關(guān)閉模塊的RF單元;

4)WAKEUP_IN引腳用于CPU來(lái)控制3G模塊的睡眠狀態(tài),當(dāng)設(shè)置為高電平時(shí),CPU喚醒MU739,當(dāng)電平為低時(shí),CPU使MU739進(jìn)入睡眠模式。

2.1 配置控制引腳為GPIO模式

設(shè)計(jì)中采用的CPU為飛思卡爾公司的iMX536多媒體處理器,該處理器采用ARMCortexTM-A8內(nèi)核,在車(chē)載環(huán)境中可以實(shí)現(xiàn)800 Hz的工作頻率。為了實(shí)現(xiàn)對(duì)片內(nèi)多種功能模塊的支持,iMX53x系列處理器采用IOMUX機(jī)制實(shí)現(xiàn)對(duì)IO引腳的復(fù)用分配。

對(duì)3G模塊的控制,主要通過(guò)iMX536處理器的IO控制實(shí)現(xiàn)。為此,需要在平臺(tái)設(shè)備的配置文件中,配置對(duì)應(yīng)的IO引腳為GPIO模式:

MX53_PAD_GPIO_19__GPIO4_5, //ON2

MX53_PAD_PATA_DA_2__GPIO7_8, //PWRDWN

MX53_PAD_PATA_CS_0__GPIO7_9, //W_DISABLE

MX53_PAD_PATA_CS_1__GPIO7_10, //WAKEUP_IN

并給與ON2_N的控制引腳實(shí)現(xiàn)模塊的開(kāi)啟時(shí)序(見(jiàn)圖3所示)。

圖3 開(kāi)啟3G模塊的時(shí)序圖

gpio_direction_output(ON2,1);

udelay(40);

gpio_direction_output(ON2,0);

其中,ON2為宏定義——#define ON2(3×32+5) /?GPIO_4_5?/

2.2 控制驅(qū)動(dòng)程序的編寫(xiě)

為實(shí)現(xiàn)對(duì)底層設(shè)備的操作,需要編寫(xiě)對(duì)應(yīng)的控制驅(qū)動(dòng)程序。因此,為實(shí)現(xiàn)對(duì)上述IO引腳的控制,需要編寫(xiě)對(duì)應(yīng)的驅(qū)動(dòng)代碼,即字符型設(shè)備驅(qū)動(dòng)。需要首先實(shí)例化Linux內(nèi)核中描述設(shè)備文件操作的結(jié)構(gòu)體file_operations(位于Linux內(nèi)核include/linux/下的Fs.h文件),其中定義了操作驅(qū)動(dòng)設(shè)備的主要操作接口函數(shù)指針。下面所示代碼為在本驅(qū)動(dòng)代碼中實(shí)例化結(jié)構(gòu)體file_operations:

上述函數(shù)指針中,主要實(shí)現(xiàn)功能的函數(shù)為mu739_cont_ioctl,該函數(shù)的實(shí)現(xiàn)原理是通過(guò)獲取打開(kāi)設(shè)備時(shí)傳入的參數(shù)值,來(lái)執(zhí)行對(duì)應(yīng)的IO控制輸出,以實(shí)現(xiàn)對(duì)應(yīng)控制引腳的控制時(shí)序(見(jiàn)圖4)。

圖4 3G模塊控制時(shí)序

static int mu739_cont_ioctl(struct inode?inode,struct file?file,unsigned int cmd,unsigned long arg){

在驅(qū)動(dòng)代碼最后,實(shí)現(xiàn)模塊的初始和注銷(xiāo)函數(shù)如下:

最后,將該驅(qū)動(dòng)靜態(tài)添加進(jìn)內(nèi)核中。編譯燒寫(xiě)后,會(huì)在Android系統(tǒng)的dev/目錄下查看到該設(shè)備mu739_cont_dev。

3 應(yīng)用程序編寫(xiě)

在Eclipse開(kāi)發(fā)環(huán)境中新建一個(gè)Android應(yīng)用工程mu739_control,用來(lái)作為控制3G模塊的Android應(yīng)用程序。

3.1 編寫(xiě)調(diào)用本地方法

在mu739_control工程目錄下新建包c(diǎn)om.exam-ple.myjni,用于聲明native方法以及給應(yīng)用程序調(diào)用的靜態(tài)庫(kù)名字:

其中native關(guān)鍵字用于告知編譯器該方法為本地方法;static關(guān)鍵字包括的語(yǔ)句System.loadLibrary("ContModule"),表示調(diào)用本地庫(kù)文件為libCont-Module.so(其命名規(guī)則是libFileName.so)。

之后,在工程目錄中,新建空文件夾jni,用于存放jni文件。并通過(guò)終端進(jìn)入工程的根目錄下,運(yùn)行命令javah,生成JNI頭文件:

$javah-classpath bin/classes-d jni/com.exam-ple.myjni.MyNative

其中,javah命令為NDK開(kāi)發(fā)環(huán)境中帶有的工具,其用法如圖5所示。

圖5 javah命令的使用方法

javah命令生成的頭文件名字為com_example_myjni_M(jìn)yNative.h,其中包含了上述本地方法的聲明方式:

然后,在jni/目錄下編寫(xiě)Android.mk文件,用來(lái)指導(dǎo)編譯工具編譯上述C文件:

最后,在終端運(yùn)行命令#ndk-build編譯,即可在libs/armeabi/目錄下生成.so庫(kù)文件libCont-Modu le.so。即為System.loadLibrary()中引用的靜態(tài)庫(kù)文件。

3.2 JAVA代碼實(shí)現(xiàn)

編寫(xiě)Android應(yīng)用代碼,實(shí)現(xiàn)對(duì)上述本地方法的調(diào)用。

在Android應(yīng)用工程中開(kāi)發(fā)一個(gè)Android應(yīng)用界面(如圖6所示),界面上的按鍵采用監(jiān)聽(tīng)的方式處理對(duì)3G設(shè)備的操作。

圖6 Android應(yīng)用程序控制界面

在代碼中,實(shí)現(xiàn)對(duì)上述按鍵的監(jiān)聽(tīng),為減少函數(shù)調(diào)用時(shí)引起的延時(shí),響應(yīng)按鍵的函數(shù)在新建的線程中實(shí)現(xiàn)。監(jiān)聽(tīng)按鍵的onClick函數(shù)代碼如下:

4 結(jié)束語(yǔ)

通過(guò)介紹Android系統(tǒng)應(yīng)用層代碼對(duì)3G模塊復(fù)位等控制引腳的操作,討論了Android應(yīng)用中使用JNI技術(shù)控制底層設(shè)備的實(shí)現(xiàn)方法和步驟,對(duì)于涉及到底層設(shè)備操作(如串口等)的應(yīng)用設(shè)計(jì)具有指導(dǎo)意義。在下一步的研究中,可以結(jié)合硬件抽象層實(shí)現(xiàn)底層和應(yīng)用層的隔離,討論及實(shí)現(xiàn)應(yīng)用層對(duì)底層設(shè)備的操作。

[1]金智義,張戟.基于Android平臺(tái)的串口通信實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2011,7(13):2983-2990.

[2]高海彬.JNI在Android系統(tǒng)下串口控制的應(yīng)用[J].信息技術(shù),2013(10):173-176.

[3]李剛.瘋狂Android講義[M].2版.北京:電子工業(yè)出版社,2011:78-79.

[4]高海彬.JNI在Android系統(tǒng)下串口控制的應(yīng)用[J].信息技術(shù),2011(10):173-176

[5]丁海洋,姚佳楠,王明飛.基于移動(dòng)平臺(tái)的印刷網(wǎng)點(diǎn)檢測(cè)技術(shù)[J].北京印刷學(xué)院學(xué)報(bào),2014(8):50-65.

[6]張華平,玄光哲,于貴平,等.基于JNI技術(shù)應(yīng)用框架的分析和實(shí)現(xiàn)[J].吉林大學(xué)學(xué)報(bào):信息科學(xué),2003,21(2):188-191.

[7]任俊偉,林東岱.JNI技術(shù)實(shí)現(xiàn)跨平臺(tái)開(kāi)發(fā)的研究[J].計(jì)算機(jī)應(yīng)用研究,2005(7):180-184.

[8]Google.Android Developer website[EB/OL].[2012-09-02].http://developer.a(chǎn)ndroid.com.

[9]王二偉.基于Android平臺(tái)人臉檢測(cè)與識(shí)別研究[D].西安:西安電子科技大學(xué),2013:11-22.

[10]劉淑峰.基于Android的多媒體與3G上網(wǎng)子系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2012:63-64.

[11]宋世磊,劉曉平,應(yīng)懷樵.基于ARM-Linux的USB 3G模塊設(shè)備驅(qū)動(dòng)的研究[J].計(jì)算機(jī)工程與應(yīng)用,2011:175-178.

Research and imp lementation of 3G module control based on JNI technology

WANG Baiqing,F(xiàn)U Yongqing
College of Information and Communication Engineering,Harbin Engineering University,Harbin 150001,China

In order to get the way by which the application of Android system can control the bottom devices through JNI technology,the 3Gmodule is used for the experiment.The driver implementation of3Gmodule controlling pins in Linux kernel of Android operating system was introduced.Besides,using JNIand Android NDK technology,and calling the nativemethods,it achieves the Android application which is developed in the IDE of Eclipse to operate 3G module,such as reset,flightmode,and so on.It is verified that the bottom equipment can be operated by An-droid application program through JNI technology.

Android operating system;Linux kernel;3G module;JNI technology;Android NDK

TP311.52

A

1009-671X(2015)03-035-05

10.3969/j.issn.1009-671X.201410002

2014-10-13.

日期:2015-04-20.作者簡(jiǎn)介:王百青(1988-),男,碩士研究生;付永慶(1956-),男,教授,博士生導(dǎo)師.

王百青,E-mail:1027486374@qq.com.

http://www.cnki.net/kcms/detail/23.1191.U.20150420.1012.003.html

猜你喜歡
設(shè)備系統(tǒng)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無(wú)人機(jī)系統(tǒng)
ZC系列無(wú)人機(jī)遙感系統(tǒng)
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
基于VB6.0+Access2010開(kāi)發(fā)的設(shè)備管理信息系統(tǒng)
基于MPU6050簡(jiǎn)單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
主站蜘蛛池模板: 国产精品欧美在线观看| 国产91特黄特色A级毛片| 午夜老司机永久免费看片| 伊人成色综合网| 在线播放真实国产乱子伦| 超碰aⅴ人人做人人爽欧美| 夜夜爽免费视频| 国产成年女人特黄特色毛片免| 一级香蕉人体视频| 国产日本欧美在线观看| 五月激情综合网| 亚洲视频免| 无码一区二区三区视频在线播放| 视频一区亚洲| 亚洲欧美精品一中文字幕| 日本中文字幕久久网站| 国产免费黄| 国产拍在线| 亚洲高清无在码在线无弹窗| 日韩欧美国产综合| 一级毛片免费观看久| 欧美精品亚洲精品日韩专区| 青青极品在线| 91毛片网| 思思热在线视频精品| 欧美亚洲国产一区| 亚洲综合色婷婷| 久综合日韩| 国产人成网线在线播放va| 亚洲第一页在线观看| 人妻中文久热无码丝袜| 91 九色视频丝袜| 亚洲精品无码人妻无码| 中文无码精品A∨在线观看不卡| 欧美日本在线观看| 国产欧美日韩18| 中文天堂在线视频| 视频二区亚洲精品| 久久综合丝袜日本网| 日韩天堂网| 99在线视频免费观看| 99一级毛片| 久久影院一区二区h| 色综合色国产热无码一| 国产精品毛片一区视频播| 亚洲清纯自偷自拍另类专区| 免费xxxxx在线观看网站| 久青草国产高清在线视频| 欧美一区二区自偷自拍视频| 欧美中文字幕在线播放| 国产日韩AV高潮在线| 国产黄色免费看| 妇女自拍偷自拍亚洲精品| 国产福利在线免费| 国产白丝av| 四虎永久在线精品影院| 黄色三级网站免费| 国产成人福利在线| 国产成人高清精品免费| 午夜福利免费视频| 免费国产一级 片内射老| 久久精品人妻中文视频| 热99精品视频| 亚洲无码37.| 91久久精品国产| 在线观看91香蕉国产免费| 亚洲高清无码精品| 中字无码av在线电影| 91成人免费观看在线观看| 亚洲国产黄色| 日韩精品专区免费无码aⅴ| 精品久久久久久成人AV| 超碰91免费人妻| 无码内射在线| 小说区 亚洲 自拍 另类| 波多野结衣一区二区三视频| 天天综合天天综合| 亚洲无限乱码| 99精品福利视频| 国产男人的天堂| 青青操视频免费观看| 亚洲精品少妇熟女|