版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Android底層(dǐcénɡ)開發(fā)驅(qū)動李偉民weiminli@共二十四頁WhatisDriver?驅(qū)動程序的魅力硬件不能使用?------70%沒安裝驅(qū)動PC和手機要使用外部(wàibù)硬件設備,均需要安裝對應的驅(qū)動程序驅(qū)動程序扮演一個溝通的角色,負責把硬件的功能告訴操作系統(tǒng),并且將系統(tǒng)的指令傳達給硬件,讓他開始工作。共二十四頁WhatisDriver?Windows驅(qū)動購買(gòumǎi)的硬件附帶有驅(qū)動Windows系統(tǒng)自帶有大量的驅(qū)動從Internet下載驅(qū)動手機驅(qū)動手機一般不能和電腦直接連接,必須用手機自帶的磁盤驅(qū)動一下。本質(zhì)上是安裝一個讀取手機內(nèi)存信息的程序。共二十四頁開源(kāiyuán)還是不開源(kāiyuán)?Android是基于(jīyú)Linux的,Linux是完全開源的,Android也號稱開源。But!2010年2月,Linux的維護者卻將Android代碼從LinuxKernel代碼庫中刪除。原因:Android修改了Kernel,但不提供修改的細節(jié)。Android不真正開源!共二十四頁從為什么選擇(xuǎnzé)Java談為什么不開源驅(qū)動程序Java的好處只要編寫一次程序,在多個硬件平臺上運行為什么驅(qū)動不開源?LinuxKernel的版權是GPL,驅(qū)動也需公開源代碼。這是硬件廠商不太愿意接受的。Google玩了小心機:把驅(qū)動程序移到userspace中,讓其在LinuxKernel之上運行。然后在Kernel上開一個小門,讓本來(běnlái)不能直接控制到硬件的userspace程序也可以碰得到。共二十四頁從為什么選擇(xuǎnzé)Java談為什么不開源驅(qū)動程序帶來的問題Kernel(GPL)和Android(ASL)采用不同的許可證。在ASL中,用戶可以隨意使用源代碼而不必開源。因此建立在Android之上的硬件驅(qū)動和應用程序都可以保持封閉。影響有利于推廣Android,并且可以吸引更多的廠商和軟件開發(fā)商的加入。同時(tóngshí)也宣布放棄了構建一個真正開源的手機系統(tǒng)的機會。共二十四頁Android框架(kuànɡjià)共二十四頁Android層次(céngcì)分析內(nèi)核層:Linux的一個變種避開了與硬件直接打交道基于Linux的的驅(qū)動(qūdònɡ)開發(fā)可擴展性很強硬件抽象層:內(nèi)核之上的“小門”UserspaceC/C++librarylayerDefinestheinterfacethatAndroidrequireshardware“drivers”toimplementSeparatestheAndroidplatformlogicfromthehardwareinterface本質(zhì)上希望通過定義硬件“驅(qū)動”的借口來進一步降低Android與硬件的耦合度共二十四頁Android層次(céngcì)分析系統(tǒng)運行庫層:系統(tǒng)正常運行的基礎庫C庫層,實際上很多都是成熟的開源項目Android是如何有機地與這些庫建立聯(lián)系應用程序框架(kuànɡjià)層:與APP開發(fā)人員關系最近Java庫,為上層應用程序提供了API接口囊括了不少系統(tǒng)級服務進程的實現(xiàn)應用程序?qū)覣ndroid軟件開發(fā)分為:系統(tǒng)移植與應用程序開發(fā)不僅要了解如何使用API接口去完成一個功能,還要盡可能了解這些接口及其下的底層框架是如何實現(xiàn)的共二十四頁Linux架構(jiàɡòu)用戶應用程序C庫Linux系統(tǒng)調(diào)用接口進程管理內(nèi)存管理Linux文件系統(tǒng)字符設備驅(qū)動磁盤/Flash文件系統(tǒng)塊設備驅(qū)動套接字TCP/IP網(wǎng)絡驅(qū)動設備硬件操作系統(tǒng)共二十四頁Android與LinuxLinux簡介向企業(yè)(qǐyè)核心應用邁進主導移動平臺新技術為Linux加速:虛擬化,云計算,大數(shù)據(jù)Android和Linux的關系Android是繼承于Linux的Android和Linux內(nèi)核的區(qū)別:Android在底層Linux上加了一層Dalvik,Android的APP運行在Dalvik上(.dex)共二十四頁和Android密切相關的Linux內(nèi)核(nèihé)知識安全用戶權限和文件目錄權限內(nèi)存管理確定是否有足夠的內(nèi)存來處理數(shù)據(jù)(shùjù)從可用的內(nèi)存中獲取一部分內(nèi)存向可用內(nèi)存池中返回部分內(nèi)存,以使其可以由程序的其他部分或者其他程序使用進程管理幾個命令:ps、pstree、top、kill、nice設備驅(qū)動、網(wǎng)絡套接字共二十四頁分析(fēnxī)Linux源代碼很有必要三個前提:熟練使用Linux操作系統(tǒng)掌握操作系統(tǒng)理論基礎掌握C語言(yǔyán)基礎源代碼目錄結構分析 arch:和硬件體系結構相關的代碼,每種平臺占一個相應目錄。 drivers:設備驅(qū)動程序,每個不同驅(qū)動占用一個子目錄。 fs:支持的各種文件系統(tǒng),如EXT、FAT、NTFS、JFFS2。 block:塊設備驅(qū)動程序I/O調(diào)度。 include:與系統(tǒng)相關的頭文件放在include/linux下。 init:內(nèi)核初始化代碼。 kernel:內(nèi)核最核心部分,和平臺相關的一部分放在arch/*/kernel mm:內(nèi)存管理代碼,和平臺相關的一部分放在arch/*/mm scripts:用于配置內(nèi)核的腳本文件。 usr:實現(xiàn)了用于打包和壓縮的cpio等。共二十四頁分析(fēnxī)Linux源代碼很有必要瀏覽(liúlǎn)源代碼的工具:SourceInsight為什么用匯編語言編寫內(nèi)核代碼內(nèi)核底層代碼直接和硬件打交道,需要一些專用指令提高調(diào)用效率縮小代碼空間兩種形式:.S文件;嵌入到C語言中Linux內(nèi)核的顯著特性GCC特性鏈表的重要性:內(nèi)核鏈表為雙向鏈表,在include/linux/list.h文件中有定義共二十四頁Makefile在Linux內(nèi)核中增加源代碼需要完成以下3項工作將編寫的源代碼拷入Linux內(nèi)核源代碼的相應目錄在目錄的Kconfig文件中增加關于新源代碼對應項目的配置選項在目錄的Makefile文件中增加對新源代碼的編譯條目Makefile定義Linux內(nèi)核的編譯規(guī)則,make工具可以實現(xiàn)自動編譯和增量(zēnɡliànɡ)編譯,但必須告訴make源程序之間的依賴關系,描述這種關系的就是Makefile文件共二十四頁Linux內(nèi)核(nèihé)及編程Makefile決定編譯哪些文件頂層Makefile決定內(nèi)核根目錄下哪些子目錄將被編進內(nèi)核(采用遞歸的方式(fāngshì))。arch/$(ARCH)/Makefile決定arch/$(ARCH)目錄下哪些文件、哪些目錄將被編進內(nèi)核。各級子目錄下的Makefile決定所在目錄下哪些文件將被編進內(nèi)核,哪些文件將被編成模塊(即驅(qū)動程序),進入哪些子目錄繼續(xù)調(diào)用它們的Makefile。共二十四頁Linux內(nèi)核(nèihé)及編程Makefile怎樣連接這些文件,它們的順序(shùnxù)如何?arch/arm/Makefile:頂層Makefile:共二十四頁Linux內(nèi)核(nèihé)及編程Makefile頂層Makefile按照一定的順序組織文件,根據(jù)連接腳本arc/$(ARCH)/kernel/vmlinux.lds生成內(nèi)核映象文件vmlinux。obj–y用來(yònɡlái)定義哪些文件被編進(built-in)內(nèi)核。obj-m用來定義哪些文件被編譯成可加載模塊(Loadablemodule)。lib-y用來定義哪些文件被編成庫文件。obj-y、obj-m還可以用來指定要進入的下一層子目錄。共二十四頁Linux內(nèi)核(nèihé)及編程Makefile目標定義定義哪些內(nèi)容作為模塊編譯,哪些要編譯并連接進內(nèi)核。更常見的做法:根據(jù)(gēnjù).config文件中的CONFIG變量來決定文件編譯方式,如:obj-y+=foo.c:表示要由foo.c或者foo.s文件編譯得到foo.o并連接進內(nèi)核。obj-$(CONFIG_ISDN)+=isdn.oobj-$(CONFIG_ISDN_PPP_BSDCOMP)+=isdn_bsdc.o共二十四頁Linux內(nèi)核(nèihé)及編程Kconfig一個文本形式的文件,其中主要作用是在內(nèi)核配置時候,作為配置選項,是各種配置界面的源文件。內(nèi)核的配置工具讀取各個Kconfig文件,生成配置界面供開發(fā)人員配置內(nèi)核,最后生成配置文件.config。內(nèi)核的配置界面以樹狀的菜單(càidān)形式組織,主菜單(càidān)下有若干個子菜單(càidān),子菜單(càidān)下又有子菜單或配置選項。每個子菜單(càidān)或選項可以有依賴關系,這些依賴關系用來確定它們是否顯示。只有被依賴項的父項已經(jīng)被選中,子項才會顯示。內(nèi)核源碼每個子目錄中,都有一個Makefile文件和Kconfig文件。共二十四頁Linux內(nèi)核(nèihé)及編程Kconfigconfig條目config條目用來配置一個選項,它用于生成一個變量,這個變量會連同它的值一起(yīqǐ)被寫入配置文件.config中。config出現(xiàn)的三種配置結果:config關鍵字,表示一個配置選項的開始。CONFIG_LEDS_S3C24XX=y#對應的文件被編進內(nèi)核CONFIG_LEDS_S3C24XX=m#對應的文件被編成模塊#CONFIG_LEDS_S3C24XX#對應的文件沒有被使用共二十四頁Kconfig、MakeFile、.config三者之間的聯(lián)系(liánxì)我們在內(nèi)核源碼下面執(zhí)行make命令,實際上是根據(jù)makefile來進行編譯的。obj-$(CONFIG_ISDN)+=isdn.o中CONFIG_ISDN是一個變量,這個變量的賦值則是通過.config文件來集中賦值的。CONFIG_ISDN=y.config文件是通過Kconfig配置生成的。當更改Kconfig文件或者通過配置工具進行內(nèi)核配置的時候(shíhou)會自動更新.config中相應的值共二十四頁TheEndT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度茶樓與茶葉種植基地合作租賃協(xié)議4篇
- 2025年度拆除工程噪聲及揚塵控制合同4篇
- 2025年度智能倉儲廠房購買及自動化解決方案合同4篇
- 專屬2024版月餅銷售代理協(xié)議版B版
- 二零二五年度綠色能源項目商鋪租賃合同樣本2篇
- 2024物流企業(yè)融資租賃合同
- 2025年度廠房墻地磚節(jié)能減排改造項目合同3篇
- 2024版螺旋鋼管買賣合同書
- 2025年廠區(qū)光伏發(fā)電與配電一體化工程承包合同4篇
- 2024照明工程分包合同
- 長鏈氯化石蠟
- 小學六年級數(shù)學解方程計算題
- 春節(jié)英語介紹SpringFestival(課件)新思維小學英語5A
- 進度控制流程圖
- 2023年江蘇省南京市中考化學真題
- 【閱讀提升】部編版語文五年級下冊第四單元閱讀要素解析 類文閱讀課外閱讀過關(含答案)
- 供電副所長述職報告
- 現(xiàn)在完成時練習(短暫性動詞與延續(xù)性動詞的轉(zhuǎn)換)
- 產(chǎn)品質(zhì)量監(jiān)控方案
- 物業(yè)總經(jīng)理述職報告
- 新起點,新發(fā)展心得體會
評論
0/150
提交評論