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

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

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

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

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





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