編輯:Android開發教程
Android本質上是基於Linux內核的系統,也就是說Android就是一種Linux操作系統。只不過大多數時候都會運行在ARM架構的設備上,例如,Android手機、平板等。Android驅動實際上就是Linux驅動,只是這裡使用Android深度探索(卷1):安裝C/C++交叉編譯環境 介紹的交叉編譯器將Linux驅動編譯成了ARM架構的,所以驅動可以安裝在Android模擬器、Android手機(需要root)或平板上(這些設備 都要使用給予ARM架構的CPU),當然,使用傳統的GCC也可以編譯成X86架構的驅動(並不需要修改代碼),這樣也可以在Ubuntu Linux上安裝Linux驅動。
本文及後面幾篇文章主要介紹如何利用Android模擬器和S3C6410開發板開發給予ARM架構的Linux驅動,當然,測試的環境是 Android,而不是我們通常使用的Ubuntu Linux等X86架構的系統。最後會介紹通過多種方式測試這個驅動,測試方法包括命令行、NDK、Android程序(Java代碼)等,當然,在最最 後還會介紹如果將驅動嵌入到LInux內核中,這樣Android在啟動是就自動擁有了這個驅動。
想學習Android底層開發的童鞋可以通過本文完全掌握開發基於Android的LInux驅動的完整步驟。在《Android深度探索(卷1):HAL與驅動開發》隨書光盤上有完整的實驗環境(VMWare Ubuntu Linux12.04LTS),如果嫌自己配置麻煩,可以從光盤中復制該虛擬環境,虛擬文件太大(3.6G),傳不上去,只能發文章了!
一、Linux驅動到底是個什麼東西
對於從未接觸過驅動開發的程序員可能會感覺Linux驅動很神秘。感覺開發起來會很復雜。其實這完全是誤解。實際上Linux驅動和普通的LinuxAPI沒有本質的區別。只是使用Linux驅動的方式與使用Linux API的方式不同而已。
在學習Linux驅動之前我們先來介紹一下Linux驅動的工作方式。如果讀者以前接觸過Windows或其他非Unix體系的操作系統,最好將它們的工作方式暫時忘掉,因為這些記憶會干擾我們理解Linux底層的一些細節。
Linux驅動的工作和訪問方式是Linux的亮點之一,同時受到了業界的廣泛好評。Linux系統將每一個驅動都映射成一個文件。這些文件稱為設備文件 或驅動文件,都保存在/dev目錄中。這種設計理念使得與Linux驅動進行交互就像與普通文件進行交互一樣容易。當然,也比訪問LinuxAPI更容 易。由於大多數Linux驅動都有與其對應的設備文件,因此與Linux驅動交換數據就變成了與設備文件交換數據。例如,向Linux打印機驅動發送一個 打印命令,可以直接使用C語言函數open打開設備文件,再使用C語言函數ioctl向該驅動的設備文件發送打印命令。
當然,要編寫Linux驅動程序還需要更高級的功能。如向打印機驅動寫入數據時,對於打印機驅動來說,需要接收這些被寫入的數據,並將它們通過PC的並 口、USB等端口發送給打印機。要實現這一過程就需要Linux驅動可以響應應用程序傳遞過來的數據。這就是Linux驅動的事件,雖然在C語言裡沒有事 件的概念,但卻有與事件類似的概念,這就是回調(callback)函數。因此,編寫Linux驅動最重要的一步就是編寫回調函數,否則與設備文件交互的 數據將無法得到處理。圖6-1是應用軟件、設備文件、驅動程序、硬件之間的關系。
有些情況需要將同一類型映射到不同的類實現,還是使用繪圖的例 子.IShape, Rectangle, MyRectangle, MySquare,有如下繼承關系:我們可能
Gallery可以顯示一系列的圖片,並且可以橫向滑動。下面展示如何使用Gallery去顯示一系列的圖片。1. 創建一個工程,Gallery。2. main.xml中的代碼
1.1.1 VSync信號的處理經過上一小節的分析,現在我們已經明白了系統是如何通過硬件設備或者軟件模擬來產生VSync信號的,也明白了它的流轉過程。VSync最終會被E
這段時間的自定義View學習,學會了繪制柱狀圖、繪制折線圖、繪制進度控件,那我們今天就來聊聊另外一種自定義的View,這就是我們常見的七日年化收益折線圖效果。先看看長什麼
Local Service Controller 是將LocalServ