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

下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 增量式PID控制算法程序設(shè)計(jì)方案下載 7次下載
- 嵌入式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次下載
- 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)程序 589次閱讀
- 解析PLC梯形圖程序設(shè)計(jì) 1609次閱讀
- ProfiNet輸入/輸出端的驅(qū)動(dòng)程序解析 3579次閱讀
- 嵌入式Linux內(nèi)核的驅(qū)動(dòng)程序開發(fā)是怎樣的 1521次閱讀
- 什么是非標(biāo)自動(dòng)化設(shè)備及分類介紹 4.3w次閱讀
- POE供電優(yōu)缺點(diǎn)講解 非標(biāo)準(zhǔn)POE危害是什么? 7.5w次閱讀
- 淺談電腦驅(qū)動(dòng)程序的工作原理 詳解電腦驅(qū)動(dòng)程序意義 3w次閱讀
- 嵌入式系統(tǒng)開發(fā)中驅(qū)動(dòng)程序設(shè)計(jì)的5個(gè)方法盤點(diǎn) 3244次閱讀
- 關(guān)于驅(qū)動(dòng)程序設(shè)計(jì)的5個(gè)竅門 4487次閱讀
- 8255A驅(qū)動(dòng)程序 3429次閱讀
- 8155驅(qū)動(dòng)程序 3284次閱讀
- max7219點(diǎn)陣驅(qū)動(dòng)程序分享 1.9w次閱讀
- Xilinx設(shè)備的驅(qū)動(dòng)程序 8200次閱讀
- 基于Android的低功耗移動(dòng)心電監(jiān)控系統(tǒng)的設(shè)計(jì)方案 2779次閱讀
- PCI驅(qū)動(dòng)程序開發(fā)實(shí)例 6831次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論