一種基于Android系統(tǒng)的設(shè)備加載方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種基于Android系統(tǒng)的設(shè)備加載方法及裝置。該方法包括:加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識;通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在,則加載相匹配的HAL動態(tài)鏈接庫;若不存在,則加載默認(rèn)的HAL動態(tài)鏈接庫。通過上述方式,本發(fā)明能夠?qū)崿F(xiàn)在Android系統(tǒng)下智能地去識別不同型號的同類設(shè)備,動態(tài)加載其相應(yīng)的設(shè)備驅(qū)動和HAL動態(tài)鏈接庫,使其能正常被使用。
【專利說明】—種基于Android系統(tǒng)的設(shè)備加載方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及嵌入式操作系統(tǒng)領(lǐng)域,特別是涉及一種基于Android系統(tǒng)的設(shè)備加載方法及裝置。
【背景技術(shù)】
[0002]基于Android (安卓)系統(tǒng)的設(shè)備加載方法,是指Android系統(tǒng)上電后,需要正確加載設(shè)備,也即正確加載設(shè)備的驅(qū)動和HAL (Hardware Abstraction Layer,硬件抽象層)動態(tài)鏈接庫后,才能使得電子產(chǎn)品的各類設(shè)備正常使用。其中,電子產(chǎn)品例如是平板電腦、手機等等,設(shè)備例如是顯示屏、揚聲器、攝像頭或傳感器等等。
[0003]現(xiàn)有的基于Android系統(tǒng)的設(shè)備加載方法,同一類設(shè)備只能加載一個驅(qū)動以及對應(yīng)的HAL動態(tài)鏈接庫,也就是說,Android系統(tǒng)只支持一種同類設(shè)備。以傳感器為例來說,Android系統(tǒng)只能加載傳感器中某一型號例如傳感器A的驅(qū)動以及對應(yīng)的HAL動態(tài)鏈接庫,如果傳感器A的供應(yīng)出了問題而導(dǎo)致需要使用其他型號的傳感器例如傳感器B時,則需要將Android系統(tǒng)中傳感器A的驅(qū)動和對應(yīng)的HAL動態(tài)鏈接庫更改為傳感器B的驅(qū)動和對應(yīng)的HAL動態(tài)鏈接庫。Android系統(tǒng)重新上電,正確加載傳感器B的驅(qū)動和HAL動態(tài)鏈接庫后,傳感器B才能正常使用。
[0004]因此,如何實現(xiàn)在Android系統(tǒng)下智能地去識別不同型號的同類設(shè)備,動態(tài)加載其相應(yīng)的設(shè)備驅(qū)動和HAL動態(tài)鏈接庫,使其能被正常使用是亟待解決的一個問題。
【發(fā)明內(nèi)容】
[0005]本發(fā)明主要解決的技術(shù)問題是提供一種基于Android系統(tǒng)的設(shè)備加載方法及裝置,能夠?qū)崿F(xiàn)在Android系統(tǒng)下智能地去識別不同型號的同類設(shè)備,動態(tài)加載其相應(yīng)的設(shè)備驅(qū)動和HAL動態(tài)鏈接庫,使其能被正常使用。
[0006]為解決上述技術(shù)問題,本發(fā)明米用的一個技術(shù)方案是:提供一種基于Android系統(tǒng)的設(shè)備加載方法,該方法包括以下步驟:加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識,其中待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分待加載設(shè)備;通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在相匹配的HAL動態(tài)鏈接庫,則力口載相匹配的HAL動態(tài)鏈接庫;若不存在相匹配的HAL動態(tài)鏈接庫,則加載默認(rèn)的HAL動態(tài)鏈接庫。
[0007]其中,加載待加載設(shè)備的設(shè)備驅(qū)動的步驟具體包括:從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載待加載設(shè)備的設(shè)備驅(qū)動。
[0008]其中,加載待加載設(shè)備的設(shè)備驅(qū)動的步驟具體包括:根據(jù)與待加載設(shè)備的通信反饋結(jié)果從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載待加載設(shè)備的設(shè)備驅(qū)動。
[0009]其中,根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識的步驟具體包括:讀取映射信息,獲取文件句柄;根據(jù)文件句柄,通過函數(shù)接口獲取設(shè)備標(biāo)識。
[0010]其中,通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫的步驟具體包括:確定索引信息中是否存在待加載設(shè)備的設(shè)備標(biāo)識;若存在設(shè)備標(biāo)識,且存在相匹配的HAL動態(tài)鏈接庫,則表示存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫;若不存在設(shè)備標(biāo)識,或者,雖存在設(shè)備標(biāo)識、但不存在相匹配的HAL動態(tài)鏈接庫,則表示不存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫。
[0011]其中,索引信息為索引列表;加載相匹配的HAL動態(tài)鏈接庫的步驟具體包括:根據(jù)設(shè)備標(biāo)識從索引列表獲取相匹配的HAL動態(tài)鏈接庫的文件名稱;根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫。
[0012]其中,索引列表包括第一索引列表和第二索引列表,第一索引列表用于判斷是否存在設(shè)備標(biāo)識,第二索引列表用于實現(xiàn)HAL動態(tài)鏈接庫的文件名稱與設(shè)備標(biāo)識的關(guān)聯(lián)。
[0013]其中,加載相匹配的HAL動態(tài)鏈接庫的步驟具體包括:根據(jù)設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取相匹配的HAL動態(tài)鏈接庫的文件名稱;根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫。
[0014]其中,預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,模塊名稱為同類設(shè)備所共用的系統(tǒng)標(biāo)識。
[0015]為解決上述技術(shù)問題,本發(fā)明采用的另一個技術(shù)方案是:提供一種基于Android系統(tǒng)的設(shè)備加載裝置,該裝置包括:設(shè)備驅(qū)動加載模塊,用于加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;設(shè)備標(biāo)識獲取模塊,從設(shè)備驅(qū)動加載模塊獲取映射信息,根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識,其中待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分所述待加載設(shè)備;判斷模塊,從所述設(shè)備標(biāo)識獲取模塊獲取待加載設(shè)備的設(shè)備標(biāo)識,通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;HAL動態(tài)鏈接庫加載模塊,當(dāng)判斷模塊判斷存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫時,加載相匹配的HAL動態(tài)鏈接庫,當(dāng)判斷模塊判斷不存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫時,加載默認(rèn)的HAL動態(tài)鏈接庫。
[0016]其中,設(shè)備驅(qū)動加載模塊從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載待加載設(shè)備的設(shè)備驅(qū)動。
[0017]其中,設(shè)備標(biāo)識獲取模塊包括:文件句柄獲取單元,用于讀取映射信息,獲取文件句柄;設(shè)備標(biāo)識獲取單元,從文件句柄獲取單元獲取文件句柄,根據(jù)文件句柄,通過函數(shù)接口獲取設(shè)備標(biāo)識。
[0018]其中,HAL動態(tài)鏈接庫加載模塊包括:HAL動態(tài)鏈接庫文件名稱獲取單元,根據(jù)設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取相匹配的HAL動態(tài)鏈接庫的文件名稱;HAL動態(tài)鏈接庫加載單元,從HAL動態(tài)鏈接庫名稱獲取單元獲取文件名稱,根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫。
[0019]其中,預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,模塊名稱為同類設(shè)備所共用的系統(tǒng)標(biāo)識。
[0020]本發(fā)明的有益效果是:區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明的基于Android系統(tǒng)的設(shè)備加載方法及裝置通過加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識;通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在,則加載相匹配的HAL動態(tài)鏈接庫;若不存在,則加載默認(rèn)的HAL動態(tài)鏈接庫。通過上述方式,本發(fā)明能夠?qū)崿F(xiàn)在Android系統(tǒng)下智能地去識別不同型號的同類設(shè)備,動態(tài)加載其相應(yīng)的設(shè)備驅(qū)動和HAL動態(tài)鏈接庫,使其能被正常使用。
[0021]進一步,索引信息可以采用索引列表的形式被植入,當(dāng)本基于Android系統(tǒng)平臺的設(shè)備所支持的不同型號的同類設(shè)備發(fā)生變化(例如增加新的不同型號的同類設(shè)備)時,直接修改索引列表即可進行后續(xù)擴展維護,更為方便簡單。
【專利附圖】
【附圖說明】
[0022]圖1是本發(fā)明第一實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖;
[0023]圖2是本發(fā)明第二實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖;
[0024]圖3是本發(fā)明第三實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖;
[0025]圖4是本發(fā)明實施例的基于Android系統(tǒng)的設(shè)備加載裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0026]下面結(jié)合附圖和實施例對本發(fā)明進行詳細(xì)說明。
[0027]如本領(lǐng)域技術(shù)人員所知的,Android系統(tǒng)包括內(nèi)核層、HAL層、框架層和應(yīng)用層。其中,內(nèi)核層是基于Linux的設(shè)備驅(qū)動層,用于加載設(shè)備的驅(qū)動。HAL層是Goolge (谷歌)應(yīng)某些廠商不希望公開源碼所添加的一個適配層,能以封閉源碼的方式提供設(shè)備驅(qū)動,目的就是提供框架層與內(nèi)核層的一個接口??蚣軐佑糜谕ㄟ^HAL層調(diào)用內(nèi)核層的驅(qū)動,進一步向應(yīng)用層提供API (Application Programming Interface,應(yīng)用程序編程接口)以實現(xiàn)對設(shè)備的操作。
[0028]圖1是本發(fā)明第一實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖。需注意的是,若有實質(zhì)上相同的結(jié)果,本發(fā)明的方法并不以圖1所示的流程順序為限。如圖1所示,該方法包括步驟:
[0029]步驟SlOl:加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;
[0030]在本實施例中,本基于Android系統(tǒng)平臺的設(shè)備支持至少兩種不同型號的同類設(shè)備。
[0031]系統(tǒng)上電后,內(nèi)核層加載待加載設(shè)備的設(shè)備驅(qū)動,當(dāng)設(shè)備驅(qū)動被成功加載后,內(nèi)核層進一步將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息。具體來說,當(dāng)設(shè)備驅(qū)動被成功加載后,待加載設(shè)備的設(shè)備信息將映射至預(yù)定節(jié)點下。
[0032]步驟S102:根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識,其中待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分待加載設(shè)備;
[0033]在本實施例中,設(shè)備標(biāo)識可以為設(shè)備名稱,也可以為設(shè)備ID (Identity,身份標(biāo)識),或者能區(qū)分設(shè)備的其它唯一的相關(guān)標(biāo)識,在此不做限制。
[0034]步驟S103:通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在,則執(zhí)行步驟S104,若不存在,則執(zhí)行步驟S105。
[0035]在 本實施例中,基于Android系統(tǒng)平臺的設(shè)備同時存在同類設(shè)備的多個HAL動態(tài)鏈接庫。具體來說,Android系統(tǒng)平臺同時存在A型號、B型號和C型號的加速度傳感器的HAL動態(tài)鏈接庫,其相互獨立存在,互不干擾。
[0036]步驟S104:加載相匹配的HAL動態(tài)鏈接庫;
[0037]在本實施例中,當(dāng)Android系統(tǒng)平臺存在與待加載設(shè)備相匹配的HAL動態(tài)鏈接庫時,通過函數(shù)接口(例如load函數(shù))加載該HAL動態(tài)鏈接庫。
[0038]步驟S105:加載默認(rèn)的HAL動態(tài)鏈接庫。
[0039]在本實施例中,當(dāng)Android系統(tǒng)平臺不存在與待加載設(shè)備相匹配的HAL動態(tài)鏈接庫時,通過函數(shù)接口(例如load函數(shù))加載系統(tǒng)默認(rèn)的HAL動態(tài)鏈接庫,以保證系統(tǒng)的正常運行。
[0040]圖2是本發(fā)明第二實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖。需注意的是,若有實質(zhì)上相同的結(jié)果,本發(fā)明的方法并不以圖2所示的流程順序為限。如圖2所示,該方法包括步驟:
[0041]步驟S201:從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息進行映射,生成映射信息;
[0042]系統(tǒng)上電后,內(nèi)核層從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇與待加載設(shè)備相對應(yīng)的設(shè)備驅(qū)動并加載該設(shè)備驅(qū)動。其中,至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動相互獨立存在,并且互不干擾。具體來說,假設(shè)Android系統(tǒng)平臺同時存在A型號、B型號和C型號三種不同型號的加速度傳感器的驅(qū)動,此時若假設(shè)待加載設(shè)備為A型號,則內(nèi)核層加載A型號對應(yīng)的驅(qū)動,此時若假設(shè)待加載設(shè)備為B型號,則內(nèi)核層加載B型號對應(yīng)的驅(qū)動,此時若假設(shè)待加載設(shè)備為A型號和B型號同時存在,則內(nèi)核層同時加載A型號和B型號對應(yīng)的驅(qū)動。
[0043]進一步,內(nèi)核層根據(jù)與待加載設(shè)備的通信反饋結(jié)果從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇與待加載設(shè)備相對應(yīng)的設(shè)備驅(qū)動。具體來說,當(dāng)Android系統(tǒng)平臺存在某一個待加載設(shè)備時,首先對該待加載設(shè)備進行通信嘗試,若通信反饋結(jié)果指示有反饋,則加載該待加載設(shè)備對應(yīng)的驅(qū)動,若通信反饋結(jié)果指示無反饋,則不加載驅(qū)動。當(dāng)Android系統(tǒng)平臺存在多個待加載設(shè)備時,首先對第一個待加載設(shè)備進行通信嘗試,若通信反饋結(jié)果指示有反饋,則加載第一個待加載設(shè)備對應(yīng)的驅(qū)動,若通信反饋結(jié)果指示無反饋,則不加載驅(qū)動;繼續(xù)對第二個待加載設(shè)備進行通信嘗試……依次嘗試,直至完成對所有待加載設(shè)備的通信嘗試。其中,若所有待加載設(shè)備的通信反饋結(jié)果均指示有反饋,則加載所有待加載設(shè)備對應(yīng)的驅(qū)動;若待加載設(shè)備的通信反饋結(jié)果均指示無反饋,則不加載任何驅(qū)動;若部分待加載設(shè)備的通信反饋結(jié)果指示有反饋,則僅加載部分待加載設(shè)備對應(yīng)的驅(qū)動。
[0044]內(nèi)核層在正確加載待加載設(shè)備的驅(qū)動后,待加載設(shè)備的設(shè)備信息將映射至預(yù)定節(jié)點下,該預(yù)定節(jié)點的路徑可以根據(jù)實際情況任意設(shè)定,例如,設(shè)定預(yù)定節(jié)點的路徑為/dev/input。具體來說,預(yù)定節(jié)點為設(shè)備節(jié)點,設(shè)備節(jié)點可以理解為設(shè)備文件。其中,設(shè)備文件包括待加載設(shè)備的設(shè)備信息,具體包括設(shè)備類型(例如塊設(shè)備或字符設(shè)備)、設(shè)備號(例如主設(shè)備號和次設(shè)備號)以及設(shè)備訪問控制屬性等。[0045]步驟S202:根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識,其中待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分待加載設(shè)備;
[0046]在本實施例中,內(nèi)核層在正確加載待加載設(shè)備的驅(qū)動后,HAL層通過函數(shù)接口打開預(yù)定節(jié)點下的設(shè)備文件,獲取設(shè)備標(biāo)識所在文件的文件句柄,然后根據(jù)文件句柄,再通過函數(shù)接口獲取待加載設(shè)備的設(shè)備標(biāo)識。具體來說,設(shè)備標(biāo)識所在文件的路徑與預(yù)定節(jié)點下的設(shè)備文件的路徑可以不相同,例如,設(shè)定設(shè)備標(biāo)識所在文件的路徑為/sys/class/gsensor,HAL層通過函數(shù)接口(例如open函數(shù))打開預(yù)定節(jié)點下的設(shè)備文件,根據(jù)函數(shù)接口(例如open函數(shù))獲取得到的設(shè)備標(biāo)識所在文件的文件句柄,通過函數(shù)接口(例如ioctl函數(shù))獲取待加載設(shè)備的設(shè)備標(biāo)識,從而確認(rèn)待加載設(shè)備是A型號、B型號還是C型號的加速度傳感器。
[0047]步驟S203:通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在,則執(zhí)行步驟S204,若不存在,則執(zhí)行步驟S206。
[0048]在本實施例中,通過確認(rèn)索引信息中是否存在待加載設(shè)備的設(shè)備標(biāo)識來判斷是否存在相匹配的HAL動態(tài)鏈接庫,若存在待加載設(shè)備的設(shè)備標(biāo)識,且存在相匹配的HAL動態(tài)鏈接庫,則表示存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,執(zhí)行步驟S204,若不存在待加載設(shè)備的設(shè)備標(biāo)識,或者,雖存在待加載設(shè)備的設(shè)備標(biāo)識但不存在相匹配的HAL動態(tài)鏈接庫,則表示不存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,執(zhí)行步驟S206。
[0049]在本實施例中,索引信息包括Android系統(tǒng)平臺支持的至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識。具體來說,索引信息包括A型號、B型號和C型號的加速度傳感器的設(shè)備標(biāo)識,其分別為device_a, device_b和device_c。需要理解的是,設(shè)備標(biāo)識可以為任意字符,此處的device_a, device_b和device_c并非為本發(fā)明的限制。若步驟S202獲取得到的待加載設(shè)備的設(shè)備標(biāo)識為A型號的設(shè)備標(biāo)識device_a、B型號的設(shè)備標(biāo)識device_b或者C型號的設(shè)備標(biāo)識device_c,且Android系統(tǒng)平臺對應(yīng)存在A型號、B型號或C型號的HAL動態(tài)鏈接庫,則判定Android系統(tǒng)平臺存在與待加載設(shè)備相匹配的HAL動態(tài)鏈接庫,否則判定Android系統(tǒng)平臺不存在與待加載設(shè)備相匹配的HAL動態(tài)鏈接庫。
[0050]步驟S204:根據(jù)設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取相匹配的HAL動態(tài)鏈接庫的文件名稱;
[0051]在本實施例中,HAL動態(tài)鏈接庫的文件名稱的預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,其中模塊名稱為同類設(shè)備所共用的系統(tǒng)標(biāo)識。具體來說,假設(shè)待加載設(shè)備為A型號的加速度傳感器,則其對應(yīng)的HAL動態(tài)鏈接庫的文件名稱為:gsensor.device_a.so,其中g(shù)sensor為加速度傳感器的系統(tǒng)標(biāo)識,device_a為A型號的加速度傳感器的設(shè)備標(biāo)識。需要理解的是,系統(tǒng)標(biāo)識可以為任意字符,此處的gsensor并非為本發(fā)明的限制。
[0052]步驟S205:根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫。
[0053]在本實施例中,在得到HAL動態(tài)鏈接庫的文件名稱后,將根據(jù)HAL動態(tài)鏈接庫的預(yù)定存儲路徑去找該HAL動態(tài)鏈接庫,如預(yù)定存儲路徑為:/SyStem/lib/hW/模塊名稱.設(shè)備標(biāo)識.so或者/system/lib/vendor/模塊名稱.設(shè)備標(biāo)識.so。HAL層根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫,具體來說,HAL層通過函數(shù)接口(例如access函數(shù))判斷上述路徑下的HAL動態(tài)鏈接庫是否存在,若存在,通過函數(shù)接口(例如load函數(shù))力口載待加載設(shè)備的HAL動態(tài)鏈接庫,從而實現(xiàn)Android系統(tǒng)平臺同時支持至少兩個不同型號的同類設(shè)備的目的。
[0054]步驟S206:加載默認(rèn)的HAL動態(tài)鏈接庫。
[0055]在本實施例中,默認(rèn)的HAL動態(tài)鏈接庫的文件名稱為模塊名稱.default, so,如其所在的路徑為:/system/lib/hw/ 模塊名稱.default, so 或者 /system/lib/vendor/ 模塊名稱.default, so。當(dāng)Android系統(tǒng)平臺不存在待加載設(shè)備的HAL動態(tài)鏈接庫時,通過函數(shù)接口(例如load函數(shù))加載默認(rèn)的HAL動態(tài)鏈接庫。
[0056]圖3是本發(fā)明第三實施例的基于Android系統(tǒng)的設(shè)備加載方法的流程圖。如圖3所示,圖3與圖2中第二實施例的主要區(qū)別在于:
[0057]步驟S301:根據(jù)設(shè)備標(biāo)識從索引列表獲取相匹配的HAL動態(tài)鏈接庫的文件名稱;
[0058]具體而言,在圖2實施例的基礎(chǔ)上,HAL動態(tài)鏈接庫的文件名稱根據(jù)設(shè)備標(biāo)識從索引信息獲取得到。其中優(yōu)選地,索引信息為索引列表,其中,索引列表包括第一索引列表和第二索引列表,第一索引列表用于判斷是否存在設(shè)備標(biāo)識,第二索引列表用于實現(xiàn)HAL動態(tài)鏈接庫的文件名稱與設(shè)備標(biāo)識的關(guān)聯(lián)。
[0059]在本實施例中,HAL動態(tài)鏈接庫的文件名稱的命名規(guī)則為:模塊名稱.任意字符.so,具體來說,A型號、B型號和C型號的加速度傳感器對應(yīng)的HAL動態(tài)鏈接庫的文件名稱分別為:gsensor.1.so、gsensor.2.so 和 gsensor.3.so。需要理解的是,此處的 gsensor、1、2和3并非為本發(fā)明的限制,僅用于舉例。因HAL動態(tài)鏈接庫的文件中存在有其驅(qū)動的相關(guān)設(shè)備的設(shè)備標(biāo)識,通過訪問HAL動態(tài)鏈接庫,便可得到該設(shè)備標(biāo)識,進一步建立HAL動態(tài)鏈接庫的文件名稱和該設(shè)備標(biāo)識關(guān)聯(lián)的第二索引列表。具體來說,在第二索引列表中,HAL動態(tài)鏈接庫的文件名稱gsensor.1.so與設(shè)備標(biāo)識device_a相對應(yīng),也即與A型號的加速度傳感器相對應(yīng);HAL動態(tài)鏈接庫的文件名稱gsensor.2.so與設(shè)備標(biāo)識device_b相對應(yīng),也即與B型號的加速度傳感器相對應(yīng);HAL動態(tài)鏈接庫gsensor.3.so的文件名稱與設(shè)備標(biāo)識device_c相對應(yīng),也即與C型號的加速度傳感器相對應(yīng)。
[0060]同時,第一索引列表中包括A型號、B型號和C型號的加速度傳感器的設(shè)備標(biāo)識,分別為 device_a, device_b 和 device_c。
[0061]舉例來說,當(dāng)Android系統(tǒng)獲取得到的待加載設(shè)備為A型號的加速度傳感器,判斷第一索引列表中存在A型號的加速度傳感器的設(shè)備標(biāo)識,通過第二索引列表便可獲取的到其相匹配的HAL動態(tài)鏈接庫的文件名稱為gsensor.1.so。
[0062]進一步,在得到HAL動態(tài)鏈接庫的文件名稱后,將根據(jù)HAL動態(tài)鏈接庫的預(yù)定存儲路徑去找該HAL動態(tài)鏈接庫,如預(yù)定存儲路徑為:/SyStem/lib/hW/模塊名稱.任意字符.so或者/system/1 ib/vendor/模塊名稱.任意字符.so。具體來說,以A型號的加速度傳感器為例,其HAL動態(tài)鏈接庫的文件名稱為gsensor.1.so,將根據(jù)HAL動態(tài)鏈接庫的預(yù)定存儲路徑如/system/lib/hw/gsensor.1.so 或者/system/lib/vendor/gsensor.1.so 去找該文件名稱為gsensor.1.so的HAL動態(tài)鏈接庫。
[0063]可理解地,也可將預(yù)定存儲路徑直接在索引列表中體現(xiàn)出來。
[0064]可理解地,也可只建立一個索引列表,該索引列表中只需包含上述第一索引列表和第二索引列表所含的全部信息即可。當(dāng)然也可理解地,還可以建立多個索引列表,通過多個索引列表之間的關(guān)聯(lián)來實現(xiàn)。
[0065]圖3所示流程圖的其他步驟均已揭露于圖2中,為簡潔起見,此處不再贅述。
[0066]圖4是本發(fā)明實施例的基于Android系統(tǒng)的設(shè)備加載裝置的結(jié)構(gòu)示意圖。如圖4所示,該裝置包括:設(shè)備驅(qū)動加載模塊10、設(shè)備標(biāo)識獲取模塊20、判斷模塊30和HAL動態(tài)鏈接庫加載模塊40。
[0067]設(shè)備驅(qū)動加載模塊10用于加載待加載設(shè)備的設(shè)備驅(qū)動,進而待加載設(shè)備的設(shè)備信息進行映射,生成映射信息。具體來說,設(shè)備驅(qū)動加載模塊10從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載待加載設(shè)備的設(shè)備驅(qū)動。
[0068]設(shè)備標(biāo)識獲取模塊20與設(shè)備驅(qū)動加載模塊10相連,從設(shè)備驅(qū)動加載模塊10獲取映射信息,根據(jù)映射信息獲取待加載設(shè)備的設(shè)備標(biāo)識,其中待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分待加載設(shè)備。具體來說,設(shè)備標(biāo)識獲取模塊20包括文件句柄獲取單元201和設(shè)備標(biāo)識獲取單元202。文件句柄獲取單元201與設(shè)備驅(qū)動加載模塊10相連,用于讀取映射信息,獲取文件句柄。設(shè)備標(biāo)識獲取單元202與文件句柄獲取單元201相連,從文件句柄獲取單元201獲取文件句柄,根據(jù)文件句柄,通過函數(shù)接口獲取設(shè)備標(biāo)識。
[0069]判斷模塊30與設(shè)備標(biāo)識獲取模塊20相連。具體來說,判斷模塊30與設(shè)備標(biāo)識獲取單元202相連,從設(shè)備標(biāo)識獲取單元202獲取待加載設(shè)備的設(shè)備標(biāo)識,通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系。
[0070]HAL動態(tài)鏈接庫加載模塊40與判斷模塊30相連,當(dāng)判斷模塊30判斷存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫時,加載相匹配的HAL動態(tài)鏈接庫,當(dāng)判斷模塊30判斷不存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫時,加載默認(rèn)的HAL動態(tài)鏈接庫。具體來說,HAL動態(tài)鏈接庫加載模塊40包括HAL動態(tài)鏈接庫文件名稱獲取單元401和HAL動態(tài)鏈接庫加載單元402。HAL動態(tài)鏈接庫文件名稱獲取單元401與判斷單元30相連,根據(jù)設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取相匹配的HAL動態(tài)鏈接庫的文件名稱。HAL動態(tài)鏈接庫加載單元402與HAL動態(tài)鏈接庫文件名稱獲取單元401相連,從HAL動態(tài)鏈接庫文件名稱獲取單元401獲取文件名稱,根據(jù)文件名稱從預(yù)定存儲路徑加載相匹配的HAL動態(tài)鏈接庫。
[0071]其中,預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,模塊名稱為同類設(shè)備所共用的系統(tǒng)標(biāo)識。
[0072]本發(fā)明的有益效果是:區(qū)別于現(xiàn)有技術(shù)的情況,本發(fā)明的基于Android系統(tǒng)的設(shè)備加載方法及裝置通過加載待加載設(shè)備的設(shè)備驅(qū)動,進而將待加載設(shè)備的設(shè)備信息映射至預(yù)定節(jié)點下;根據(jù)映射至預(yù)定節(jié)點下的設(shè)備信息獲取待加載設(shè)備的設(shè)備標(biāo)識;通過索引信息判斷是否存在與待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系;若存在,則力口載相匹配的HAL動態(tài)鏈接庫;若不存在,則加載默認(rèn)的HAL動態(tài)鏈接庫。通過上述方式,本發(fā)明能夠?qū)崿F(xiàn)在Android系統(tǒng)下智能地去識別不同型號的同類設(shè)備,動態(tài)加載其相應(yīng)的設(shè)備驅(qū)動和HAL動態(tài)鏈接庫,使其能正常被使用。進一步,索引信息可以采用索引列表的形式被植入,當(dāng)本基于Android系統(tǒng)平臺的設(shè)備所支持的不同型號的同類設(shè)備發(fā)生變化(例如增加新的不同型號的同類設(shè)備)時,直接修改索引列表即可進行后續(xù)擴展維護,更為方便簡單。
[0073]以上所述僅為本發(fā)明的實施方式,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護范圍內(nèi)。
【權(quán)利要求】
1.一種基于Android系統(tǒng)的設(shè)備加載方法,其特征在于,所述方法包括以下步驟: 加載待加載設(shè)備的設(shè)備驅(qū)動,進而將所述待加載設(shè)備的設(shè)備信息進行映射,生成映射信息; 根據(jù)所述映射信息獲取所述待加載設(shè)備的設(shè)備標(biāo)識,其中所述待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分所述待加載設(shè)備; 通過索引信息判斷是否存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中所述索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系; 若存在所述相匹配的HAL動態(tài)鏈接庫,則加載所述相匹配的HAL動態(tài)鏈接庫; 若不存在所述相匹配的HAL動態(tài)鏈接庫,則加載默認(rèn)的HAL動態(tài)鏈接庫。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述加載待加載設(shè)備的設(shè)備驅(qū)動的步驟具體包括: 從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載所述待加載設(shè)備的設(shè)備驅(qū)動。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述加載待加載設(shè)備的設(shè)備驅(qū)動的步驟具體包括: 根據(jù)與所述待加載設(shè)備的通信反饋結(jié)果從所述至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載所述待加載設(shè)備的設(shè)備驅(qū)動。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述映射信息獲取所述待加載設(shè)備的設(shè)備標(biāo)識的步驟具體包括: 讀取所述映射信息,獲取文件句柄; 根據(jù)所述文件句柄,通過函數(shù)接口獲取所述設(shè)備標(biāo)識。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述通過索引信息判斷是否存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫的步驟具體包括: 確定所述索引信息中是否存在所述待加載設(shè)備的所述設(shè)備標(biāo)識; 若存在所述設(shè)備標(biāo)識,且存在所述相匹配的HAL動態(tài)鏈接庫,則表示存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫; 若不存在所述設(shè)備標(biāo)識,或者,雖存在所述設(shè)備標(biāo)識、但不存在所述相匹配的HAL動態(tài)鏈接庫,則表示不存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述索引信息為索引列表; 所述加載所述相匹配的HAL動態(tài)鏈接庫的步驟具體包括: 根據(jù)所述設(shè)備標(biāo)識從所述索引列表獲取所述相匹配的HAL動態(tài)鏈接庫的文件名稱; 根據(jù)所述文件名稱從預(yù)定存儲路徑加載所述相匹配的HAL動態(tài)鏈接庫。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述索引列表包括第一索引列表和第二索引列表,所述第一索引列表用于判斷是否存在所述設(shè)備標(biāo)識,所述第二索引列表用于實現(xiàn)所述HAL動態(tài)鏈接庫的文件名稱與所述設(shè)備標(biāo)識的關(guān)聯(lián)。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述加載所述相匹配的HAL動態(tài)鏈接庫的步驟具體包括: 根據(jù)所述設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取所述相匹配的HAL動態(tài)鏈接庫的文件名稱; 根據(jù)所述文件名稱從預(yù)定存儲路徑加載所述相匹配的HAL動態(tài)鏈接庫。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,所述模塊名稱為所述同類設(shè)備所共用的系統(tǒng)標(biāo)識。
10.一種基于Android系統(tǒng)的設(shè)備加載裝置,其特征在于,所述裝置包括: 設(shè)備驅(qū)動加載模塊,用于加載待加載設(shè)備的設(shè)備驅(qū)動,進而將所述待加載設(shè)備的設(shè)備信息進行映射,生成映射信息; 設(shè)備標(biāo)識獲取模塊,從所述設(shè)備驅(qū)動加載模塊獲取所述映射信息,根據(jù)所述映射信息獲取所述待加載設(shè)備的設(shè)備標(biāo)識,其中所述待加載設(shè)備的設(shè)備標(biāo)識用于在同類設(shè)備中區(qū)分所述待加載設(shè)備; 判斷模塊,從所述設(shè)備標(biāo)識獲取模塊獲取所述待加載設(shè)備的所述設(shè)備標(biāo)識,通過索引信息判斷是否存在與所述待加載設(shè)備的所述設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫,其中所述索引信息用于表示至少兩種不同型號的同類設(shè)備的設(shè)備標(biāo)識與HAL動態(tài)鏈接庫的對應(yīng)關(guān)系; HAL動態(tài)鏈接庫加載模塊,當(dāng)所述判斷模塊判斷存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接 庫時,加載所述相匹配的HAL動態(tài)鏈接庫,當(dāng)所述判斷模塊判斷不存在與所述待加載設(shè)備的設(shè)備標(biāo)識相匹配的HAL動態(tài)鏈接庫時,加載默認(rèn)的HAL動態(tài)鏈接庫。
11.根據(jù)權(quán)利要求10所述的設(shè)備加載裝置,其特征在于,所述設(shè)備驅(qū)動加載模塊從至少兩種不同型號的同類設(shè)備的設(shè)備驅(qū)動中選擇并加載所述待加載設(shè)備的設(shè)備驅(qū)動。
12.根據(jù)權(quán)利要求10所述的設(shè)備加載裝置,其特征在于,所述設(shè)備標(biāo)識獲取模塊包括: 文件句柄獲取單元,用于讀取所述映射信息,獲取文件句柄; 設(shè)備標(biāo)識獲取單元,從所述文件句柄獲取單元獲取所述文件句柄,根據(jù)所述文件句柄,通過函數(shù)接口獲取所述設(shè)備標(biāo)識。
13.根據(jù)權(quán)利要求10所述的設(shè)備加載裝置,其特征在于,所述HAL動態(tài)鏈接庫加載模塊包括: HAL動態(tài)鏈接庫文件名稱獲取單元,根據(jù)所述設(shè)備標(biāo)識及預(yù)定的命名規(guī)則獲取所述相匹配的HAL動態(tài)鏈接庫的文件名稱; HAL動態(tài)鏈接庫加載單元,從所述HAL動態(tài)鏈接庫名稱獲取單元獲取所述文件名稱,根據(jù)所述文件名稱從預(yù)定存儲路徑加載所述相匹配的HAL動態(tài)鏈接庫。
14.根據(jù)權(quán)利要求13所述的設(shè)備加載裝置,其特征在于,所述預(yù)定的命名規(guī)則為:模塊名稱.設(shè)備標(biāo)識.so,所述模塊名稱為所述同類設(shè)備所共用的系統(tǒng)標(biāo)識。
【文檔編號】G06F9/445GK103970559SQ201310046037
【公開日】2014年8月6日 申請日期:2013年2月5日 優(yōu)先權(quán)日:2013年2月5日
【發(fā)明者】凌普影, 黃性華, 姚自強, 朱少杰, 周佳, 杜國楹 申請人:北京壹人壹本信息科技有限公司