操作系統(tǒng)中直接控制硬件設(shè)備的方法和模塊的制作方法
【專利摘要】一種操作系統(tǒng)中直接控制硬件設(shè)備的方法和模塊,其中,先獲取鏈接庫(kù)加載指令,加載鏈接庫(kù)■’在獲取用于控制硬件設(shè)備動(dòng)作的指令后,調(diào)用鏈接庫(kù)中與硬件設(shè)備動(dòng)作指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù);之后執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的直接控制。
【專利說(shuō)明】操作系統(tǒng)中直接控制硬件設(shè)備的方法和模塊
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及電子設(shè)備操作系統(tǒng)的開(kāi)發(fā),具體涉及一種操作系統(tǒng)中直接控制硬件設(shè) 備的方法和模塊。
【背景技術(shù)】
[0002] 請(qǐng)參考圖1,為安卓(安卓)系統(tǒng)的架構(gòu)示意圖。
[0003] 第一層101為L(zhǎng)inux內(nèi)核驅(qū)動(dòng)層(Linux kernel),其由C/C++實(shí)現(xiàn)。安卓核心系 統(tǒng)服務(wù)依賴于Linux內(nèi)核,包括安全性、內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議、驅(qū)動(dòng)模型等。Linux 內(nèi)核也作為硬件和軟件棧之間的抽象層,除了標(biāo)準(zhǔn)的Linux內(nèi)核外,安卓還增加了內(nèi)核的 驅(qū)動(dòng)程序,例如:Binder(IPC)驅(qū)動(dòng)、camera驅(qū)動(dòng)、電源管理等。
[0004] 第二層為組件庫(kù)和虛擬機(jī)層,其中,102為組件庫(kù)層(Libraries),103為虛擬機(jī)層 (Android Runtime),組件庫(kù)層102通過(guò)C/C++實(shí)現(xiàn),包含C/C++庫(kù),用于安卓系統(tǒng)中不同的 組件使用,它們通過(guò)安卓應(yīng)用程序框架為開(kāi)發(fā)者進(jìn)行服務(wù)。虛擬機(jī)層103作為安卓系統(tǒng)的 運(yùn)動(dòng)環(huán)境,其提供了 Java編程語(yǔ)言核心庫(kù)的大多數(shù)功能,由Dalvik Java虛擬機(jī)和基礎(chǔ)的 Java類庫(kù)組成。
[0005] 第三層104為應(yīng)用框架層(Application Framework),在安卓系統(tǒng)中,開(kāi)發(fā)人員也 可以完全訪問(wèn)核心應(yīng)用程序所使用的API (Application Programming Interface,應(yīng)用程 序編程接口)框架。
[0006] 第四層105為應(yīng)用程序?qū)樱ˋpplications),安卓應(yīng)用程序都是采用Java語(yǔ)言編寫 的,用戶開(kāi)發(fā)的安卓應(yīng)用程序和安卓的核心應(yīng)用程序是同一層次的,它們都是基于安卓的 系統(tǒng)API構(gòu)建的。
[0007]目前,眾多的電子設(shè)備采用安卓系統(tǒng),且設(shè)備硬件上都安裝有閃光燈,在很多情況 下,用戶具有使用閃光燈的需求,因此,如何在安卓系統(tǒng)上實(shí)現(xiàn)閃光燈的控制,是本領(lǐng)域技 術(shù)人員正在研究的問(wèn)題。在安卓系統(tǒng)中,當(dāng)需要控制閃光燈的開(kāi)關(guān)時(shí),通常是先調(diào)用camera driver,利用camera自帶的接口,通過(guò)設(shè)置camera的參數(shù),來(lái)實(shí)現(xiàn)閃光燈的開(kāi)關(guān)。而這種 對(duì)閃光燈的控制方式,屬于間接控制,其對(duì)閃光燈的調(diào)用具有一定的時(shí)間延遲。
【發(fā)明內(nèi)容】
[0008] 根據(jù)本申請(qǐng)的第一方面,本申請(qǐng)?zhí)峁┝艘环N操作系統(tǒng)中直接控制硬件設(shè)備的方 法,包括:
[0009] 獲取鏈接庫(kù)加載指令,加載鏈接庫(kù),所述鏈接庫(kù)中包括用于控制硬件設(shè)備動(dòng)作的 功能實(shí)現(xiàn)函數(shù);
[0010] 獲取用于控制硬件設(shè)備動(dòng)作的指令;
[0011] 調(diào)用所述鏈接庫(kù)中與所述控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù);
[0012] 執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
[0013] 根據(jù)本申請(qǐng)的第二方面,本申請(qǐng)還提供了一種操作系統(tǒng)中直接控制硬件設(shè)備的模 塊,包括:
[0014] 加載單元,用于獲取鏈接庫(kù)加載指令,并加載鏈接庫(kù),所述鏈接庫(kù)中包括用于控制 硬件設(shè)備動(dòng)作的功能實(shí)現(xiàn)函數(shù);
[0015] 檢測(cè)單元,用于獲取控制硬件設(shè)備動(dòng)作的指令;
[0016] 調(diào)用單元,用于調(diào)用所述鏈接庫(kù)中與所述控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí) 現(xiàn)函數(shù);
[0017] 執(zhí)行單元,用于執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
[0018] 本申請(qǐng)?zhí)峁┑牟僮飨到y(tǒng)中直接控制硬件設(shè)備的方法和模塊中,先獲取鏈接庫(kù)加載 指令,加載鏈接庫(kù);在獲取用于控制硬件設(shè)備動(dòng)作的指令后,調(diào)用鏈接庫(kù)中與硬件設(shè)備動(dòng)作 指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù);之后執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的 動(dòng)作,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的直接控制。
【專利附圖】
【附圖說(shuō)明】
[0019] 圖1為安卓系統(tǒng)的架構(gòu)示意圖;
[0020]圖2為本申請(qǐng)一種實(shí)施例提供的安卓系統(tǒng)的架構(gòu)示意圖;
[0021]圖3為本申請(qǐng)一種實(shí)施例提供的安卓系統(tǒng)的架構(gòu)分析示意圖;
[0022] 圖4為本申請(qǐng)一種實(shí)施例中安卓系統(tǒng)中直接控制閃光燈開(kāi)關(guān)的方法的流程示意 圖;
[0023]圖5為本申請(qǐng)一種實(shí)施例中安卓系統(tǒng)中直接控制閃光燈開(kāi)關(guān)的模塊的結(jié)構(gòu)示意 圖。
【具體實(shí)施方式】
[0024] 為了更好地理解本申請(qǐng),本申請(qǐng)實(shí)施例以安卓系統(tǒng)中直接控制閃光燈開(kāi)關(guān)為例進(jìn) 行說(shuō)明,應(yīng)當(dāng)理解,本申請(qǐng)中所指的操作系統(tǒng)還可以是ioS、mac os等其他操作系統(tǒng),硬件設(shè) 備還可以是電子設(shè)備中攝像頭、藍(lán)牙、傳感器、麥克風(fēng)等。
[0025] 下面通過(guò)具體實(shí)施例對(duì)本申請(qǐng)做進(jìn)一步說(shuō)明。
[0026] 在本申請(qǐng)實(shí)施例中,通過(guò)在Linux內(nèi)核空間(Linux Kernel層)實(shí)現(xiàn)內(nèi)核驅(qū)動(dòng)程 序(閃光燈驅(qū)動(dòng))和在用戶空間實(shí)現(xiàn)硬件抽象層接口,以向更上一層提供硬件訪問(wèn)接口,即 為安卓系統(tǒng)的應(yīng)用框架層提供硬件服務(wù)。由于安卓系統(tǒng)的應(yīng)用程序是用Java語(yǔ)言編寫的, 硬件驅(qū)動(dòng)程序是用C/C++語(yǔ)言來(lái)實(shí)現(xiàn)的,而Java提供了 JNI(Java Native Interface, Java 本地調(diào)用)方法調(diào)用,因此,在安卓系統(tǒng)中,Java應(yīng)用程序可以通過(guò)JNI來(lái)調(diào)用硬件抽象層 接口。
[0027] 請(qǐng)參考圖2,本實(shí)施例中,將安卓系統(tǒng)的架構(gòu)分為五層。第一層201為L(zhǎng)inux內(nèi)核 驅(qū)動(dòng)層(Linux kernel),第二層 202 為硬件抽象層(HAL, Hardware Abstraction Layer), 第三層203、204為組件庫(kù)層203 (Libraries)和虛擬機(jī)層204 (Android Runtime),第四層 205為應(yīng)用框架層(Application Framework),第五層206為應(yīng)用程序?qū)樱ˋpplications)。
[0028] 基于圖2,請(qǐng)參考圖3,其示出了從另一角度對(duì)安卓系統(tǒng)的架構(gòu)的分析??蓪⒄麄€(gè) 安卓系統(tǒng)分為硬件、內(nèi)核空間和用戶空間三個(gè)部分,其各自包括的構(gòu)架內(nèi)容如圖3所示。
[0029] 在本實(shí)施例中,將JNI層劃分到第三層中,JNI層為應(yīng)用框架層設(shè)計(jì)了一系列接口 函數(shù),而在這些接口函數(shù)的具體實(shí)現(xiàn)中,利用回調(diào)函數(shù)與硬件抽象層進(jìn)行交互。
[0030] 需要說(shuō)明的是,本申請(qǐng)實(shí)施例提供的直接控制閃光燈開(kāi)關(guān)的方法也同樣適用于圖 1所示架構(gòu)的安卓系統(tǒng),本實(shí)施例中增加硬件抽象層的作用在于,為不具有標(biāo)準(zhǔn)Linux內(nèi)核 驅(qū)動(dòng)層接口的硬件設(shè)備提供接入的路徑,將原本可讀性差的接口轉(zhuǎn)化成可讀性好的接口, 提供給上層程序調(diào)用。即硬件抽象層運(yùn)行于Linux內(nèi)核驅(qū)動(dòng)層之上,用于在Linux內(nèi)核驅(qū) 動(dòng)層的支持下,為應(yīng)用框架層和JNI層提供對(duì)閃光燈控制的接口實(shí)現(xiàn)。
[0031] 圖1和圖2中各層的內(nèi)部框架為本領(lǐng)域技術(shù)人員熟知的,因此,本申請(qǐng)不對(duì)其進(jìn)行 一一翻譯和說(shuō)明。
[0032] 請(qǐng)參考圖4,本實(shí)施例提供了一種安卓系統(tǒng)中直接控制閃光燈開(kāi)關(guān)的方法,包括下 面步驟:
[0033] 步驟301 :應(yīng)用框架層檢測(cè)獲取鏈接庫(kù)加載指令。
[0034] 在具體實(shí)施例中,一方面,安卓系統(tǒng)在啟動(dòng)后會(huì)自動(dòng)加載相應(yīng)的鏈接庫(kù),因此,鏈 接庫(kù)加載指令可以是安卓系統(tǒng)在啟動(dòng)后發(fā)出的一個(gè)指令;另一方面,鏈接庫(kù)只有在需要調(diào) 用相應(yīng)的功能實(shí)現(xiàn)函數(shù)時(shí)才需要進(jìn)行加載,因此,鏈接庫(kù)加載指令可以是安卓系統(tǒng)檢測(cè)到 要進(jìn)行功能實(shí)現(xiàn)函數(shù)的調(diào)用時(shí)發(fā)出的一個(gè)指令。
[0035] 步驟302 :應(yīng)用框架層加載鏈接庫(kù),鏈接庫(kù)中包括用于控制閃光燈動(dòng)作的功能實(shí) 現(xiàn)函數(shù)。
[0036] 功能實(shí)現(xiàn)函數(shù)為用于控制閃光燈動(dòng)作的函數(shù),例如:
[0037] led_on
[0038] led_off
[0039] ......
[0040] 或者當(dāng)led的驅(qū)動(dòng)信號(hào)需要由另外一個(gè)設(shè)備給出時(shí),例如CPU芯片或攝像頭芯片 等,則需要先打開(kāi)該設(shè)備,然后再驅(qū)動(dòng)LED發(fā)光。這樣的優(yōu)勢(shì)是控制燈的模式更加靈活,例 如不同顏色、不同亮度等,則可以寫如下函數(shù):
[0041] led_device_open//打開(kāi)閃光燈(可選,其功能是打開(kāi)上述設(shè)備)
[0042] led_device_close//關(guān)閉閃光燈(可選,其功能是打開(kāi)上述設(shè)備)
[0043] led_on
[0044] led_off
[0045] ......
[0046] 上述用于控制閃光燈動(dòng)作的函數(shù)在定義完畢后,可以保存在.c文件里,.c文件中 是所有變量和函數(shù)的定義。
[0047] 步驟303 :應(yīng)用程序?qū)荧@取用于控制閃光燈動(dòng)作的指令。該指令可以是用戶通過(guò) 安卓設(shè)備的人機(jī)交互界面(即應(yīng)用程序?qū)樱┹斎氲挠糜诳刂崎W光燈動(dòng)作的指令;也可以是 應(yīng)用程序?qū)又幸丫幋a好的指令串,例如用"0"和"1"表示的數(shù)據(jù)串,其中,"0"表示閃光燈 關(guān)閉,"1"表示閃光燈打開(kāi)。
[0048] 基于步驟301,步驟303中用于控制閃光燈動(dòng)作的指令也可以作為鏈接庫(kù)加載指 令,用于控制閃光燈動(dòng)作的指令即可理解為要進(jìn)行功能實(shí)現(xiàn)函數(shù)的調(diào)用,因此,需要說(shuō)明的 是,本實(shí)施例中提供的方法的步驟順序不應(yīng)該理解為對(duì)本申請(qǐng)的限定,在其他實(shí)施例中,其 步驟順序可以根據(jù)實(shí)際情況進(jìn)行適當(dāng)?shù)淖儞Q。
[0049] 步驟304 :應(yīng)用程序?qū)訖z測(cè)鏈接庫(kù)是否加載完畢,如果否,則繼續(xù)待鏈接庫(kù)加載完 畢,如果是,則繼續(xù)步驟305。
[0050] 步驟305 :應(yīng)用程序?qū)诱{(diào)用鏈接庫(kù)中與用于控制閃光燈動(dòng)作的指令對(duì)應(yīng)的功能實(shí) 現(xiàn)函數(shù)。
[0051] 應(yīng)用程序?qū)涌梢栽跈z測(cè)到鏈接庫(kù)全部加載完畢時(shí)調(diào)用功能實(shí)現(xiàn)函數(shù),或者在檢測(cè) 的同時(shí)即進(jìn)行調(diào)用,或者可以設(shè)定預(yù)定的時(shí)間,當(dāng)滿足一定的預(yù)定時(shí)間時(shí),便調(diào)用功能實(shí)現(xiàn) 函數(shù)。
[0052] 步驟306 :Linux內(nèi)核驅(qū)動(dòng)層執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制閃光燈執(zhí)行相應(yīng) 的動(dòng)作。
[0053] 本實(shí)施例中,Linux內(nèi)核驅(qū)動(dòng)層中設(shè)置有閃光燈驅(qū)動(dòng),閃光燈驅(qū)動(dòng)執(zhí)行被調(diào)用的功 能實(shí)現(xiàn)函數(shù),以控制閃光燈執(zhí)行相應(yīng)的動(dòng)作。
[0054] 目前,閃光燈通常只用于作為camera的輔助硬件,只有在使用camera時(shí),才有可 能會(huì)使用到閃光燈,因此,安卓系統(tǒng)中在使用閃光燈時(shí),必須先調(diào)用camera driver,通過(guò)設(shè) 置camera參數(shù)來(lái)實(shí)現(xiàn)閃光燈的控制。即,對(duì)閃光燈的控制為間接控制的方式。
[0055] 在通過(guò)camera driver控制閃光燈時(shí)會(huì)出現(xiàn)時(shí)間延遲的問(wèn)題,但對(duì)于目前閃光燈 的應(yīng)用范圍,該時(shí)間延遲不會(huì)影響正常的使用。然而,隨著光通信(例如可見(jiàn)光通信)的發(fā) 展,當(dāng)需要通過(guò)光進(jìn)行信息傳輸時(shí),由于光通信對(duì)傳輸速度及信息傳輸準(zhǔn)確性的要求,上述 時(shí)間延遲的問(wèn)題便逐漸突顯出來(lái),并成為光通信發(fā)展的障礙之一。
[0056] 本實(shí)施例中,在安卓系統(tǒng)的Linux內(nèi)核驅(qū)動(dòng)層中獨(dú)立設(shè)置有閃光燈驅(qū)動(dòng),在控制 閃光燈時(shí),可以直接調(diào)用閃光燈驅(qū)動(dòng),其對(duì)閃光燈的控制方式為直接控制??梢员苊庠谕ㄟ^(guò) camera driver控制閃光燈時(shí)出現(xiàn)的時(shí)間延遲。
[0057] JNI層定義有接口函數(shù)。應(yīng)用程序?qū)痈鶕?jù)JNI層的接口函數(shù)調(diào)用鏈接庫(kù)中與控制 閃光燈動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù),以供Linux內(nèi)核驅(qū)動(dòng)層的閃光燈驅(qū)動(dòng)執(zhí)行相應(yīng)的 功能實(shí)現(xiàn)函數(shù)。
[0058] 當(dāng)所述操作系統(tǒng)為I0S系統(tǒng),則syscall為本地化接口處,可實(shí)現(xiàn)安卓系統(tǒng)中JNI 層定義有接口函數(shù)的作用,此處不再贅述。
[0059] JNI層的接口函數(shù)定義了 C/C++函數(shù)與JAVA函數(shù)的對(duì)應(yīng)關(guān)系,該接口函數(shù)采用 JNI方法將硬件抽象層的C/C++函數(shù)映射到應(yīng)用程序?qū)拥腏AVA函數(shù)上,以實(shí)現(xiàn)硬件抽象層 (采用C/C++語(yǔ)言)與應(yīng)用程序?qū)樱ú捎肑AVA語(yǔ)言)的交互。led_on為JAVA函數(shù),只有 通過(guò)JNI接口的映射才能調(diào)用底層的功能函數(shù),它會(huì)在JNI層中映射成名為java_全包名 _類名_led_on的本地函數(shù),再在函數(shù)里調(diào)用底層功能函數(shù)。
[0060] 安卓運(yùn)行環(huán)境中的Dalvik虛擬機(jī)在調(diào)用一個(gè)成員函數(shù)時(shí),如果發(fā)現(xiàn)該成員函數(shù) 是一個(gè)JNI方法,那么就會(huì)直接跳到它的地址去執(zhí)行。即,JNI方法是直接在本地操作系統(tǒng) 上執(zhí)行的,而不是由Dalvik虛擬機(jī)解釋器執(zhí)行。因此,JNI方法是安卓應(yīng)用程序與本地操 作系統(tǒng)直接進(jìn)行通信的一個(gè)手段,通過(guò)JNI方法使得通信更加高效。
[0061] 優(yōu)選的,JNI層保存有功能實(shí)現(xiàn)函數(shù)實(shí)例化后的地址,以便于JNI層直接調(diào)用功能 實(shí)現(xiàn)函數(shù)。實(shí)例化是指在面向?qū)ο蟮木幊讨?,用類(Class)創(chuàng)建對(duì)象的過(guò)程。例如:在閃光 燈的控制過(guò)程中,將閃光燈動(dòng)作作為類,將開(kāi)啟閃光燈、關(guān)閉閃光燈等具體的功能實(shí)現(xiàn)函數(shù) 創(chuàng)建為對(duì)象。該對(duì)象的創(chuàng)建過(guò)程,即為實(shí)例化。該對(duì)象創(chuàng)建完后會(huì)有一對(duì)應(yīng)的地址,JNI層 保存該地址后,在后續(xù)調(diào)用該功能實(shí)現(xiàn)函數(shù)時(shí),即可以根據(jù)該地址快速查詢到相應(yīng)的對(duì)象, 而不需要先檢索該功能實(shí)現(xiàn)函數(shù)對(duì)應(yīng)的類。
[0062] 本實(shí)施例中,在硬件抽象層定義有下面三個(gè)結(jié)構(gòu)體:
[0063] struct hw_module_t ;//模塊類型:每一個(gè)硬件模塊的必須申明一個(gè)hal_ module_info_sym的數(shù)據(jù)結(jié)構(gòu)體,該結(jié)構(gòu)體的第一個(gè)成員必須是以hw_module_t為數(shù)據(jù)的 結(jié)構(gòu)體。
[0064] struct hwm_odule_methods_t ;//模塊方法:該結(jié)構(gòu)體僅提供一個(gè)打開(kāi)特殊設(shè)備 的open函數(shù)的接口,其傳入?yún)?shù)為"hw_module_t, id"和"w_device_t",該函數(shù)用于初始 化hw_device_t的各個(gè)成員。
[0065] strcut hw_device_t.//設(shè)備類型:對(duì)于每一個(gè)設(shè)備數(shù)據(jù)結(jié)構(gòu)體都必須以該結(jié)構(gòu) 體開(kāi)頭,該結(jié)構(gòu)體是所有設(shè)備的引導(dǎo)線,在該結(jié)構(gòu)體之后才是每一個(gè)設(shè)備自己的數(shù)據(jù)。
[0066] 本實(shí)施例中,在定義硬件模塊類型結(jié)構(gòu)體時(shí),硬件抽象層規(guī)定不能直接使用hw_ module_t結(jié)構(gòu)體,需要做一個(gè)繼承,即在該結(jié)構(gòu)體外再套一層結(jié)構(gòu)體,但hw_module_t結(jié)構(gòu) 體必須是該結(jié)構(gòu)體的第一個(gè)成員變量數(shù)據(jù)類型,以方便兩者之間的強(qiáng)制轉(zhuǎn)換。其部分程序 代碼可參考如下:
[0067]
[0068]
【權(quán)利要求】
1. 一種操作系統(tǒng)中直接控制硬件設(shè)備的方法,其特征在于,包括: 獲取鏈接庫(kù)加載指令,加載鏈接庫(kù),所述鏈接庫(kù)中包括用于控制硬件設(shè)備動(dòng)作的功能 實(shí)現(xiàn)函數(shù); 獲取用于控制硬件設(shè)備動(dòng)作的指令; 調(diào)用所述鏈接庫(kù)中與所述控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù); 執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
2.如權(quán)利要求1所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓系 統(tǒng)的內(nèi)核驅(qū)動(dòng)層中設(shè)置有所述硬件設(shè)備的驅(qū)動(dòng),所述硬件設(shè)備的驅(qū)動(dòng)執(zhí)行被調(diào)用的功能實(shí) 現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作;或者, 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng),所述IOS系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè)備的驅(qū) 動(dòng),所述硬件設(shè)備的驅(qū)動(dòng)執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
3.如權(quán)利要求2所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓系 統(tǒng)的JNI層定義有相應(yīng)的JNI接口函數(shù); 獲取鏈接庫(kù)加載指令,加載鏈接庫(kù)后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫(kù)中與控制硬 件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù),以供內(nèi)核驅(qū)動(dòng)層的硬件設(shè)備驅(qū)動(dòng)執(zhí)行相應(yīng)的功能 實(shí)現(xiàn)函數(shù);或者, 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng)時(shí),則利用LibSystem庫(kù)訪問(wèn)核心系統(tǒng)層提供的接口函 數(shù); 獲取鏈接庫(kù)加載指令,加載鏈接庫(kù)后,根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫(kù)中與控制硬 件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函數(shù),以供核心系統(tǒng)層的硬件設(shè)備驅(qū)動(dòng)執(zhí)行相應(yīng)的功能 實(shí)現(xiàn)函數(shù)。
4.如權(quán)利要求3所述的方法,其特征在于,JNI層保存有功能實(shí)現(xiàn)函數(shù)實(shí)例化后的地 址。
5.如權(quán)利要求3所述的方法,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓系 統(tǒng)還包括硬件抽象層,所述安卓系統(tǒng)的硬件抽象層運(yùn)行于內(nèi)核驅(qū)動(dòng)層之上,用于在內(nèi)核驅(qū) 動(dòng)層的支持下,為安卓系統(tǒng)的應(yīng)用框架層和JNI層提供對(duì)硬件設(shè)備控制的接口實(shí)現(xiàn);或者 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng),所述IOS系統(tǒng)還包括核心服務(wù)層。
6.如權(quán)利要求1-5任一項(xiàng)所述的方法,其特征在于,所述硬件設(shè)備為閃光燈、攝像頭、 傳感器或麥克風(fēng)。
7. 一種操作系統(tǒng)中直接控制硬件設(shè)備的模塊,其特征在于,包括: 加載單元,用于獲取鏈接庫(kù)加載指令,并加載鏈接庫(kù),所述鏈接庫(kù)中包括用于控制硬件 設(shè)備動(dòng)作的功能實(shí)現(xiàn)函數(shù); 檢測(cè)單元,用于獲取控制硬件設(shè)備動(dòng)作的指令; 調(diào)用單元,用于調(diào)用所述鏈接庫(kù)中與所述控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng)的功能實(shí)現(xiàn)函 數(shù); 執(zhí)行單元,用于執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作。
8.如權(quán)利要求7所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓系 統(tǒng)的內(nèi)核驅(qū)動(dòng)層中設(shè)置有所述硬件設(shè)備的驅(qū)動(dòng),所述執(zhí)行單元用于控制硬件設(shè)備的驅(qū)動(dòng)執(zhí) 行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè)備執(zhí)行相應(yīng)的動(dòng)作;或者 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng)時(shí),所述IOS系統(tǒng)的核心系統(tǒng)層中設(shè)置有所述硬件設(shè)備的 驅(qū)動(dòng),所述執(zhí)行單元用于控制硬件設(shè)備的驅(qū)動(dòng)執(zhí)行被調(diào)用的功能實(shí)現(xiàn)函數(shù),以控制硬件設(shè) 備執(zhí)行相應(yīng)的動(dòng)作。
9.如權(quán)利要求8所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓系 統(tǒng)的架構(gòu)還包括JNI層,所述JNI層定義有相應(yīng)的JNI接口函數(shù); 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫(kù)中與控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng) 的功能實(shí)現(xiàn)函數(shù),以供內(nèi)核驅(qū)動(dòng)層的硬件設(shè)備驅(qū)動(dòng)執(zhí)行相應(yīng)的功能實(shí)現(xiàn)函數(shù);或者 所述操作系統(tǒng)為IOS系統(tǒng)時(shí),則利用LibSystem庫(kù)訪問(wèn)核心系統(tǒng)層提供的接口函數(shù); 調(diào)用單元用于根據(jù)所述接口函數(shù)調(diào)用所述鏈接庫(kù)中與控制硬件設(shè)備動(dòng)作的指令對(duì)應(yīng) 的功能實(shí)現(xiàn)函數(shù),以供內(nèi)核驅(qū)動(dòng)層的硬件設(shè)備驅(qū)動(dòng)執(zhí)行相應(yīng)的功能實(shí)現(xiàn)函數(shù)。
10.如權(quán)利要求9所述的模塊,其特征在于,所述JNI層保存有功能實(shí)現(xiàn)函數(shù)實(shí)例化后 的地址。
11.如權(quán)利要求9所述的模塊,其特征在于,當(dāng)所述操作系統(tǒng)為安卓系統(tǒng)時(shí),所述安卓 系統(tǒng)的架構(gòu)還包括硬件抽象層,所述硬件抽象層運(yùn)行于內(nèi)核驅(qū)動(dòng)層之上,用于在內(nèi)核驅(qū)動(dòng) 層的支持下,為安卓系統(tǒng)的應(yīng)用框架層和JNI層提供對(duì)硬件設(shè)備控制的接口實(shí)現(xiàn);或者 當(dāng)所述操作系統(tǒng)為IOS系統(tǒng)時(shí),所述IOS系統(tǒng)還包括核心服務(wù)層。
12.如權(quán)利要求7-11任一項(xiàng)所述的模塊,其特征在于,所述硬件設(shè)備為閃光燈、攝像 頭、傳感器或麥克風(fēng)。
【文檔編號(hào)】G06F9/44GK104216709SQ201410415227
【公開(kāi)日】2014年12月17日 申請(qǐng)日期:2014年8月20日 優(yōu)先權(quán)日:2014年8月20日
【發(fā)明者】不公告發(fā)明人 申請(qǐng)人:深圳光啟創(chuàng)新技術(shù)有限公司