標籤:
本章我們主要學習了Android移植與驅動的關係,裝置驅動模組,Linux核心與Android驅動,以及Android驅動的HelloWord這些內容!任何一個電腦系統的運行都是系統中軟硬體協作的結果,沒有硬體的軟體是空中樓閣,而沒有軟體 的硬體則只是一堆廢鐵。硬體是底層基礎,是所有軟體得以啟動並執行平台,代碼最終會落實為硬體上的組合 邏輯與時序邏輯;軟體則實現了具體應用,它按照各種不同的業務需求而設計,滿足了使用者的需求。硬體 較固定,軟體則很靈活,可以適應各種複雜多變的應用。可以說,電腦系統的軟硬體互相成就了對方。 但是,軟硬體之間同樣存在著悖論,那就是軟體和硬體不應該互相滲透到對方的領地。為了儘可能快速地 完成設計,應用軟體工程師不想也不必關心硬體,而硬體工程師也難有足夠的閑暇和能力來顧及軟體。 例如,應用軟體工程師在調用通訊端發送和接收資料包時,不必關心網卡上的中斷、寄存器、儲存空 間、I/O 連接埠、片選,以及其他任何硬體詞彙;在使用 printf()函數輸出資訊時,不用知道底層究竟是怎樣 把相應的資訊輸出到螢幕或串口的。也就是說,應用軟體工程師需要看到一個沒有硬體的純粹的軟體世界, 硬體必須被透明地呈現給他們。誰來實現硬體對應用軟體工程師的隱形?這個艱巨的任務就落在了驅動工 程師的身上。對裝置驅動最通俗的解釋就是“驅使硬體裝置行動”。裝置驅動與底層硬體直接打交道,按 照硬體裝置的具體工作方式讀/寫裝置寄存器,完成裝置的輪詢、中斷處理、DMA 通訊,進行實體記憶體向 虛擬記憶體的映射,最終使通訊裝置能夠收發資料,使顯示裝置能夠顯示文字和畫面,使存放裝置能夠記錄 檔案和資料。由此可見,裝置驅動充當了硬體和應用軟體之間的紐帶,它使得應用軟體只需要調用系統軟 件的應用編程介面(API)就可讓硬體去完成要求的工作。在系統中沒有作業系統的情況下,工程師可以 根據硬體裝置的特點自行定義介面,如對串口定義 SerialSend()、SerialRecv();對 LED 定義 LightOn()、 LightOff();以及對 Flash 定義 FlashWrite()、FlashRead()等。而在有作業系統的情況下,裝置驅動的架構則 由相應的作業系統定義,驅動工程師必須按照相應的架構設計裝置驅動,這樣,裝置驅動才能良好地整合 到作業系統的核心中。驅動程式溝通著硬體和應用軟體,而驅動工程師則溝通著硬體工程師和應用軟體工 程師。
第五章Android移植與驅動讀書筆記