1Android系统移植与驱动开发概述
1、Android系統(tǒng)架構(gòu)分為四層,從下至上依次為Linux內(nèi)核層,C/C++代碼庫、Android SDK API、應(yīng)用程序,要熟悉每一層的內(nèi)容以及功能;
2、Android移植分為應(yīng)用移植和系統(tǒng)移植,系統(tǒng)移植的主要工作是移植Linux驅(qū)動和移植HAL,Android移植的基本原則是盡可能找到驅(qū)動和HAL的源代碼,在源代碼的基礎(chǔ)上修改要容易得多,如果實在找不到源代碼,只能從頭開始編寫。Android移植很大程度上是Linux內(nèi)核移植,Linux內(nèi)核移植主要是移植驅(qū)動程序,不同Linux版本的驅(qū)動程序不能通用,需要修改源代碼,并且要在新的Linux內(nèi)核下重新編譯才可以運(yùn)行在新的Linux內(nèi)核版本下;
3、驅(qū)動開發(fā)與內(nèi)核版本的依賴程度很高,所以做驅(qū)動開發(fā)之前,要明確Linux內(nèi)核版本,目前Linux內(nèi)核主要維護(hù)的三個版本是:Linux2.4、Linux2.6和Linux3.x;查看Linux系統(tǒng)內(nèi)核版本的方法有2種:使用命令【uname -a】或者【cat /proc/version】;需要注意的是,/proc不是普通的文件系統(tǒng),而是系統(tǒng)內(nèi)核的映象,該目錄中的文件是存放在系統(tǒng)內(nèi)核之中的,它以文件系統(tǒng)的方式為訪問系統(tǒng)內(nèi)核數(shù)據(jù)的操作提供接口;
4、Linux內(nèi)核版本好的組成:主版本號、次版本號、修訂版本號、微調(diào)版本號、為特定的Linux系統(tǒng)特別調(diào)校的描述;
5、要想學(xué)習(xí)好Linux驅(qū)動開發(fā),要做到以下幾點:
(1)?? 準(zhǔn)備一個自己熟悉的Linux操作系統(tǒng),用于開發(fā)和測試Linux驅(qū)動;
(2)?? 準(zhǔn)備一塊開發(fā)板;
(3)?? 學(xué)習(xí)GUN C;
(4)?? 學(xué)習(xí)相關(guān)硬件知識;
(5)?? 不斷地實踐;
6、Linux設(shè)備驅(qū)動的作用:對硬件進(jìn)行抽象,降低應(yīng)用程序與硬件的耦合度;
7、Linux設(shè)備分為:
(1)?? 字符設(shè)備:必須以串行順序依次進(jìn)行訪問的設(shè)備;
(2)?? 塊設(shè)備:可以以任意順序進(jìn)行訪問,以塊為單位進(jìn)行操作;
(3)?? 網(wǎng)絡(luò)設(shè)備
8、任何的Linux驅(qū)動都有一個裝載函數(shù)(裝載驅(qū)動時調(diào)用)和一個卸載函數(shù)(卸載驅(qū)動時調(diào)用),裝載函數(shù)和卸載函數(shù)分別通過module_init和module_exit宏指定;
9、Linux驅(qū)動只與Linux內(nèi)核有關(guān),與Linux系統(tǒng)無關(guān),只要使用相同的內(nèi)核,驅(qū)動就可以通用;判斷內(nèi)核是否相同的方法就是Linux內(nèi)核版本號,只有組成內(nèi)核版本號的五部分完全相同,才能說明兩個Linux系統(tǒng)的內(nèi)核是相同的;
10、??????????? Android驅(qū)動與Linux驅(qū)動的區(qū)別就是Android增加了HAL,一般的Android驅(qū)動都會有對應(yīng)的HAL,但也不是必須的,通過NDK可以直接訪問Linux驅(qū)動,但Google建議最好為Linux驅(qū)動編寫對應(yīng)的HAL程序庫;
轉(zhuǎn)載于:https://www.cnblogs.com/mch0dm1n/p/5443202.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的1Android系统移植与驱动开发概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eclipse项目环境配置
- 下一篇: Android Button监听的方式