資料介紹
Android系統(tǒng)是Google推出的基于Linux內(nèi)核和Java架構(gòu)的操作系統(tǒng),在很短的時間內(nèi)已成為主流的手機操作系統(tǒng),并已逐步擴展應(yīng)用到嵌入式系統(tǒng)、平板電腦和上網(wǎng)本上。它既有Linux系統(tǒng)所具有的硬件平臺可移植性,也因使用Java語言開發(fā)應(yīng)用程序帶來了應(yīng)用軟件只編寫一次即可在所有平臺運行的巨大優(yōu)勢。Android雖然主要基于已有的技術(shù),但在體系結(jié)構(gòu)設(shè)計上有較大的創(chuàng)新。其主要設(shè)計目標(biāo)之一就是要使應(yīng)用程序和系統(tǒng)能獨立于具體的計算機體系結(jié)構(gòu)和硬件平臺,表現(xiàn)在設(shè)備驅(qū)動程序設(shè)計上,對于已有的Linux標(biāo)準(zhǔn)設(shè)備驅(qū)動程序可以直接繼續(xù)使用,只需為其增加應(yīng)用層JNI接口。但對于Linux沒有的非標(biāo)準(zhǔn)設(shè)備則提倡在Linux內(nèi)核中驅(qū)動部分只做很少的接口工作,盡量把驅(qū)動程序的主要處理放在Android的上層架構(gòu)中,即在應(yīng)用層實現(xiàn)。本文對Android系統(tǒng)的底層實現(xiàn)技術(shù)進行深入的研究,包括Android的硬件抽象層和JNI技術(shù)實現(xiàn)等。并以S3C2440開發(fā)板上的LED燈設(shè)計顯示驅(qū)動程序為例,提出了一種非標(biāo)準(zhǔn)硬件設(shè)備驅(qū)動程序的設(shè)計和實現(xiàn)方案。
1 Android系統(tǒng)驅(qū)動程序架構(gòu)
1.1 驅(qū)動程序分層體系結(jié)構(gòu)
Android是基于Linux的,它使用了Linux內(nèi)核,但應(yīng)用程序使用Java語言開發(fā),所以應(yīng)用程序在調(diào)用設(shè)備驅(qū)動時不能像一般的Linux應(yīng)用程序那樣直接使用系統(tǒng)調(diào)用,必須通過Java虛擬機的JNI的本地(Native)方法使用設(shè)備。另一方面,Android要成為一個通用性強的平臺,必須加強它的可移植性。這也是在Android架構(gòu)添加一個硬件抽象層(HAL)的原因,目的是為設(shè)備的調(diào)用提供一個更高級的封裝圖1所示為Android驅(qū)動程序架構(gòu)。

HAL Stub是以Linux共享庫(*.so)的形式存在,在整個驅(qū)動架構(gòu)中,它是設(shè)備驅(qū)動程序運行在用戶空間的一部分,它向上為Dalvik虛擬機提供硬件設(shè)備的抽象接口,向下通過系統(tǒng)調(diào)用與Linux內(nèi)核中的驅(qū)動程序進行數(shù)據(jù)交互。在這個過程中HAL可以對驅(qū)動程序的數(shù)據(jù)進行處理,也就是說在Linux內(nèi)核中的驅(qū)動程序部分只需要提供一個與硬件設(shè)備傳輸數(shù)據(jù)接口的功能,而其余具體的操作可以由HAL完成。
1.2 Android的硬件抽象層
Android的硬件抽象層HAL(Hardware Abstract Layer)在Android的架構(gòu)中是在庫這一層中,通過這一層,硬件廠商可以把部分設(shè)備的驅(qū)動源碼封裝在這一層而不公開源代碼。
對圖1分析,設(shè)計HAL就是為了把應(yīng)用框架和Linux內(nèi)核分離出來,讓Android使用Linux內(nèi)核而又不完全依賴Linux內(nèi)核。當(dāng)然,驅(qū)動程序并不是完全從Linux內(nèi)核中分離出來,一些基本的處理必須由內(nèi)核來完成,HAL只是分擔(dān)了Linux設(shè)備驅(qū)動的部分功能,至于這部分的功能占驅(qū)動程序功能的比例目前并沒有一個標(biāo)準(zhǔn)。
在Android系統(tǒng)發(fā)展過程中,HAL的實現(xiàn)也逐步有了一些變化,舊的HAL是一種模塊化的思想,通過共享庫的形式由Runtime在JNI時以函數(shù)調(diào)用方法調(diào)用,這種做法并沒有通過封裝,即上層應(yīng)用可以直接調(diào)用硬件。另外,這種方法可被多個進程使用,映射到多個進程空間中浪費內(nèi)存資源。
現(xiàn)在HAL提出一種Stub的思想,HAL Stub是一種代理的概念,Stub同樣是以共享庫(*.so)格式存在,但上層應(yīng)用并不像加載動態(tài)庫那樣調(diào)用Stub。這種HAL是由模塊與Stub結(jié)合而成,Runtime通過模塊提供的統(tǒng)一接口獲取并操作Stub。Stub向HAL提供操作的回調(diào)函數(shù),Runtime向HAL取得指定模塊的操作函數(shù)后,調(diào)用這些回調(diào)函數(shù)。這是一種間接函數(shù)調(diào)用的方式,HAL里包含了多個Stub。圖2為HAL Stib原理。

1 Android系統(tǒng)驅(qū)動程序架構(gòu)
1.1 驅(qū)動程序分層體系結(jié)構(gòu)
Android是基于Linux的,它使用了Linux內(nèi)核,但應(yīng)用程序使用Java語言開發(fā),所以應(yīng)用程序在調(diào)用設(shè)備驅(qū)動時不能像一般的Linux應(yīng)用程序那樣直接使用系統(tǒng)調(diào)用,必須通過Java虛擬機的JNI的本地(Native)方法使用設(shè)備。另一方面,Android要成為一個通用性強的平臺,必須加強它的可移植性。這也是在Android架構(gòu)添加一個硬件抽象層(HAL)的原因,目的是為設(shè)備的調(diào)用提供一個更高級的封裝圖1所示為Android驅(qū)動程序架構(gòu)。

HAL Stub是以Linux共享庫(*.so)的形式存在,在整個驅(qū)動架構(gòu)中,它是設(shè)備驅(qū)動程序運行在用戶空間的一部分,它向上為Dalvik虛擬機提供硬件設(shè)備的抽象接口,向下通過系統(tǒng)調(diào)用與Linux內(nèi)核中的驅(qū)動程序進行數(shù)據(jù)交互。在這個過程中HAL可以對驅(qū)動程序的數(shù)據(jù)進行處理,也就是說在Linux內(nèi)核中的驅(qū)動程序部分只需要提供一個與硬件設(shè)備傳輸數(shù)據(jù)接口的功能,而其余具體的操作可以由HAL完成。
1.2 Android的硬件抽象層
Android的硬件抽象層HAL(Hardware Abstract Layer)在Android的架構(gòu)中是在庫這一層中,通過這一層,硬件廠商可以把部分設(shè)備的驅(qū)動源碼封裝在這一層而不公開源代碼。
對圖1分析,設(shè)計HAL就是為了把應(yīng)用框架和Linux內(nèi)核分離出來,讓Android使用Linux內(nèi)核而又不完全依賴Linux內(nèi)核。當(dāng)然,驅(qū)動程序并不是完全從Linux內(nèi)核中分離出來,一些基本的處理必須由內(nèi)核來完成,HAL只是分擔(dān)了Linux設(shè)備驅(qū)動的部分功能,至于這部分的功能占驅(qū)動程序功能的比例目前并沒有一個標(biāo)準(zhǔn)。
在Android系統(tǒng)發(fā)展過程中,HAL的實現(xiàn)也逐步有了一些變化,舊的HAL是一種模塊化的思想,通過共享庫的形式由Runtime在JNI時以函數(shù)調(diào)用方法調(diào)用,這種做法并沒有通過封裝,即上層應(yīng)用可以直接調(diào)用硬件。另外,這種方法可被多個進程使用,映射到多個進程空間中浪費內(nèi)存資源。
現(xiàn)在HAL提出一種Stub的思想,HAL Stub是一種代理的概念,Stub同樣是以共享庫(*.so)格式存在,但上層應(yīng)用并不像加載動態(tài)庫那樣調(diào)用Stub。這種HAL是由模塊與Stub結(jié)合而成,Runtime通過模塊提供的統(tǒng)一接口獲取并操作Stub。Stub向HAL提供操作的回調(diào)函數(shù),Runtime向HAL取得指定模塊的操作函數(shù)后,調(diào)用這些回調(diào)函數(shù)。這是一種間接函數(shù)調(diào)用的方式,HAL里包含了多個Stub。圖2為HAL Stib原理。

下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式Linux的中斷驅(qū)動程序設(shè)計 3次下載
- 嵌入式Linux下的LCD驅(qū)動程序設(shè)計方案解析 0次下載
- 基于安卓的非標(biāo)準(zhǔn)驅(qū)動程序設(shè)計解析 1次下載
- WinCE流驅(qū)動程序設(shè)計概述 7次下載
- 基于WinCE下光電編碼器的驅(qū)動程序設(shè)計 19次下載
- 油紙絕緣變壓器非標(biāo)準(zhǔn)極化譜的仿真研究_蔡金錠 1次下載
- 基于TinyOS的CC1100驅(qū)動程序設(shè)計 13次下載
- 非標(biāo)準(zhǔn)VGA-TV轉(zhuǎn)換器的實現(xiàn) 99次下載
- 基于ARM的BSP程序設(shè)計方案
- VxWorks 可加載的PCI驅(qū)動程序設(shè)計
- 連桿大頭薄壁瓦幾種非標(biāo)準(zhǔn)檢修方法的探討
- 嵌入式通信設(shè)備驅(qū)動程序設(shè)計標(biāo)準(zhǔn)化
- PCI設(shè)備Windows通用驅(qū)動程序設(shè)計
- Linux中基于EP7312的LCD驅(qū)動程序設(shè)計
- PCI設(shè)備驅(qū)動程序設(shè)計(Windows通用) 0次下載
- 怎么編寫Framebuffer驅(qū)動程序 2.4k次閱讀
- 解析PLC梯形圖程序設(shè)計 2.4k次閱讀
- ProfiNet輸入/輸出端的驅(qū)動程序解析 4.1k次閱讀
- 嵌入式Linux內(nèi)核的驅(qū)動程序開發(fā)是怎樣的 1.9k次閱讀
- 什么是非標(biāo)自動化設(shè)備及分類介紹 4.5w次閱讀
- POE供電優(yōu)缺點講解 非標(biāo)準(zhǔn)POE危害是什么? 7.8w次閱讀
- 淺談電腦驅(qū)動程序的工作原理 詳解電腦驅(qū)動程序意義 3.2w次閱讀
- 嵌入式系統(tǒng)開發(fā)中驅(qū)動程序設(shè)計的5個方法盤點 3.7k次閱讀
- 關(guān)于驅(qū)動程序設(shè)計的5個竅門 4.9k次閱讀
- 8255A驅(qū)動程序 3.9k次閱讀
- 8155驅(qū)動程序 3.8k次閱讀
- max7219點陣驅(qū)動程序分享 2w次閱讀
- Xilinx設(shè)備的驅(qū)動程序 8.7k次閱讀
- 基于Android的低功耗移動心電監(jiān)控系統(tǒng)的設(shè)計方案 5.3k次閱讀
- PCI驅(qū)動程序開發(fā)實例 7.3k次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊
- 0.74 MB | 1次下載 | 免費
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產(chǎn)品手冊
- 0.43 MB | 1次下載 | 免費
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費
- 3RV1126B系列開發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費
- 6【開源】60余套STM32單片機、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項目案例及入門學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論